SoapUI:在API响应中查找属性值并将关联值设置为另一个属性

时间:2018-09-12 14:32:10

标签: xml groovy soapui ready-api

我正在为具有奇数模式的API制作一个自动化测试套件。在我的API响应中,我列出了人们可以订购的商品类型以及有关价格的一些信息。每个项目都有一个ID:

<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 :(得分:0)

所以我接受了一个名称为NameofTherequest的请求,并假设您的XML位于响应中

因此,我们首先在 holder 中获得响应,然后获得所需的值

因此,首先我们将所有ID放入一个数组中,然后与每个ID相对应,我们获得价格并将其存储在哈希图中。  然后,无论我们需要什么,我们都可以从哈希图中将其删除

 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