我有一个Soap请求,该响应在同一个标记下返回一组值 让我们说
<PricelistDetails>
<ServicePricelistDetailInfo>
<cost>20</cost>
</ServicePricelistDetailInfo>
<ServicePricelistDetailInfo>
<cost>25</cost>
</ServicePricelistDetailInfo>
<ServicePricelistDetailInfo>
<cost>30</cost>
</ServicePricelistDetailInfo>
<PricelistDetails>
我创建了一个Xpath断言来断言用户定义变量的成本标记:
/ Envelope / Body / GetServicePricelistResponse / GetServicePricelistResult / ServicePricelistInfoList / ServicePricelistInfo / PricelistDetails / ServicePricelistDetailInfoList / ServicePricelistDetailInfo / cost ='$ {COST1}'
虽然COST1的定义如下:
名称:COST1
价值:[20,25,30]
但是在运行测试计划时,它显示的是断言错误
注意:
我已经创建了一个Xpath提取器来测试断言查询,它返回了所有 正确回应的成本价值
答案 0 :(得分:0)
您的表达式只会将返回数组(20
,25
,30
)中的每个值与[20,25,30]
进行比较,如:
20 = [20,25,30] # false
25 = [20,25,30] # false
30 = [20,25,30] # false
并返回false
,因为所有比较失败,而您需要同时比较所有比较:
[20,25,30] = [20,25,30] # true
我不确定它是最好的解决方案,但作为最后的手段,您可以尝试
concat('[', string-join(//PricelistDetails/ServicePricelistDetailInfo/cost, ','), ']') = '${COST1}'
答案 1 :(得分:0)
我建议将你的XPath查询放入XPath Extractor,然后添加Debug Sampler并通过View Results Tree监听器检查生成的变量,我的期望是你会得到类似的东西:
cost=20
cost_1=20
cost_2=25
cost_3=30
cost_matchNr=3
所以你可以使用&#34;普通&#34; Response Assertion针对这些${cost_1}
,${cost_2}
和${cost3}
个变量。
如果由于某种原因你需要采用&#34; XPath方式&#34; - 在断言中使用以下XPath表达式:
concat("[", //PricelistDetails/ServicePricelistDetailInfo[1]/cost, ",", //PricelistDetails/ServicePricelistDetailInfo[2]/cost, ",", //PricelistDetails/ServicePricelistDetailInfo[3]/cost, "]")="${COST1}"
演示:
参考文献: