gpt4 book ai didi

xpath - 在 xpath 提取器中使用 jmeter 变量

转载 作者:行者123 更新时间:2023-12-03 15:26:25 25 4
gpt4 key购买 nike

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

//table//tr[${COUNTER}]/td[0]

然而,无论 COUNTER 的值如何,这都无法获得结果。如果我用数值替换 ${COUNTER},例如
//table//tr[4]/td[0]

它按预期工作。

以下错误表明此功能应在 2.5.1 中
https://issues.apache.org/bugzilla/show_bug.cgi?id=51885但它在 2.5.1 或 2.6 中对我不起作用

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

最佳答案

尝试使用 Beanshell PostProcessor使用 beanshell/java 代码使用 xpath 查询从 xml-response 中提取所有值。

  • 将 Beanshell PostProcessor 作为子项附加到返回您的 html 响应的采样器。
  • 在 PostProcessor 中使用以下代码(从外部文件或插入“脚本”字段)提取并保存 key :

    import java.io.*;
    import javax.xml.parsers.*;
    import javax.xml.xpath.*;
    import org.w3c.dom.*;
    import org.xml.sax.SAXException;

    import org.apache.jmeter.samplers.SampleResult;

    // set here your xpath expression (to extract EVERY key, not any separate one)
    String xpathExpr = "//table//tr/td/text()";

    try {
    DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
    domFactory.setNamespaceAware(true);
    DocumentBuilder builder = domFactory.newDocumentBuilder();

    // access result of parent sampler via "ctx" BeanShell variable
    SampleResult result = ctx.getPreviousResult();
    InputSource is = new InputSource(new StringReader(result.getResponseDataAsString()));
    Document doc = builder.parse(is);

    XPath xpath = XPathFactory.newInstance().newXPath();
    XPathExpression expr = xpath.compile(xpathExpr);
    NodeList nodes = (NodeList)expr.evaluate(doc, XPathConstants.NODESET);

    // extract all the keys in loop
    for (int i = 0; i < nodes.getLength(); i++) {
    String key = nodes.item(i).getNodeValue();
    System.out.println(key);
    }
    } catch (Exception ex) {
    IsSuccess = false;
    log.error(ex.getMessage());
    ex.printStackTrace();
    }

  • 使用 xpathExpr = "//table//tr/td/text()"将为您提供所有行中的所有列。
    要获得更具体的选择,您可以:
  • 优化 xpath 查询,例如//table//tr/td[1]/text() ;
  • 提取所有值,然后遍历结果列表以获得您真正需要的内容。

  • 希望这可以帮助。

    关于xpath - 在 xpath 提取器中使用 jmeter 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9192884/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com