在xpath提取器中使用jmeter变量
我希望迭代html响应中的一组表行(例如,每一行包含我希望在另一个请求中使用的数据)。为此,我设置了一个名为COUNTER的变量,并设置了一个XPath提取器,其中XPath查询字段设置为在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表达式中使用变量
//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响应中提取所有值
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或更高版本来解决上述问题