SOAPUI & Groovy Scripts, выполняющие несколько операторов SQL за один раз - PullRequest
3 голосов
/ 11 июня 2010

У меня есть несколько тестов soapUI, которые используют скрипты groovy для первой вставки некоторых данных в таблицу

Ранее я использовал следующий фрагмент кода для этого:

      def conn = context.dbConnEtopup
      conn.execute( "INSERT INTO A(ID, NAME) VALUES (1, "Johnny")" )

Это прекрасно работает, однако у меня есть много тестовых сценариев, которые теперь выполняют аналогичные (если не одинаковые) операторы SQL, поэтому я пытаюсь подойти к этому, загрузив его из файла свойств, поэтому мой фактический оператор SQLнаходится только в одном месте, для облегчения редактирования

Однако мой оператор SQL, который я пытаюсь использовать, на самом деле состоит из 2 вставок (или удалений), поэтому загружаемое свойство имеет вид:

DELETE * FROM TABLE_A; DELETE * FROM TABLE_B;

conn.execute() не может обработать ;, что означает, что я могу использовать только первое DELETE утверждение

Как я могу обойти это?Я не хочу загружать каждое свойство отдельно и выполнять их.В идеале я просто хочу одно свойство, чтобы в будущем я мог добавить еще операторы удаления

Ответы [ 3 ]

5 голосов
/ 28 ноября 2010

Некоторые драйверы JDBC поддерживают несколько операторов, и эта функция будет доступна через класс Groovy Sql, например с MySql:

def props = [user: 'myuser', password: 'mypassword', allowMultiQueries: 'true'] as Properties
def url = 'jdbc:mysql://127.0.0.1:3306/mydb'
def driver = 'com.mysql.jdbc.Driver'
def sql = Sql.newInstance(url, props, driver)
sql.execute """
  insert into PERSON (id, firstname, lastname) values (1, 'Dierk', 'Koenig');
  insert into PERSON (id, firstname, lastname) values (2, 'Guillaume', 'Laforge');
  insert into PERSON (id, firstname, lastname) values (3, 'Jon', 'Skeet');
"""
3 голосов
/ 11 июня 2010

Не могли бы вы просто сохранить их в файле свойств с точкой с запятой, а затем удалить их после прочтения, например,

String sqlProperty = // read SQL property from file
def statements = sqlProperty.split(";")

// Execute each statment using conn (an instance of groov.sql.Sql?)
statements.each { conn.execute(it);
1 голос
/ 27 ноября 2010

Иногда этого недостаточно. Посмотрите мое решение: Запуск нескольких операторов SQL из Groovy

...