如何在JMeter Beanshell中获取、分配Span Id值?

如何在JMeter Beanshell中获取、分配Span Id值?,jmeter,Jmeter,我创建了一个用户定义的变量,名称为Status,默认值为start 我得到了一个HTML响应,内容如下: <SPAN id="ApplicationStatus">&nbsp;Interrupted</SPAN> 我想获得Span Id值并在beanshell采样器中使用,以便在If控制器或Switch控制器中进一步处理 我使用正则表达式提取器来提取所需的值及其工作方式 但是当我说vars.getStatus时,它总是返回默认值start 有没有办法提取所需的值

我创建了一个用户定义的变量,名称为Status,默认值为start

我得到了一个HTML响应,内容如下:

<SPAN id="ApplicationStatus">&nbsp;Interrupted</SPAN>
我想获得Span Id值并在beanshell采样器中使用,以便在If控制器或Switch控制器中进一步处理

我使用正则表达式提取器来提取所需的值及其工作方式

但是当我说vars.getStatus时,它总是返回默认值start


有没有办法提取所需的值并将其替换为用户定义的变量状态?

我无法重现您的问题

以下是我的计划:

- User defined variables with variable Status
- Thread Group
  - HTTP Request
    - Regular expression extractor with reference name = Status
  - Beanshell Sampler that logs Status variable

Beanshell采样器记录在正则表达式提取器中接收到的值

是的,您可以将ApplicationStatus的值获取到用户定义的变量UDV中

您可以使用正则表达式,但实际上,对于这种类型的解析,您不应该使用正则表达式。我不想讨论很多原因

以下是您如何使用替代更好的解决方案IMHO来实现这一点:

String html = "<SPAN id=\"ApplicationStatus\">&nbsp;Interrupted</SPAN>";

Document doc = Jsoup.parse(html);

String value = doc.select("#ApplicationStatus").first().text();
//Put value in UDV Status
vars.put("Status", value);
请注意,这段代码是相关的,因此您需要下载jsoup jar并将其放在$JMETER_HOME/lib目录中

希望这能对你的问题有所帮助。

更新

若您想避免使用Java,我已经编写了一个小型jmeter后处理器组件,用于从HTML元素中提取文本值。看看:

如果您从上面的页面中查看如何安装后处理器的步骤,您将按如下方式使用它:


右键单击采样器。在jquery选择器字段write ApplicationStatus中添加一个后处理器->Html提取器,并将结果存储在您选择的变量状态中。在这个添加调试采样器之后,如果在您的调试采样器中存在值为Html Extractor is working的变量状态!你完了

为什么建议使用Jsoup而不是正则表达式?通常在编写性能测试时,您知道HTML的精确结构。使用Jsoup很可能会导致错误。这将使你使用更多的机器来产生更高的效率load@AndreyBotalov在他的问题中,他没有说他正在做性能测试。在您提供的链接中,您或其他任何人都没有提供一点证据,表明Jsoup可能会使您的测试资源对主计算机非常密集。仅仅因为PMD说了,并不能使它成为现实。给我看一些指标,我会祝贺你们两个。与此同时,我甚至不明白你的评论如何依赖于我的回答。我正确地回答了这个问题,这种方法是有效的。如果你不同意我的答案也没关系,因为我恰好不同意你的答案,但这并不意味着它是错误的。至于我为什么建议使用Jsoup而不是正则表达式。原因很简单,Jsoup的主要目的是从Java解析HTML。对于XML解析,应该使用XML解析器,或者在jemeter案例中使用xpath提取器。正则表达式在某些情况下也适用于HTML,正则表达式的目的不是用于HTML,只是使用它太难了。很明显,你想通过使用工具使你的生活更轻松。另外,嵌入Java代码也不是很好,因为很多测试人员不想与Java代码纠缠在一起,所以您必须选择用于什么目的的工具。查看我的更新
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;