JMeter:在 beanshell post 处理器中使用正则表达式提取器值

JMeter: Using a regex extractor value in beanshell post processor

我在这个主题上发现了几个类似的话题,但到目前为止我还没有成功应用我找到的解决方案。我正在学习 JMeter,我得到的练习是 (1) 创建一个简单的 HTTP 请求,(2) 使用正则表达式提取器提取 CSRF 令牌,然后 (3) 写出提取的通过 beanshell 脚本标记到 jmeter.log.

所以提取令牌很简单:

由于接下来我需要通过 beanshell 脚本获取该值并 运行 它,因此我假设使用 BeanShell 后处理器将是实现此目的的方法。我尝试了以下几种变体:

log.info("The token is: " + vars.get("token"));

测试 运行 没问题,但结果日志中出现了:

INFO o.a.j.u.BeanShellTestElement:令牌为:null

最后,由于我了解 post 处理器 运行 的顺序是颠倒的,所以我将它放在我的正则表达式提取器上方(尽管我已经尝试过将其颠倒过来,但效果没有区别):

我确定我犯了一些菜鸟错误,但我开始 运行 我在谷歌搜索中兜圈子。任何建议将不胜感激!

Beanshell post 处理器必须在正则表达式提取器之后,否则变量尚不可用

关于您的查询本身:为了能够从其他 Post 处理器中的正则表达式提取器访问值,您需要将 Post 处理器 下方 正则表达式提取器。


关于一般方法:

  1. 根据JMeter Best Practices starting from JMeter 3.1 you should be using JSR223 Test Elements and Groovy language
  2. 一般parsing HTML with regular expressions is not the best idea, I would suggest considering switching to CSS/JQuery Extractor代替。

经过详细的努力,我得到了在 BEANSHELL POST PROCESSOR.

中使用正则表达式提取器中定义的变量的解决方案

简单你需要遵循JMeter中访问变量的标准格式:

${variablename}

log.info("${variablename}");

如果您尝试使用 vars.get() method 访问这些变量,它将不起作用。因此,只需像我们通常使用 ${variable name} 那样调用变量即可。

附上示例截图:

Screenshot