JMeter XPath获取多个值和奇数输出顺序 序言

JMeter XPath获取多个值和奇数输出顺序 序言,xpath,jmeter,Xpath,Jmeter,我有一个带有XPath提取器的JMeter脚本,在这里我指定了一个从XML文档获取多个值的查询。这一切都很好 XML WFC2 2019-07-31T23:00:02.177 80903 我希望Data_2包含UnitOfMeasure属性,Data_3包含quantity属性,但正如您所看到的,它们是相反的 问题: 这是预期的行为吗?如果是这样,当一个元素有多个属性时,我如何知道这些属性的可用顺序 感谢union运算符生成的XPath节点集的顺序没有保证,您可以查看函数以了解实现细节 实

我有一个带有XPath提取器的JMeter脚本,在这里我指定了一个从XML文档获取多个值的查询。这一切都很好

XML

WFC2
2019-07-31T23:00:02.177
80903

我希望Data_2包含UnitOfMeasure属性,Data_3包含quantity属性,但正如您所看到的,它们是相反的

问题: 这是预期的行为吗?如果是这样,当一个元素有多个属性时,我如何知道这些属性的可用顺序


感谢

union运算符生成的XPath节点集的顺序没有保证,您可以查看函数以了解实现细节

实际上,如果您决定使用Groovy,您甚至不需要,您可以使用类来解析XML响应

示例代码:

def response = new XmlSlurper().parseText(prev.getResponseDataAsString())

response.InventoryItem.eachWithIndex { item, index ->
    log.info('Item: ' + index)
    log.info('ItemNumber: ' + item.ItemNumber)
    log.info('AvailableQuantiry: ' + item.AvailableQuantity)
    log.info('UnitOfMeasure:' + item.AvailableQuantity.@UnitOfMeasure)
}
演示:

参考资料:


根据我的理解,这里是xpath路径执行的顺序
root>element>text>attribute
我强烈怀疑这是预期的行为。XPath联合运算符(“|”)被定义为按文档顺序生成节点序列。由于元素节点按文档顺序位于其属性之前,因此可以看到
availableequality
元素本身的值在其
UnitOfMeasure
属性的值之前。假设XPath 2.0可用,您可以尝试类似于
//InventoryItem/(string(ItemNumber)、string(availablequality/@UnitOfMeasure)、string(availablequality))
的方法。请注意,此表达式不再选择节点,而是一系列字符串值。谢谢,这很有帮助。实际的测试将使用HTTP请求中的变量,Groovy代码只是为了查看/显示发生了什么。