在Jmeter中执行Javascript的更好方法
Jmeter脚本的设置部分包含在生成实际负载之前绕过Web应用程序登录页的步骤。作为这些步骤的结果,服务器设置了证明成功登录的特定cookie 为此,我的脚本应该执行服务器响应注入的Javascript函数。因为这是一个一次性过程,所以我使用WebDriver并在浏览器实例中执行Javascript 但我绝对不能做加载线程的一部分,因为WebDriver对于性能测试来说根本不是一个好主意 然而,我仍然想知道这是一种不用创建浏览器实例就计算JS的方法,因为我的JS脚本只不过是算术计算(尽管很复杂)。所以在Jmeter中执行Javascript的更好方法,jmeter,Jmeter,Jmeter脚本的设置部分包含在生成实际负载之前绕过Web应用程序登录页的步骤。作为这些步骤的结果,服务器设置了证明成功登录的特定cookie 为此,我的脚本应该执行服务器响应注入的Javascript函数。因为这是一个一次性过程,所以我使用WebDriver并在浏览器实例中执行Javascript 但我绝对不能做加载线程的一部分,因为WebDriver对于性能测试来说根本不是一个好主意 然而,我仍然想知道这是一种不用创建浏览器实例就计算JS的方法,因为我的JS脚本只不过是算术计算(尽管很复杂)
javascript
,并将代码放在“脚本”区域
var ctx = org.apache.jmeter.threads.JMeterContextService.getContext()
var vars = ctx.getVariables();
for (var i=0; i< THREADS_NUMBER; i++) {
WDS.browser.manage().deleteAllCookies()
WDS.browser.get('LOGIN_PAGE_URL')
var cookie = WDS.browser.manage().getCookieNamed("COOKIE_NAME").getValue();
vars.put("cookie" + i, cookie);
}
${__evalVar(cookie${__threadNum})}
有关使用WebDriver采样器的更多信息,请参阅指南 由于您只关心生成一些HTTP请求的javascript代码的结果,因此直接模拟该结果要比找到让javascript以与在浏览器中相同的方式运行的方法容易得多。例如,如果JS生成/计算http请求传递给服务器的cookie,您可以使用BeanShell或其他脚本语言生成相同的cookie,而无需运行“真正的”javascript,这实际上非常常见。Kiril,谢谢您的回答。代码是自模糊的,我无法恢复脚本中所有计算的逻辑。所以,你肯定是对的,我已经尝试过用同样的方法(用BeanShell模拟JS计算),但没有成功。非常感谢你,Dmitri!这正是我想要的。
${__evalVar(cookie${__threadNum})}