JMeters XPath2 Extractor始终返回默认值

时间:2018-11-05 09:03:12

标签: xpath soap jmeter

我正在尝试使用XPath2 Extractor从SOAP响应中提取一个值,但是它总是返回默认值。

我的JMeter配置如下:

  1. Master:1台机器
  2. 从机:1台计算机(如果成功,我需要进行设置 10个从属计算机。)
  3. JMeter版本:5.0

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表达式:

  1. // ServerSettingInfo / ServerUrl / text()
  2. // ServerUrl / text()
  3. / s:信封/ s:正文/元素/ ServerSettingInfo / ServerUrl / test()
  4. / s:信封/ s:正文/元素/ ServerSettingInfo / ServerUrl
  5. / s:信封/ s:正文/元素/ ServerSettingInfo / @ ServerUrl

上面的XPath表达式中没有一个对我有用。

XPath2 Extractor设置如下:

  1. 适用于:仅限主要样品
  2. 创建的变量的名称:ServerURL
  3. XPAth:// ServerUrl / text()
  4. 比赛编号0
  5. 默认值:未找到
  6. 命名空间别名列表:EMPTY

有人知道XPath2 Extractor为什么不起作用吗?

有什么办法可以做到这一点?

2 个答案:

答案 0 :(得分:1)

这与XPath2 Extractor兼容:

XPath 2 Extractor

由于具有名称空间,因此需要在“名称空间别名列表”中添加一些内容。

在“查看结果树”中使用Xpath2 Tester提取名称空间列表:

XPath 2 Tester

然后在“命名空间别名列表”中添加以选择a作为“ http://www.SSS.com/xx/xx”的别名:

  

a = http://www.SSS.com/xx/xx

然后您可以使用:

  

// a:ServerUrl

请注意,如果您仅放置http://www.SSS.com/xx/xx来隐藏初始名称空间,那么您当然需要对其进行修改以匹配ServerUrl元素的真实名称空间

注意:有关分布式测试的Dmitri注意与您的问题无关。

答案 1 :(得分:-1)

  1. 默认情况下,从JMeter 2.9开始,JMeter从属引擎使用StrippedBatch模式将结果发送给主引擎
  2. 根据JMeter Documentation

      

    Stripped模式系列剥离了responseData,因此这意味着某些依赖先前responseData的元素将不起作用。   这并不是真正的问题,因为始终有更有效的方法来实现此功能。

假设上述陈述,我的期望是,如果将下一行添加到主服务器和所有从属服务器上的 user.properties 文件中,该问题就会消失:

mode=Standard

需要重新启动JMeter才能拾取该属性。

参考文献:


更新:由于某种原因,我感到该错误与分布式测试有关,如果即使在非分布式模式下也无法使用XPath Extractor找到ServerUrl文本值,则可以使用{ {3}}功能如下:

(//*[name() = 'ServerUrl'])/text()

演示:

name()

如果仍然不起作用(即您提供的SOAP响应结构不完整),则可以使用enter image description here

(//*[local-name() = 'ServerUrl'])/text()