Как подключить через soapui к бд

от admin

SoapUI – соединение JDBC

SoapUI позволяет управлять работой базы данных с помощью TestStep, который называется JDBC Request.

Шаг 1 – Щелкните правой кнопкой мыши TestStep и выберите Добавить шаг → Запрос JDBC.

Шаг 2 – введите имя шага и нажмите ОК.

Новый Шаг

Шаг JDBC добавлен. Дважды щелкните шаг, и откроется мастер JDBC.

Мастер JDBC

Чтобы создать соединение JDBC, пользователь должен предоставить действительный драйвер и строку подключения. Эти параметры используются для определения типа базы данных и создания соединения для использования базы данных.

Для MySQL драйвером базы данных может быть com.mysql.jdbc.Driver . Аналогично, для другой базы данных есть предопределенный драйвер, который можно найти в разделе документов базы данных.

Шаг 3 – Строка подключения должна быть в следующем формате –

Здесь свойство – это имя пользователя и пароль, а также другие параметры, необходимые для соединения с базой данных.

Шаг 4 – Нажмите «Проверить соединение». При успешном подключении будет отображаться УСПЕХ, в противном случае предоставьте подробности отказа.

SoapUI. Tips and Hints по автоматизации тестирования для начинающих

Soap UI — удобная программа для автоматизации тестирования веб-сервисов. Обычные функции, вроде отправки и получения SOAP сообщений, работают из коробки. Для дополнительных плюшек, например, подключения БД, понадобиться также скачать соответствующий драйвер. Также Soap UI поддерживает язык программирования Groovy, с помощью которого можно написать достаточно сложные тесты.

SoapUI. Tips and Hints по автоматизации тестирования для начинающих

Установка, настройка, полезные ресурсы

