我正在为具有奇数模式的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属性并将关联的价格设置为另一个属性的方法。我以为我需要使用常规脚本来执行此操作,但我不知道该怎么做。有人可以帮忙吗?
答案 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]
以上代码的输出为