在JMeter中,如何在Javascript中保存线程变量并从Beanshell引用它?

时间:2014-04-07 20:43:06

标签: jmeter jmeter-plugins

在JMeter中,如何在Javascript中保存线程变量并在下一步或下一个线程组中从Beanshell引用它?

我正在使用WebDriver采样器插件,并且WebDriver步骤似乎需要是Javascript命令。我在Javascript中编写了一个WebDriver代码块,该代码块可以访问网站并获取cookie值。

  1. 如何在Javascript WebDriver步骤结束时设置线程组变量。
  2. 如何从Beanshell步骤中检索此值。
  3. 我尝试过各种各样的东西,但没有任何工作要做。例如,vars.put在WebDriver采样器中工作,但props.put表示“props”未定义。调试采样器显示我的JMeter属性设置为像这样:

    "varName"= varName
    

    在Javascript中设置后如下:

    props.put( 'varName', varName )
    

    这看起来并不合适。

1 个答案:

答案 0 :(得分:0)

棘手的是,vars也无法访问WebDriver Sampler,您需要更具创造性。首先,您需要返回值作为Sampler结果,如下所示:

WDS.sampleResult.setResponseData("My var value is:" + varName);

毕竟你需要使用正则表达式(例如:

)从Regular Expression Extractor的响应中提取它
My var value is: (.+?)

varName作为参考名称

最后使用以下代码将Beanshell Post Processor添加到WebDriver Sampler中:

props.put("varName", vars.get("varName"));

将JMeter变量转换为具有" global"的JMeter属性范围,可以在其他线程组中重复使用。


我最终找到的解决方案并不相同。使用' WDS.sampleResult.setResponseData'因为WebDriver Sampler代码似乎不允许这样做,所以不起作用。

事实证明,我能够使用"标题"找到解决方法。在WebDriver Sampler之后立即使用Beanshell Sampler步骤,我可以修改前一个结果的标题(即使我无法修改响应数据本身),因此从WebDriver Sampler我可以使用&#39存储标题; WDS.sampleResult.setResponseHeaders(" iCookie:" + iCookie)' 。然后,从随后的Beanshell采样器(不是后处理器),我能够使用' String header = ctx.getPreviousResult()获取该值.getResponseHeaders();'只要我以这种格式存储标题:" HeaderName:HeaderValue"来自WebDriver Sampler。

使用.setResponseData方法无法做类似的事情真的很烦人。但是,我很高兴有一种解决方法,因为我找不到任何关于这种事情的正常过程的文档。