Создайте монго-соединение и сделайте его живым для выполнения всего набора тестов в Ready!API

Если вы хотите сделать 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 для создания соединения, второй набор тестов будет содержать все мои тестовые случаи, а третий набор тестов будет содержать сценарий соединения монго закрытия.

Мы используем значения Environment из файла свойств. Здесь MongoServer имеет значения среды, в которой устанавливается соединение

Я не мог понять @Rao, как вы вызывали переменную conn внутри тестовых случаев. Особенно context.testCase.testSuite.db?.Connection часть. Что это "?" Обозначим и не могли бы вы сказать мне в вышеуказанном контексте, как можно выполнить процесс

1 ответ

Решение

Ниже сценария укажите, как вы добиваетесь того, что ищете в 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, которые используются, поскольку я действительно не знаю об этом.

Обновлен скрипт установки Test Suite

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 является объектом DatabaseDetails класс, который мы создали и создали в Setup Script тестового набора.

А также db содержит getConnection() т.е. db.getConnection() который может так же, как db.connection, Вот как соединение доступно в приведенном выше заявлении.

Другие вопросы по тегам