3

如果您想gmongo为整个测试套件建立连接,然后在执行整个测试套件后在拆除操作中将其关闭,我们该怎么做?

目前我正在做的是,我正在为特定的测试步骤创建一个连接,然后在执行测试步骤后,我使用代码关闭连接mongoClient.close()

但是现在有一个要求,我需要在测试套件开始执行之前创建连接,在测试用例/测试步骤中的整个测试套件中使用相同的连接,然后在整个测试套件执行后关闭连接。

谁能告诉我如何使用Ready!API做到这一点?

我可能听起来迟钝,因为我是 Ready API 的新手,所以请多多包涵 这是我用来创建与 mongo 的连接的代码

 def dbUser = context.expand( '${#Project#MongoUser}' )
    def dbPassword = context.expand( '${#Project#MongoPassword}' )
    def dbServer = context.expand( '${#Project#MongoServer}' )
    def dbDatabase = context.expand( '${#Project#MongoDatabase}' )
    def credentials = MongoCredential.createCredential(dbUser,dbDatabase,dbPassword as char[])
    def mongoClient = new MongoClient( new ServerAddress(dbServer),Arrays.asList(credentials) )
    context.gmongo = new GMongo( mongoClient )
    context.mongoDB = context.gmongo.getDB(dbDatabase)

所以我一直在使用当前代码来创建连接。实际上我希望这是三个测试套件。第一个测试套件将包含用于创建连接的 groovy 脚本,第二个测试套件将包含我所有的测试用例,第三个测试套件将包含 mongo 关闭连接脚本。

我们使用属性文件中的环境值。这里的 MongoServer 具有建立连接的环境的值

我无法理解@Rao,你是如何在测试用例中调用 conn 变量的。特别是 context.testCase.testSuite.db?.connection 部分。“?”是什么意思?表示,您能否在上述情况下告诉我,如何执行该过程

4

1 回答 1

3

下面的脚本解决了您如何在ReadyAPI / SoapUI. 请注意,您已经知道如何gmongo在 Groovy 中连接,您需要按照内联注释在占位符中添加该逻辑。

下面是Setup Script创建数据库连接的测试套件级别。

class DatabaseDetails {
    def server
    def user
    def password
    def log
    def getConnection() {
        log.info 'connection created'
        //Write logic to create connection
    }
    def closeConnection() {
        log.info 'Closing connection'
        //Write logic to close connection
    }
}
//Change server, user, password values according to your environment
def db = [ server:'localhost', user:'dbuser', password: 'dbuserpasswd', log: log] as DatabaseDetails
if (!db.connection) {
    db.connection
    testSuite.metaClass.db = db 
}

下面是TearDown Script关闭数据库连接的测试套件级别。由于这是在拆卸脚本中,因此一旦测试套件执行完成,连接就会自动关闭

testSuite.db?.closeConnection()

现在,没有必要一次又一次地创建数据库连接。您只需要在Groovy Script测试步骤中使用下面的脚本来获取现有的数据库连接

def conn = context.testCase.testSuite.db?.connection

使用conn变量,您应该能够执行查询。

注意:由于数据库连接是在Setup Script测试套件中完成的,如果您只是运行测试用例(即没有调用或执行测试套件),您可能无法获得连接。在这种情况下,手动执行Setup Script测试套件。

编辑:基于 OP 对问题的编辑和他的代码片段,这里是更新的测试套件的Setup Script. 这负责执行getConnection()closeConnection()基于 OP 的编辑。请为使用的 Mongo 类添加/编辑导入语句,因为我并不真正了解这些。

更新了测试套件的设置脚本

import com.gmongo.*
import com.mongodb.*

class DatabaseDetails {
    def context
    def log
    def mongoClient
    def mongoDB
    def getConnection() {
        log.info 'Creating connection.'
        //Write logic to create connection
        if (!mongoDB){        
        def credentials = MongoCredential.createCredential(
           context.expand('${#Project#MongoUser}'),
           context.expand('${#Project#MongoDatabase}'),
           context.expand('${#Project#MongoPassword}') as char[])
        mongoClient = new MongoClient( new ServerAddress(context.expand('${#Project#MongoServer}')),Arrays.asList(credentials) ) 
        mongoDB = new GMongo( mongoClient ).getDB(context.expand('${#Project#MongoDatabase}'))          
      }
      mongoDB
    }

    def closeConnection() {
        log.info 'Closing connection'
        //Write logic to close connection
        mongoClient.close()
    }
}

def db = [ context: context, log: log] as DatabaseDetails
if (!db.connection) {
    db.connection
    testSuite.metaClass.db = db 
}

如前所述,要获得连接,请使用以下代码并对其进行解释。

context.testCase.testSuite.db?.connection

Groovy 有一个很棒的特性,叫做 ExpandoMetaclass。db被注入到testSuite类中,并且是我们在测试套件中创建和实例化db的类的对象。DatabaseDetailsSetup Script

并且db包含getConnection()ie,db.getConnection()也可以和db.connection. 这就是上述语句中可用连接的方式。

于 2017-03-24T09:09:13.990 回答