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

Как правильно тестировать с SOAP UI ??


(Taras) #1

Вот есть у меня такой респонс:

 

<Response xmlns="http://127.0.0.1/gift-registry/giftRegistry/getAllForUser/233721">
   <rows>
      <e>
         <description>This is generic registry description !!!</description>
         <eventDate>2012-09-10</eventDate>
         <id>504dfbe43ebcd9d797aaaaca</id>
         <name>GENERIC WISH LIST REGISTRY</name>
         <preferredShippingDate null="true"/>
         <privacy>PUBLIC</privacy>
         <shipToMyAddress null="true"/>
         <type>
            <defaultType>true</defaultType>
            <name>Generic Registry</name>
            <typeParams/>
         </type>
         <userId>233721</userId>
      </e>
      <e>
         <description>This is wedding registry description !!!</description>
         <eventDate>2012-09-10</eventDate>
         <id>504dfbe43ebcd9d797aaaacb</id>
         <name>Wedding WISH LIST REGISTRY</name>
         <partnerName>Somebody from family</partnerName>
         <preferredShippingDate null="true"/>
         <privacy>PUBLIC</privacy>
         <shipToMyAddress null="true"/>
         <type>
            <defaultType>false</defaultType>
            <name>Wedding Registry</name>
            <typeParams/>
         </type>
         <userId>233721</userId>
      </e>
      <e>
         <babyGender>MALE</babyGender>
         <description>This is baby registry description !!!</description>
         <eventDate>2012-09-10</eventDate>
         <id>504dfbe53ebcd9d797aaaacc</id>
         <name>Baby WISH LIST REGISTRY</name>
         <preferredShippingDate null="true"/>
         <privacy>PUBLIC</privacy>
         <shipToMyAddress null="true"/>
         <type>
            <defaultType>false</defaultType>
            <name>Baby Registry</name>
            <typeParams/>
         </type>
         <userId>233721</userId>
      </e>
   </rows>
   <success>true</success>
</Response>
 
Я вот не знаю что из етого сравнивать и ассертить. Писать какой то парсер, собирать данние в массив итд, как поступить ?
Я же не буду парсить всю xml - ку полностью. Каким образом тестировать правильно ? Тоесть какие ноди упускать а какие нет ? Может есть апроачи к даннгому контексту тестирования ?
"Хард код" ответ, типа подставить готовую xml-ку и сравнить с существующей не подходит, нужно сделать dynamic тести.
Спасибо.

(Mykhailo Poliarush) #2

ну если тебе нужные динамические тесты, значит ты должен понимать

что у тебя динамическая составляющая и что у тебя статическая составляющая

если тебе не подходит сравнение всего содержимого (чего я тоже не рекомендую), то вариантов не так уже много

отдельные xpath по всему xml или просто часть xml

 

можно вынести набор xpath в отдельный файл и потом с него читать, ну это уже просто один из способов реализации.


(tisaser) #3

А откуда то данные в респонс сервисом собираются? 

Подозреваю что из БД какой либо или вообще из какого-то более абстрактного хранилища. С БД SoapUI работает с момощью JDBC реквестов (респонс тоже в XML). То есть можно написать такой SQL с названиями полей чтобы возвращался очень похожий по структуре и названию нод результат SQL запроса. Потом просто сравнить каждый нод ответа сервиса и SQL.

 

Также с SQL можно работать из Groovy (groovy.sql.Sql). Тогда у вас результат будет в рекрдсете по которому можно итерироваться и сравнивать с полученным результатом ответа сервиса. Ну и т.д. и т.п. 

Можно XML сконвртировать в Map<String> (или более сложную структуру), при этом упустить ненужные поля (ноды). Ноды нужные или ненужные можно хранить в List<String> ну и т.д. 

Вобщем все зависит от того ЧТО Вам нужно и КАК проверять. 

Да. Без парсинга XML никак в любом случае. GPath очень простой (XmlParser или XmlSlupper) и дает очень много возможностей. Только он как и XPath регистрозависим всегда, так что будьте внимательны. В груви для всех коллекций есть методы find{}, findAll{}, grep{} -- изучите их и обработка XML покажется заурядным скучным и очень простым делом.

Для вашего примера.

def xmlAsString = <ВАШ РЕСПОНС>

def root = new XmlParser().parseText(xmlAsString)

log.info root."**"."rows" 

log.info root."**"."eventDate".text()

log.info root."**".find{it.text() == 'Wedding WISH LIST REGISTRY'}."description".text()

 


(Taras) #4

та я уже на Java свой парсер на Jacksone написал и вопрос отпал)

Спасибо)