我正在尝试使用XPath2 Extractor从SOAP响应中提取一个值,但是它总是返回默认值。
我的JMeter配置如下:
XML响应如下:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ResHeader xmlns:h="http://www.ssss.com/ResHeader/SSS" xmlns="http://www.SSS.com/ResHeader/SSS" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
...
</h:ResHeader>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<element xmlns="http://www.SSS.com/xx/xx">
...
<ServerSettingInfo>
<ServerUrl>https://SomeServer.com/XX</ServerUrl>
<UserName>SomeUser</UserName>
<Password>SomePassword</Password>
</ServerSettingInfo>
...
</element>
</s:Body>
</s:Envelope>
我尝试了以下XPath表达式:
上面的XPath表达式中没有一个对我有用。
XPath2 Extractor设置如下:
有人知道XPath2 Extractor为什么不起作用吗?
有什么办法可以做到这一点?
答案 0 :(得分:1)
这与XPath2 Extractor兼容:
由于具有名称空间,因此需要在“名称空间别名列表”中添加一些内容。
在“查看结果树”中使用Xpath2 Tester提取名称空间列表:
然后在“命名空间别名列表”中添加以选择a作为“ http://www.SSS.com/xx/xx”的别名:
然后您可以使用:
// a:ServerUrl
请注意,如果您仅放置http://www.SSS.com/xx/xx来隐藏初始名称空间,那么您当然需要对其进行修改以匹配ServerUrl元素的真实名称空间
注意:有关分布式测试的Dmitri注意与您的问题无关。
答案 1 :(得分:-1)
StrippedBatch
模式将结果发送给主引擎
Stripped
模式系列剥离了responseData
,因此这意味着某些依赖先前responseData
的元素将不起作用。 这并不是真正的问题,因为始终有更有效的方法来实现此功能。
假设上述陈述,我的期望是,如果将下一行添加到主服务器和所有从属服务器上的 user.properties 文件中,该问题就会消失:
mode=Standard
需要重新启动JMeter才能拾取该属性。
参考文献:
更新:由于某种原因,我感到该错误与分布式测试有关,如果即使在非分布式模式下也无法使用XPath Extractor找到ServerUrl
文本值,则可以使用{ {3}}功能如下:
(//*[name() = 'ServerUrl'])/text()
演示:
如果仍然不起作用(即您提供的SOAP响应结构不完整),则可以使用
(//*[local-name() = 'ServerUrl'])/text()