Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在xpath提取器中使用jmeter变量_Xpath_Jmeter - Fatal编程技术网

在xpath提取器中使用jmeter变量

在xpath提取器中使用jmeter变量,xpath,jmeter,Xpath,Jmeter,我希望迭代html响应中的一组表行(例如,每一行包含我希望在另一个请求中使用的数据)。为此,我设置了一个名为COUNTER的变量,并设置了一个XPath提取器,其中XPath查询字段设置为 //table//tr[${COUNTER}]/td[0] 但是,无论计数器的值如何,都无法获得结果。如果我用数值替换${COUNTER},例如 //table//tr[4]/td[0] 它按预期工作 以下错误表明此功能应在2.5.1中 但它在2.5.1或2.6中对我不起作用 在XPath表达式中使用变量

我希望迭代html响应中的一组表行(例如,每一行包含我希望在另一个请求中使用的数据)。为此,我设置了一个名为COUNTER的变量,并设置了一个XPath提取器,其中XPath查询字段设置为

//table//tr[${COUNTER}]/td[0]
但是,无论计数器的值如何,都无法获得结果。如果我用数值替换${COUNTER},例如

//table//tr[4]/td[0]
它按预期工作

以下错误表明此功能应在2.5.1中 但它在2.5.1或2.6中对我不起作用

在XPath表达式中使用变量在jmeter中一定非常有用,但我在web上找不到任何关于如何做到这一点的讨论。我愿意接受其他建议,但正则表达式似乎不是一个正确的解决方案。

尝试使用beanshell/java代码,使用xpath查询从xml响应中提取所有值

  • 将Beanshell后处理器作为子级附加到返回html响应的采样器
  • 在后处理器中使用以下代码(从外部文件或插入“脚本”字段)提取和保存密钥:

    import java.io.*;
    导入javax.xml.parsers.*;
    导入javax.xml.xpath.*;
    导入org.w3c.dom.*;
    导入org.xml.sax.SAXException;
    导入org.apache.jmeter.samplers.SampleResult;
    //在这里设置xpath表达式(提取每个键,而不是任何单独的键)
    字符串xpathExpr=“//table//tr/td/text()”;
    试一试{
    DocumentBuilderFactory domFactory=DocumentBuilderFactory.newInstance();
    domFactory.setNamespaceAware(true);
    DocumentBuilder=domFactory.newDocumentBuilder();
    //通过“ctx”BeanShell变量访问父采样器的结果
    SampleResult结果=ctx.getPreviousResult();
    InputSource is=新的InputSource(新的StringReader(result.getResponseDataAsString());
    文档doc=builder.parse(is);
    XPath=XPathFactory.newInstance().newXPath();
    XPathExpression expr=xpath.compile(xpathExpr);
    NodeList节点=(NodeList)expr.evaluate(doc,XPathConstants.NODESET);
    //提取循环中的所有键
    对于(int i=0;i

  • 使用
    xpathxpr=“//table//tr/td/text()”
    将给出所有行中的所有列。
    要获得更具体的选择,您可以:

    • 优化xpath查询,例如
      //table//tr/td[1]/text()
    • 提取所有值,然后在结果列表中迭代,以获得您确切需要的结果

    希望这能有所帮助。

    我使用的是JMeter 3.3,而且我能够在XPATH字符串中使用JMeter变量,没有任何问题。例如,
    /a/b/c[name=“mystring_${myvar}”]

    因此,我建议切换到JMeter 3.3或更高版本来解决上述问题