在Jmeter中执行Javascript的更好方法 [英] Better way to execute Javascript in Jmeter
问题描述
SetUp部分包含生成真实负载之前绕过Web应用程序登录页面的步骤.这些步骤的结果是,服务器将设置特定的cookie,以证明登录成功.
SetUp part of my Jmeter script contains steps to bypass login page of my Web Application before generating real load. As a result of these steps, server sets specific cookie that proves successful loginization.
为此,我的脚本应执行服务器响应注入的Javascript函数.由于它是一次性过程,因此我将使用WebDriver并在浏览器实例中执行Javascript.
To do that, my script should execute Javascript function injected in response by server. Since it's a one-time procedure, I do it using WebDriver and execute Javascript within browser instance.
但是我绝对不能在加载线程中做同样的事情,因为WebDriver根本不是一个性能测试的好主意.
But I definitely can't do the same as a part of load thread as WebDriver is not a good idea (at all) for performance testing.
但是,我仍然想知道这是一种无需创建浏览器实例即可计算JS的方法,因为我的JS脚本不过是算术计算(尽管很复杂).所以,
However, I'm still wondering is it a way to calculate JS without creating a browser instance, because my JS script is nothing but arithmetic calculations (complex though). So,
- 非常感谢您关于如何在不创建浏览器实例的情况下执行JS的任何想法.因为我可以编写BeanShell代码,所以这不是什么大问题(只需共享可以创建虚拟"浏览器以用于与DOM不相关的计算的库名).不知道会不会更快,但是我会尝试的.
- 如果我是对的,并且浏览器使用是唯一可能的解决方案,那么我正在寻找一种在不同线程之间共享一个浏览器窗口的方法(即使对于等待它的人也有延迟).试图使用JavascriptExecutor,但不知道如何将WebDriver转换为JavascriptExecutor(beanshell是使用过旧的Java编写的,我对它的语法和功能不熟悉).也不能使用WebDriver插件,因为它不允许只创建没有get("pageUrl")的窗口.
感谢任何提前提出的想法.
Thanks for any ideas in advance.
推荐答案
-
您可以使用 JSR223采样器,从中选择
javascript
在语言"下拉菜单中,将代码放置在脚本"区域
You can use JSR223 Sampler, choose
javascript
from "Language" dropdown and place your code in "Script" area
您可以使用WebDriver Sampler将单个浏览器实例用于循环中的所有线程,例如:
You can use single browser instance using WebDriver Sampler for all threads in a loop, something like:
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);
}
它将生成JMeter变量,例如:
it will generate JMeter Variables like:
cookie1=foo
cookie2=bar
etc.
因此,您将可以使用 __threadNum()函数引用变量值需要的地方,例如:
So you will be able to refer variable values using __threadNum() function where required like:
${__evalVar(cookie${__threadNum})}
请参见 WebDriver采样器:您回答的十大问题有关使用WebDriver Sampler的更多信息的指南.
See The WebDriver Sampler: Your Top 10 Questions Answered guide for more information on using the WebDriver Sampler.
这篇关于在Jmeter中执行Javascript的更好方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!