среда, 5 декабря 2012 г.

SoapUI, JDBC. Подключаемся к БД один раз на проект/тест-кейс/тест-сьют

В бесплатной версии SoapUI, к сожалению, отсутствует явный JDBC connection, поэтому пришлось потанцевать с бубном дабы подружить soapUI c базой данных.
Конечно, простое подключение, когда для каждого шага создается новое подключение к БД реализуется легко и этот способ вполне себе описан в документации.

import groovy.sql.Sql
com.eviware.soapui.support.GroovyUtils.registerJdbcDriver("com.microsoft.sqlserver.jdbc.SQLServerDriver")
def dbUrl='jdbc:sqlserver://<DBIp>\\<DBInstance>;databaseName=<DBName>'
def sql = Sql.newInstance(dbUrl,'user','pass', 'com.microsoft.sqlserver.jdbc.SQLServerDriver')
def row = sql.firstRow("select count(*) cnt from Table")log.info row.cnt

Но делать это в каждом шаге абсолютно не хотелось. Поэтому решил найти выход из данной ситуации. И таки нашел!


В явном виде soapUI, походу, глобальные переменные не поддерживает. Поэтому предлагается использовать context.

В результате инициализировать подключение к БД можно произвести в одном из следующих мест:
  1. Project LoadScript
  2. TestSuite ScriptSetup
  3. TestCase ScriptSetup
  4. TestCaseStep - Groovy Script
Первые 3 способа реализуются однотипно:
import groovy.sql.Sql
if (context.sqlconn == null) {

com.eviware.soapui.support.GroovyUtils.registerJdbcDriver("com.microsoft.sqlserver.jdbc.SQLServerDriver")
def dbUrl='jdbc:sqlserver://<DBIp>\\<DBInstance>;databaseName=<DBName>'def sql = Sql.newInstance(dbUrl,'user','pass', 'com.microsoft.sqlserver.jdbc.SQLServerDriver')
context.setProperty("sqlconn", sql)
}

Для использования подключения в нужном шаге достаточно написать:

def row = context.sqlconn.firstRow("select count(*) cnt from Table")
log.info row.cnt

В четвертом случае необходимо внутри каждого тест-кейса создать GroovyScript TestStep  с идентичным наполнением, т.е. таким же как и для SetupScript. Шаг может быть disabled.

А вот использование подключений будет отличаться:

testRunner.runTestStepByName("InitDatabaseConnScript")
def row = context.sqlconn.firstRow("select count(*) cnt from Table")
log.info row.cnt

Связано, это с тем, что context "живет" только во время запуска всего кейса/сьюта/проекта, поэтому необходимо его "оживить" принудительно.
Т.е. при запуске всего тест-кейса можно пропустить строку runTestStepByName.

Поэтому пока производим отладку добавляем дополнительный шаг, когда тест работает, то можно перенести инициализацию в ScriptSetup и закрытие подключения в TearDown.

P.S. В soapUI API описаны методы runTestSuiteScriptSetup, runTestCaseScriptSetup etc., но как ими пользоваться пока не разобрался. Когда разберусь 4 вариант можно будет использовать в исключительных случаях :-)

Комментариев нет:

Отправить комментарий