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

JMeter:在beanshell后处理器中使用正则表达式提取器值,jmeter,beanshell,Jmeter,Beanshell,我在这个主题上找到了一些类似的线索,但到目前为止,我还没有成功地应用我找到的解决方案。我正在学习JMeter,我得到的一个练习是:(1)创建一个简单的HTTP请求,(2)使用正则表达式提取器提取CSRF令牌,然后(3)通过beanshell脚本将提取的令牌写入JMeter.log 因此提取令牌非常简单: 因为我接下来需要获取该值并通过beanshell脚本运行它,所以我认为使用beanshell后处理器将是一种方法。我尝试了以下几种变体: log.info(“令牌是:”+vars.get(“令

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

因此提取令牌非常简单:

因为我接下来需要获取该值并通过beanshell脚本运行它,所以我认为使用beanshell后处理器将是一种方法。我尝试了以下几种变体:

log.info(“令牌是:”+vars.get(“令牌”))

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

INFO o.a.j.u.BeanShellTestElement:标记为:null

最后,因为我了解后处理器的运行顺序是颠倒的,所以我把它放在我的正则表达式提取器上面(尽管我尝试了相反的方式,但效果没有什么不同):


我肯定我犯了一些noob错误,但我开始在谷歌上绕圈子了。任何建议都将不胜感激

Beanshell后处理器必须位于regex提取器之后,否则变量尚不可用


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


关于一般方法:

  • 从JMeter 3.1开始,您应该使用
  • 总的来说,我建议考虑改用
    经过详细的努力,我得到了在BEANSHELL后处理器中使用正则表达式提取器中定义的变量的解决方案。

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

    ${variablename}
    
    i、 e

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

    随附示例屏幕截图:


    就是这样——奇怪的是,正如我在原始帖子中提到的,我会发誓我已经用两种方法测试了它,但显然我只是在我的脑海里梦到了,因为交换顺序起了作用:“INFO o.a.j.u.BeanShellTestElement:标记是:所有人都在失败的船上!”它得到了默认值,因此,我设置令牌变量的方式有问题,但我可以弄清楚——至少我知道脚本现在可以工作了!非常感谢。谢谢你的建议。不幸的是,因为这实际上是为了一个我一直负责的训练练习,所以我没有选择切换到Groovy——但我已经读到这是首选方法之一。不过,我在那个讨厌的正则表达式提取器上遇到了一些问题,所以我今天在这里发布了一条新的帖子:
    log.info("${variablename}");