如何从WebDriver Sampler中设置JMeter Vars

How to set JMeter Vars from within WebDriver Sampler?

本文关键字:设置 JMeter Vars Sampler WebDriver      更新时间:2023-09-26
// I had previously used a CSS/JQuery extractor to get a URL from a page and add it to JMeter vars - accessing it here
var pageURL = "${valueFromJmeterVars}";
// navigate to that url
WDS.browser.get(pageURL); 
// selecting an element
var button = wait.until(pkg.ExpectedConditions.visibilityOfElementLocated(pkg.By.cssSelector(buttonLocator)));                                                                                                                                               
// log desired boolean value to console, so I can confirm is as expected
WDS.log.info('reserveASpotButton:' + reserveASpotButton.isEnabled());
// add my boolean to JMeter vars, so I can access later from beanshell post-processor (where I do my assertions)
vars.put("reserveASpotButtonIsEnabled", reserveASpotButton.isEnabled());

上面的最后一行不起作用。

我可以成功地使用 CSS/JQuery 提取器向 JMeter vars 添加值......

但是,如何从WebDriver Sampler中执行相同的操作?

您可以从WebDriver Sampler中访问JMeter API类,它是作为JSR 223标准实现的,例如您可以引用JMeter变量(又名vars如下所示)

在 Web 驱动程序采样器中:

var ctx = org.apache.jmeter.threads.JMeterContextService.getContext()
var vars = ctx.getVariables();
vars.put('foo','bar')

现在您有${foo}值为 bar 的变量

有关更多 WDS 采样器提示和技巧,请参阅 WebDriver 采样器:回答的前 10 个问题指南。

我相信你需要先把它投射到字符串,按照使用Selenium和JMeter的WebDriver Sampler指南JMeter变量基本上是字符串,你不能把布尔值放在那里。

只需更换

vars.put("reserveASpotButtonIsEnabled", reserveASpotButton.isEnabled());

vars.put("reserveASpotButtonIsEnabled", reserveASpotButton.isEnabled().toString());

它应该有效。

不起作用,因为"vars"未在WebDriver Sampler中定义,例如BeanShell Sampler。

没有一种干净的方法可以做到这一点,但这是可能的。 您可以在 WebDriver 采样器中设置响应标头:

WDS.sampleResult.setResponseHeaders(reserveASpotButton.isEnabled())

然后,可以使用正则表达式提取器从响应标头中提取数据。