xml - SoapUI:在 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 属性并将关联的价格设置为另一个属性。我假设我需要使用 groovy 脚本执行此操作,但我不知道如何操作。任何人都可以帮忙吗?
解决方案
所以我接受了一个名为 NameofTherequest 的请求,并假设您的 XML 被放置在响应中
所以首先我们在holder中得到响应,然后得到你想要的值
所以首先我们得到一个数组中的所有id,然后对应于每个id,我们得到价格并存储在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]
上面代码的输出是
推荐阅读
- javascript - 辅助函数 reactjs
- oracle - 甲骨文酒店 OWS
- rust - 锈中的“可选特征绑定”功能
- javascript - 在 Discord.JS 中未定义 member.presence?
- python - 解析目录中的 html 文件并使用 BeautifulSoup 删除特定标签
- html5-video - 根据 HMTL5 媒体属性播放源文件中的第二个视频
- reactjs - 用户控件值更改后反应更新状态
- python - 如何获得只能包含 1 到 9 数字的随机 4 位数字?
- python - 使用 pysftp 针对使用自定义端口的 known_hosts 文件验证主机密钥
- python - 为收集的包裹建造轮子:psycopg2