Прежде всего нам понадобится:

  • SoapUI 64 bit Free (гайд для версии 5.3.0). По умолчанию на сайте загружается версия 32bit. Она подходит для большинства задач, но для особенно развесистых тестов разумнее будет использовать 64-битную версию (ссылка) для подключения к PostgreSQL . Версия 4.2 (файл postgresql-42.1.1.jar); для подключения к Oracle — ojdbc8.jar (если что, скачивать тут, требуется регистрация);
  • драйвер для вашей БД (в статье только PostgreSQL и Oracle);
  • поставить Java 1.8 версии 64;
  • для продвинутых операций, типа загрузки файлов по FTP, также понадобится библиотека [Apache commons Net]((http://commons.apache.org/proper/commons-net/download_net.cgi) — файл commons-net-3.6.jar (в архиве commons-net-3.6-bin.zip). Файл необходимо положить в папку (Windows) %INSTALL_DIR%\SoapUI-5.x.x\bin\ext .

После этого настроим работу с БД PostgreSQL:

  1. запустить один раз SoapUI;
  2. закрыть SoapUI;
  3. перейти в папку C:\Program Files\SmartBear\SoapUI-5.3.0 и переименовать папку jre в jre.ignore ;
  4. положить скачанный файл драйвера postgresql-42.1.1.jar в папки: C:\Program Files\SmartBear\SoapUI-5.3.0\bin\ext и в C:\Program Files\SmartBear\SoapUI-5.3.0\lib ;
  5. открыть SoapUI. В логе (в нижней панели есть SoapUI Log) должны быть записи вида Used java version: 1.8.0_121 и Adding [C:\Program Files\SmartBear\SoapUI-5.3.0\bin\ext\postgresql-42.1.1.jar] to extensions classpath

Что мы сделали и зачем: по умолчанию SoapUI работает на Java 7, драйвер postgresql-42.1.1.jar дружит с java 8 — в результате скрипты не выполнятся из-за разных версий java. Поэтому мы убрали встроенную в SoapUI java (переименовав папку), заставив его работать с java, которая установлена на компьютере (java 8). В принципе, можно также просто скачать драйвер для Java 1.7, но в дальнейшем может понадобиться использовать вставки кода Java 1.8 для особенно заковыристых тестов.

Теперь для oracle:

  1. положить файл ojdbc8.jar в папки C:\Program Files\SmartBear\SoapUI-5.3.0\bin\ext и в C:\Program Files\SmartBear\SoapUI-5.3.0\lib ;
  2. в Oracle должен существовать юзер, с которым можно подключиться к БД (sys подключиться не даст). Создаем пользователя:

Строка подключения к oracle (примеры использования будут ниже): jdbc:oracle:thin:testadmin/oracle@10.10.10.10:1521:orcl , драйвер oracle.jdbc.driver.OracleDriver .

Полезные примеры всяких скриптов и решений:

Использование java-классов и простой параметризации в тестах

В SoapUI прямо в SOAP запросах можно использовать простейшие java-функции, например генерировать случайный UUID для сообщения или дату. Вставка кода или переменной вместо значения в запрос выполняется в следующем формате. Начало кода предваряет символ доллара ( $ ), java код или переменная записываются в фигурные скобки <> .

Генерация случайного идентификатора

Например, функция генерации случайного идентификатора (UUID): =java.util.UUID.randomUUID() .

Можно вставить ее прямо в нужное поле, например для элемента XML-сообщения mesId: <mesId>$<=java.util.UUID.randomUUID()></mesId> .

Теперь при каждой отправке сообщения в этом поле будет генерироваться рандомный идентификатор, и ничего не нужно менять руками.

Генерация дат

Часто в сообщения XML проставляется дата. Для некоторых тестов иногда также требуется указывать диапазоны дат, или конкретные даты, например – дата и время минус 3 ч от текущего времени. В этом случае также можно воспользоваться функцией java.

Например, вот такая формула сгенерирует текущую дату с указанием таймзоны: $

Если требуется сгенерировать какую-то дату в прошлом или будущем, можно использовать такой код:

Параметризация данных

Предположим у нас есть проект, который нужно перенести на другую площадку. Или надо поменять логин или IP во всех запросах. Для всего в этого в SoapUI можно использовать свойства проекта (properties).

В свойствах проекта можно указывать в виде переменных какие-то значения, которые используются в запросах постоянно, а в самих запросах просто делать ссылку на эту переменную. Например, можно создать переменную, в которой указан логин пользователя для отправки запроса. В самих запросах указывать переменную. А если нужно перенести запрос на другую площадку, изменить пользователя — просто изменить значение переменной, и везде во всех запросах логин изменится автоматически.

Свойства проекта можно посмотреть в нижней левой панели при выделенном проекте на вкладке Custom Properties. Там же можно создать переменную (нажав кнопку с плюсом), задать имя переменной (например, login ) и значение (например, u.user ).

Чтобы использовать переменную в запросе, нужно сослаться на нее в формате: $

В самом запросе переменную можно вставить например так: <userId>$<#Project#login></userId>

Все переменные из проекта можно сохранить (экспортировать) в файл, а потом импортировать.

Тест-кейсы: Cookbook

Как создавать и из чего сделаны тест-суиты (Test Suite) и тест кейсы (Test Case) довольно здорово описано в официальной документации:

Каждый шаг в тесте может быть определенного типа, например JDBC или SOAP запрос, Groovy скрипт и другие.

Подключение к БД и вставка тестовых данных

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

Для подключения к БД будем использовать шаг тест-кейса Groovy Script. Для этого шага в принципе можно было бы использовать JDBC Request (подключение к БД), но для развесистых SQL запросов это не всегда удобно.

В окне редактирования скрипта используем код вида (пример для БД PostgreSQL):

Этот скрипт, конечно, работает, но можно его немного улучшить. Так как мы можем перемещать наши тесты между разными площадками и IP, было бы здорово, если можно было поменять подключение в свойствах проекта (параметризация и свойства проекта описаны в разделах выше). Для этого в свойствах проекта создаем три новых переменные, например:

Тогда строки подключения к БД будут выглядеть так:

Разбор XML-файла ответа, извлечение и разбор CDATA

Ответ от веб-сервиса может прийти в виде простой XML-структуры, которую довольно просто разобрать, не применяя Groovy-скрипты. Также ответ может приходить в виде развесистого XML, а нужные данные еще и в CDATA обернуты.

Предположим есть XML:

  1. извлечь из transferData/CDATA xml-ку с данными;
  2. посмотреть атрибут recordCount;
  3. посмотреть атрибут shortName.

Есть довольно длинный официальный гайд, как провернуть это без использования Groovy-скрипта, используя вместо этого фичу Property Transfer, но, по-моему, это как-то коряво. Мы используем Groovy-скрипт. В шаге теста, где мы запрашиваем сервис данные (GET), добавляем Assertion типа Script > Script Assertion. Используем следующий код (смотри комментарии). Как узнать путь (все эти *//:tranferData* и * @shortName*`) описано ниже.

Как узнать путь до конкретной переменной, что такое вообще путь в XML (XPath)? XML-структуру можно представить как дерево папок:

Можно составить путь до папки самому, а можно использовать замечательный плагин для Notepad++ — XML Tools > Current XML Path (выделив нужный узел, например <trasferData> — поставить туда курсор). Получится что-то вроде: /soap:Envelope/soap:Body/ns2:processRequestResponse/return/transferData

Это очень длинный путь со всякими непонятными ns2 и soap (это пространства имен). Нам это все не надо, весь длинный путь мы сокращаем, заменив все символом *. То есть скрипт будет раскрывать все “папки” структуры XML подряд пока не найдет указанную: //*:transferData .

Чтобы сослаться на конкретный атрибут поля data , используется указатель @имяатрибута , например, ссылаемся на shortName : //*:dataArray/data/@shortName .

А если нужно сослаться на атрибут поля с конкретным атрибутом (например, нужно узнать shortName поля с конкретным Id ), то пишем в таком формате: //*:dataArray/data[@Id=’someid’]/@shortName .

Можно сослаться на атрибут уровнем выше, например для XML-ки нужно узнать значение status записи с именем Имя3:

Будет так: //*:dataArray/data/name[@value=’Имя3′]/../@status

Сериализация файла

Иногда требуется загружать в сервис файл, сериализованный в base64. Рассмотрим пример с простеньким csv файлом. Для начала поймем, что нужно сделать:

  • взять файл, который лежит в какой-то папке. Путь желательно относительный, например в подпапке где лежит файл проекта SoapUI;
  • считать содержимое файла (в UTF-8 формате, чтобы не было кракозябр! для русского языка);
  • кодировать в base64;
  • записать эту кодированную штуку в какую-нибудь переменную;
  • вставить переменную в наш запрос Soap.

Так как невозможно все это проделать в одном шаге, у нас будет два шага:

  • скрипт Groovy — закодировать файл и записать получившийся base64 в переменную;
  • сам запрос — содержит эту самую переменную.
Читать:
Сколько нулей в двоичной записи 222 10

Файл проекта лежит в какой-то папке. Создадим подпапку (например, testfiles ), а там папку для тест-кейса, например testcase1.

Вообще-то дерево папок не очень важно, так как мы вынесем путь в свойства, и вы сможете задать свою структуру. Для примера я буду использовать такую:

Описание скрипта (сам скрипт см. ниже):

  • cначала нам нужно получить путь к файлу проекта (чтобы тест можно было запускать с любой машины и из любой папки). В Custom Properties проекта создадим свойство <testFilesFolder> и запишем туда путь к тестовым файлам, например \testFiles\testcase1
  • после этого нам нужно прочитать файл из папки. Мы берем путь к проекту ( <projectPath> ), прибавляем к нему путь из свойств проекта ( <testFilesFolder> ) и в конце указываем постоянный путь ( /file.csv ). В результате скрипт прочитает файл, расположенный на компьютере в папке /<путь к папке проекта>/testFiles/testcase1/file.csv .
  • у меня в запросе SOAP, который отправляет файл, также указывается размер файла. Можно получить размер нашего файла и записать его в переменную fileSize (переменная в Custom Properites тест-кейса). Затем нужно взять содержимое нашего файла, перевести его в строку UTF-8 (иначе будут кракозябры), кодировать в base64 и сохранить получившуюся строку переменную fileSend в свойствах тест-кейса. (Custom Properties).

Теперь эти переменные можно использовать в запросе. Создаем шаг тест-кейса с SoapUI запросом к сервису, которому надо скормить base64, и используем нашу переменную <fileData>$<#TestCase#fileSend></fileData> .

Генерация случайного числа (между) или случайной даты (между)

Генерацию случайно числа удобно использовать, например, для рандомных идентификаторов, рандомной даты и т.п. Генерация рандомного числа между указанными значениями (min … max) выполняется по формуле: Math.random()*(max — min))+min

Например, случайное число между 5 и 10: Math.random()*(10 — 5))+5 Результат: 7.356781231

Округлить (например, число между 1001 и 1140): Math.round((Math.random()*(1140 — 1001))+1001) Результат: 1125

Прямо в теле запроса SOAP можно использовать в таком формате: <somexmlfield>$ <=(int)(Math.round((Math.random()*(1140 - 1001))+1001))></somexmlfield>

Также может пригодиться генерация случайной даты. Например, мне это понадобилось для генерации названия файла для загрузки по FTP. Формат имени файла включает год, месяц, день, часы, минуты, секунды и мс. Чтобы было как положено, сгенерируем случайную дату, которая попадает в период между сегодняшней датой (и временем) и датой месяц назад. Это выполняется скриптом Groovy, нужно будет импортировать несколько нужных библиотек. Вот так (читаем комментарии):

Установка и получение свойств из проекта или тест кейса

Свойства проекта или тест-кейса (properties) удобно использовать для сохранения и извлечения каких-то общих значений.

Есть два типа скриптов: скрипт-шаг (Add StepGroovy Script) и script assertion (скрипт проверка – который добавляется в шаге теста для проверки результатов). У этих скриптов немного разный контекст, поэтому назначение и получение свойств выполняется немного по-разному.

Для начала обычный скрипт (Groovy script). Вот так получаем значения из свойств проекта: def someVar = testRunner.testCase.testSuite.project.getPropertyValue( «propertyName» ) . Где <property..> — название свойства проекта, someVar — какая-то переменная.

У тест-кейса тоже есть свойства, и иногда удобнее указывать их там. Свойство тест-кейса получаем так: def someVar = testRunner.testCase.getPropertyValue( «propertyName» ) .

Для того чтобы получить свойство тест-кейса из Script Assertion, нужно действовать немного по другому: def testCaseProperty = messageExchange.modelItem.testStep.testCase.setPropertyValue( «propetyName», «Привет, Мир!» ) . Будет создано свойство тест-кейса с именем <propetyName> , со значением Привет, Мир!.

Чтобы получить значение свойства из script assertion: def someVar = testRunner.testCase.getPropertyValue( «propertyName» )

Переменной <someVar> будет назначено значение свойства тест-кейса с <propertyName> .

Создание, удаление файлов и пути до файлов

В тесте может потребоваться создать какой-то файл в директории. Для этого нам надо: сделать путь до папки относительным (чтобы работало на любом компьютере), создать папку, если ее нет, создать файл.

Чтобы получить путь до файла проекта:

Путь к папке с проектом сохраняется в переменную <projectPath> . Мы можем создавать файл прямо в корне папки, тогда файлы будут сохраняться рядом с .xml файлом проекта.

Так как папка может не существовать на момент запуска теста, нужно это проверить, и если папки нет – создать ее:

Чтобы создать в этой папке файл нужно также проверить, нет ли там уже его. В зависимости от особенностей теста, может потребоваться создать новый файл или добавлять записи к существующему. Код ниже всегда создает новый файл с указанным именем. Если файл уже есть — он удаляется.

Чтобы добавить в созданный файл какие-то записи, можно использовать команду append (будет добавлять строки в конец файла). Например, ниже код создает две записи — заголовок файла и одну запись. В конец каждой строки добавляется конец строки ( \n )

Активировать или деактивировать шаги теста по условию

Некоторые шаги тест-кейса иногда требуется активировать или деактивировать в зависимости от условия. Например, если в БД отсутствует запись с каким-то ID, то нам нужно ее создать; а если такая запись есть — то создавать ничего не надо, и шаги с созданием отключаем.

Можно сделать так:

  1. шаг теста с SOAP запросом записи по Id (также можно сделать JDBC запрос, или проделать все это в одном скрипте Groovy);
  2. если возвращено 0 записей, то в свойство тест-кейса ставим createRecord=true
  3. если возвращена запись – ставим createRecord=false
  4. в шаге тест-кейса Groovy Script смотрим значение свойства createRecord , и в зависимости от значения активируем или деактивируем шаги.

Для активации шага теста:

getTestStepList требуется для получения текущего состояния и списка всех шагов тест-кейса.

Например, вот так:

Разделы: qa

Дата изменения: December 25, 2018

Вам также может понравиться

Единый источник и CI-CD для Gostdown

March 2, 2023 22 мин на чтение

Gostdown — замечательный проект для нас, несчастных, крепко завязанных на Microsoft Word. И все же в основной версии кое-чего важного ему не хватает: трушног.

Проверка орфографии с LanguageTool и Vale

December 9, 2022 12 мин на чтение

В хорошей документации количество орфографических, синтаксических и стилистических ошибок должно стремиться к нулю. К сожалению, при работе с большими объема.

DocOps из костылей и палок

October 25, 2022 14 мин на чтение

Стильный модный молодежный подход DocOps – разработка документации как кода. Используем несколько инструментов (Gostdown, mkdocs, набор скриптов, макросов и.

Steps to connect to Postgresql database from SOAPUI

In SoapUI sometimes we need to connect to the database (in our example Postgresql) we need to download the postgresql-42.1.4.jre7 jar from location shown as below https://jdbc.postgresql.org/download.html.

Add this jar in lib folder of SoapUI for example D:\5.3.0soap\SoapUI-5.3.0\lib

Note 1: In order for this to work, you need to have jdbc driver jar file in $SOAPUI_HOME/lib folder

Now you can write the groovy code to connect to the postgresql database

Now you can fetch data from the database by using below command

def channel = sql.firstRow(“SELECT * FROM channel WHERE >

Executing this script again and again can lead to too many connections which can be sometimes may lead to bottleneck problems.

There to minimize your connections to few number you can implement in such a way like one connection per test suite.

Note 2: In order for this to work, you need to have jdbc driver jar file in //$SOAPUI_HOME/bin/ext folder

for this we can put few lines of code in Setup Script and TearDown Script.

//code to be put in Setup Script
import groovy.sql.Sql

//below code connect to database, if available. load this connection on context

if ( (null != dbUrl) && (null != dbUser) && (null != dbDriver) && (null != dbPassword) )
<
try <
connection = Sql.newInstance(dbUrl, dbUser, dbPassword, dbDriver)
context.setProperty(“dbConn”, connection)
> catch (Exception e) <
log.error “Could not establish connection to the database.”
>
>

Setup Script

In similar manner below lines of code to be put in TearDown Script of the test suite

SoapUI — JDBC Connection

SoapUI allows managing database operation using a TestStep called JDBC Request.

Step 1 − Right-click on TestStep and select Add Step → JDBC Request.

JDBC Request

Step 2 − Enter the step name and click OK.

New Step

JDBC Step is added. Double-click step, and the JDBC wizard will open.

JDBC Wizard

To create a JDBC connection, the user needs to provide valid Driver and Connection String. These parameters are used to identify the type of database and create a connection to use the database.

For MySQL, database driver can be com.mysql.jdbc.Driver. Similarly, for other database, there is a predefined driver that can be found by the document section of the database.

Step 3 − Connection String should be in the following format −

Here, property is the username and password along with other parameters required to connect with a database.

Step 4 − Click Test Connection. On successful connection, it will display SUCCESS otherwise provide the details of failure.

Похожие статьи