Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Работаем с реквестами в SoapUI


(Mykhailo Poliarush) #1

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

Наверное, у многих тестировщиков наступает этап, когда нужно проверить большой объем данных, при этом, выполняя одинаковые действия. В этот момент, многие начинают применять в своих проектах автоматизацию тестирования. Эта же участь не обошла и тестирование веб-сервисов. Довольно часто нам нужно проверить отклик системы с различными входными параметрами. Эти параметры мы можем указать в XML-реквесте. Думаю, все со мной согласятся, что имея очень большие объемы данных, которые обязательно нужно проверить, очень утомительно делать это все руками. Для таких случаев в SoapUI имеется возможность использовать скрипты. В данной статье все примеры будут рассмотрены на языке Groovy, однако инструмент поддерживает java script и добавление собственных библиотек, написанных на java.

И так, теперь самое главное – ответ на вопрос, каким образом использование SoapUI и языков программирования поможет нам протестировать большие объемы данных за минимальное время и с минимальными затратами. Ответ заключается в том, что данный инструмент позволяет нам динамически изменять реквесты, тем самым позволяя протестировать огромное количество входных параметров, написав один скрипт. О том, как применить data driven подход к тестированию в SoapUi мы поговрим в следующий раз. А в этот раз подробно рассмотрим, каким образом мы можем работать с реквестами в различных ситуациях.

 

Работа с XML-реквестами

Каким образом мы можем изменить значение нужного нам узла в реквесте?

Первое, что нам необходимо сделать для этого – получить объект класса XmlHolder, который позволит нам работать с нужным XML-документом. Это могут быть различные реквесты, респонсы или их части. Сделать это мы можем следующим образом:


groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )

holder =
groovyUtils.getXmlHolder("simpleRequest#Request")
 

Необходимо отметить, что в данном тесткейсе у нас должен быть шаг simpleRequest типа SOAP-request. В качестве параметра методу getXmlHolder мы передаем наш реквест и с помощью знака ‘#’ мы указываем, какое свойство этого шага мы хотим получить. В нашем случае, мы указали Request, т.к. именно он нас и интересует.

Следующим нашим действием будет изменение значения конкретного узла нашей XML.

Для доступа к узлу необходимо использовать XPath локатор.


holder[“//simpleNode”] = “simple value”
 

Таким образом, мы указали, что узел с именем simpleNode должен принять значение “simple value”.

Это же, мы можем сделать, используя метод setNodeValue класса XmlHolder:


holder.setNodeValue(“//simpleNode”, “simple value”)
 

Хочу заметить, что оба этих подхода дают одинаковый результат. Вам остается только выбрать, какой из стилей вам больше подходит.

И последнее, что нужно сделать для того, чтобы наши изменения вступили в силу – вызвать метод updateProperty() класса XmlHolder:


holder. updateProperty()
 

Параметр со значение true в данном случае указывает, что XML будет отформатирована и на месте удаленных узлов не будет пустых строк.

 

Каким образом мы можем добавлять или удалять узлы в реквесте?

Для того, чтобы добавить узел мы должны сделать следующее:

Определить предка нашего будущего узла. Это можно сделать таким образом:


simpleParentNode = holder.getDomNode(//simpleNode)
 

В этом случае мы указали, что узел с именем simpleNode является родительским узлом для нашего элемента.

Далее, мы можем создать новый узел используя класс XmlUtils и его метод addChildElement().


XmlUtils.addChildElement(simpleParentNode,newSimpleChildNodeName,new simple value)
 

Мы передали данному методу три аргумента: предка, имя нового узла и его значение.

Давайте теперь рассмотрим вариант с удалением узла. Для этого мы должны вызвать один метод removeDomNodes() класса XmlHolder:


holder.removeDomNodes(“//simpleNode”)
 

В этом случае, мы удалили узел с именем simpleNode, а так же, всех его наследников.

И конечно же, не забываем вызывать метод updateProperty для того, чтобы наши изменения вступили в силу. В случае удаления и добавления узлов, рекомендую вызывать этот метод с флагом prettyPrint установленным в true. Это позволит получит отформатированный XML-документ на выходе (без пустых строк на месте удаленных узлов, без сдвигов и т.д.).

 

Каким образом изменить реквест из другого тесткейса?

Первое, что мы должны сделать – определить тесткейс с реквестам которого мы хотим работать:


testCase = testRunner.testCase.testSuite.project.getTestSuiteByName("SimpleSuite").getTestCaseByName("simpleTestCase")
 

Далее, необходимо получить доступ к конкретному шагу (это и будет наш реквест):


testStep = testCase.getTestStepByName( "simpleStep" )
 

И последнее действие, которое нам необходимо совершить – получить реквест из свойств нашего шага и передать его объекту класса XmlHolder:


holder = groovyUtils.getXmlHolder (testStep.getProperty("request").value)
 

Далее, можно делать с этим реквстом все описанные выше действия.

 

Заключение

Сегодня мы узнали, как применяя простые приемы программирования динамически изменять XML-реквесты во время выполнения нашего скрипта. Это позволит экономить большое количество ресурсов, делегируя рутинные операции машине. Конечно же, этот подход имеет место, когда при одном запуске тестов один нужный реквест вызывается много раз с различными параметрами. Как пример, это могут быть какие-то случайные значения, который подставляются в реквест в цикле. Или же, набор тестовых данных (например, хранящиеся в xls файле), который необходимо проверить. Самая главная цель использования этих подходов – экономия ресурсов и возможность сосредоточить свое внимания на более важных задачах тестирования.


Как вытащить значение из respons'a и подставить в новый request в SOAPui?
(Taras) #2

там кстате на чистой Java можна ето все делать, и не нужно groovy


(Kotor) #3

Вы правы, делать можно и на джаве. Все зависит от задач. В этой заметке хотелось показать, как обойтись только средствами самого инструмента. В одной из следующих статей, я как раз хочу показать возможность использования soapUi API совместно с другими инструментами и языками. Например, в нашей практике мы используем связку Thucydides и SoapUi, но это отдельная тема для разговора :)


(Taras) #4

тоесть как юзать jar-re SOAP UI ?

А можете ссилку какую то скинуть где подробно о АРІ идет речь...а то я б юнит тестами писать начал на SOAP UI без интерфейса самой проги)


(kalot) #5

Добрый день!

Столкнулся с задачей рандомного добавления тэгов в реквест.

Всё сделал, как описано в примере, но SOAP ругается: говорит, что не знает, что такое XmlUtils

Не подскажите, какую библиотеку надо для это подключать и где её можно скачать?


(Taras) #6

какой тип сервиса ?  Rest , SOAP ?


(Mykhailo Poliarush) #7

надо просто импортировать этот класс или прописать его полный путь 

com.eviware.soapui.support.xml.XmlUtils()


(kalot) #8

Большое спасибо, всё заработало!


(Mykhailo Poliarush) #9

ну и отлично, что все получилось :)