如何断言由用户定义变量的值数组组成的响应

时间:2017-04-11 15:19:20

标签: xpath jmeter

我有一个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提取器来测试断言查询,它返回了所有 正确回应的成本价值

2 个答案:

答案 0 :(得分:0)

您的表达式只会将返回数组(202530)中的每个值与[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}"

演示:

XPath Assertion Demo

参考文献: