在JMeter中,如何在Javascript中保存线程变量并在下一步或下一个线程组中从Beanshell引用它?
我正在使用WebDriver采样器插件,并且WebDriver步骤似乎需要是Javascript命令。我在Javascript中编写了一个WebDriver代码块,该代码块可以访问网站并获取cookie值。
我尝试过各种各样的东西,但没有任何工作要做。例如,vars.put在WebDriver采样器中工作,但props.put表示“props”未定义。调试采样器显示我的JMeter属性设置为像这样:
"varName"= varName
在Javascript中设置后如下:
props.put( 'varName', varName )
这看起来并不合适。
答案 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方法无法做类似的事情真的很烦人。但是,我很高兴有一种解决方法,因为我找不到任何关于这种事情的正常过程的文档。