SoapUI: найдите значение свойства в ответе API и установите связанное значение в качестве другого свойства - PullRequest
0 голосов
/ 12 сентября 2018

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

<xml> 
<ItemType ID="Type1">
<Price>5.00</Price>
</ItemType>

<ItemType ID="Type2">
<Price>10.00</Price>
</ItemType>
</xml>

Позже в API есть список актуальных продуктов.Каждый из них имеет ItemID, так что вы можете узнать, сколько он стоит, например:

<Product>
<Name>Product1</Name>
<Description>some stuff</Description>
<ItemRefs>Type1</ItemRefs>
</Product>

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

Мне нужен способ найти свойство ItemRefs вболее ранний список и установите связанную цену как другое свойство.Я предполагаю, что мне нужно сделать это с отличным сценарием, но я не знаю как.Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 14 сентября 2018

Итак, я принял запрос с именем NameofTherequest и предполагал, что ваш XML помещен в ответ

Итак, сначала мы получаем ответ в holder , а затем получаем значения, которые вы хотите

Итак, сначала мы получаем все идентификаторы в массиве, а затем, соответствующие каждому идентификатору, получаем цену и сохраняем в hashmap. Тогда все, что нам нужно, мы можем взять из hashmap

 def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
 def holder = groovyUtils.getXmlHolder("NameofTherequest#Response")

  // Take out the values of ids and their corresponding price
   def Ids = holder.getNodeValues("//*:ItemType/@ID")
   log.info "The values of all Ids are  = " + Ids.toString()
   def Price = holder.getNodeValues("//*:ItemType/*:Price")
   log.info "The values of prices are  = " + Price.toString()


   // A better logic where we store each Price against its ID value in a      hashmap
    HashMap h=[:]
   for(def var in Ids)
   {
   def Price1 = holder.getNodeValue("//*:ItemType[@ID='${var}']/*:Price")
    h.put(var,Price1)   
    }

    log.info "The values of prices are in hashmap = " + h

  // Now suppose you want to know the price of say Type2
   def str="Type2" // You can get this from property value whose price you want to know

    log.info "The price of $str is " + h[str]

Вывод вышеуказанного кода

enter image description here

...