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

时间:2017-10-30 21:53:20

标签: jmeter beanshell

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

因此,提取令牌非常简单: enter image description here

由于我需要接下来获取该值并通过beanshell脚本运行它,我假设使用BeanShell PostProcessor将是这里的方法。我尝试过以下几种变体:

log.info("令牌是:" + vars.get("令牌"));

测试运行正常,但随后会出现在生成的日志中:

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

最后,由于我理解后处理器按顺序颠倒运行,我把它放在我的正则表达式提取器之上(尽管我已经尝试了它反向,效果没有区别):

enter image description here

我确定我犯了一些菜鸟的错误,但我开始用谷歌搜索圈子。任何建议都会非常感激!

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

关于您的查询本身:为了能够从另一个PostProcessor中的正则表达式提取器访问值,您需要将后处理器放在正则表达式提取器下面。

关于一般方法:

  1. 根据JMeter Best Practices从JMeter 3.1开始,您应该使用JSR223 Test ElementsGroovy language
  2. 一般情况parsing HTML with regular expressions is not the best idea,我建议您考虑转而使用CSS/JQuery Extractor

答案 2 :(得分:0)

经过详尽的努力,我得到了使用 BEANSHELL POST处理器中的正则表达式提取器中定义的变量的解决方案。

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

${variablename}

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

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

随附了示例屏幕截图:

Screenshot