Всем привет! Меня зовут Александра Кабехова, я - QA Team Lead в компании «Ренессанс страхование». В этой статье хочу поделиться опытом тестирование SOAP- запросов через SOAP UI Open Source. Когда я погружалась в тестирование API, то у меня практически не было никакого опыта, пришлось самостоятельно нарабатывать базу знаний и лайфхаков, собственно про некоторые из них и хочу рассказать.

Коротко про API

Начнем знакомство с расшифровки аббревиатуры API (англ. application programming interface, либо программный интерфейс приложения, интерфейс прикладного программирования) набор готовых классов, процедур, функций, структур и констант, предоставляемых приложением (библиотекой, сервисом) для использования во внешних программных продуктах (Wikipedia). То есть API даёт возможность использовать чужие наработки в своих интересах. Есть два подхода к построению программного интерфейса веб-приложений: REST (RESTful) API и SOAP API. Но не будем углубляться в нюансы, ибо литературы в свободном доступе на эту тему большое множество.

Осознание и принятие ситуации

Если жизненная ситуация сложилась таким образом, что Вы оказалась без малейшего опыта на проекте по API, то не отчаивайтесь, потому что всему можно научиться. Первым делом узнайте какая есть документация на проекте, есть ли пример запросов, может кто-то из коллег уже создавал проекты и сохранил их. А вторым пунктом установите SoapUI и приступайте к работе!

Сначала необходимо импортировать проект, если есть в наличии, либо создать его на основе WSDL:
1. создаем новый проект file> New soapUI Project. Указываем Project Name и Initial WSDL/WADL.

2. Импортировать проект file>Import Project. Выбираем необходимый файл в формате xml. Обратите внимание: проставили галочку на создание TestSuite!

3. Теперь вы можете использовать в работе созданные TestSuite, либо создать свой и скомпоновать методы. На указанном примере получился один TestSuite и три TestCase.
Обратите внимание, что у каждого TestCase присутствует TestStep.

4. И так, предположим, что "Step1" - метод для получения номера телефона Страхователя(клиента), "Step2"- метод для передачи данных по заявлениям выплаты, "Step3" - метод для передачи данных по совершенным выплатам. Все три метода взаимосвязаны, данные ответа одного метода влияют на другие. Следующем шагом я объединю все TestStep в один TestCase.

5. Обратите внимание, что TestCase: "Step2" и "Step3" я перевела в disabled, в дальнейшей работе они нам не понадобятся, поэтому их можно будет удалить.

6. Довольно часто встречаются ситуации, когда одни и те же параметры используются в нескольких методах, если возникнет необходимость в их редактировании, то придется заходить в каждый метод и править. Для удобства работы выведем все переменные в Properties в TesCase "All_steps". Советую, чтоб названия переменных совпадали с параметрами в методах. Например, в "Step 1" используется "MessageId", добавляю его в Properties.

7. Не забываем указывать значения по переменным. Далее устанавливаем связь, например, "Step 1" нажимаем правой клавишей мыши на "MessageId", отобразится меню, выбираем Get Data, затем выбираем на какую переменную в Properties ссылаться.

В итоге получилось:

8. Если возникнет необходимость передавать значения между методами, то вы так же можете сохранить его в Properties, а затем ссылаться на него, либо использовать Transfer. Например, возникла необходимость передать параметр PolicyNumber из "Step1" в "Step2".
Добавляем Transfer в TestCase. Настроить transfer легко, но советую ознакомиться с инструкцией с официального сайта.

9. Если в методах используются даты, то вам не обойтись никак без скриптов. В SOAP UI используется groovy, популярные скрипты всегда можно подсмотреть на официальном сайте, либо на любительских.  Например, в моем примере в методах присутствуют параметры ClaimDate и PaymentDate, чтобы вручную постоянно не править даты, использую скрипт:
Date ClaimDate = new Date()
testCase.setPropertyValue("ClaimDate", ClaimDate.format("yyyy-MM-dd'T'hh:mm:ss"))
Date PaymentDate= new Date();
testCase.setPropertyValue("PaymentDate", PaymentDate.format("yyyy-MM-dd'T'hh:mm:ss"))

Скрипт указываем в TestCase в SetupScript, затем нажимаем на Runs this script, скрипт отрабатывает и значения по ClaimDate и PaymentDate, прописываются в  Properties.

10. В TestSuite можете создать любое количество TestCase разными входными значениями. Таким образом, у вас будет небольшой проект с различными проверками. Так же вы можете на ответы сервиса настроить Assertion в TestStep, например, что сервис всегда возвращает статус true/false.

11. Если у вас развернут Jenkins и на ноде установлен Soap UI, то можно запускать ваш проект удаленно по расписанию. Расскажу, как выстроен этот процесс в нашей компании.  Для начала загружаю проект, созданный в Soap UI и сохраненный в формате .xml, в систему контроля версий, а именно в Gitlab. Затем в Jenkins создаю мультиконфигурационный проект, в его настройках  "Управление исходным кодом " указываем путь к проекту в Gilab.

В "Триггерах сборки" в пункте "Запуск периодически" вводим расписание, например, H 20 * * 1-7, то есть запускаем после 20:00 каждый день. В "Сборке" добавляем шаг "Выполнить команду Windows" указываем: 
C:\Tools\SoapUI-5.4.0\bin\testrunner.bat -j -f C:\Jenkins\workspace\TestHabr\Project_for_soap\Report\  -I Project_for_soap_TestHabr.xml
SoapUI-5.4.0 - наименование программы;
C:\Jenkins\workspace\TestHabr\Project_for_soap\Report  - путь к мультиконфигурационному проекту в Jenkins;
Project_for_soap_TestHabr.xml - название проекте в Gitlab.

В "Послесборочных операций" можете добавить шаги "Publish JUnit test result report", "Заархивировать артефакты", "Уведомление по почте".

Далее сохраняем и можем пользоваться! Результат прогона должен прийти на указанною почту. 

Всё хорошее когда-нибудь заканчивается

Я рассказала про самый минимум, с которого следует начать при освоении Soap UI. С приобретением опыта вы будете узнавать и другие возможности/функции программы.
Для расширения кругозора советую ознакомиться с кратким руководством и с книгой "Web Services Testing with soapUI" by Charitha Kankanamge, "SoapUI Cookbook" by Aly Saleh , Murat Karslioglu.