在Jmeter中执行Javascript的更好方法 [英] Better way to execute Javascript in Jmeter

查看:817
本文介绍了在Jmeter中执行Javascript的更好方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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,

  1. 非常感谢您关于如何在不创建浏览器实例的情况下执行JS的任何想法.因为我可以编写BeanShell代码,所以这不是什么大问题(只需共享可以创建虚拟"浏览器以用于与DOM不相关的计算的库名).不知道会不会更快,但是我会尝试的.
  2. 如果我是对的,并且浏览器使用是唯一可能的解决方案,那么我正在寻找一种在不同线程之间共享一个浏览器窗口的方法(即使对于等待它的人也有延迟).试图使用JavascriptExecutor,但不知道如何将WebDriver转换为JavascriptExecutor(beanshell是使用过旧的Java编写的,我对它的语法和功能不熟悉).也不能使用WebDriver插件,因为它不允许只创建没有get("pageUrl")的窗口.

感谢任何提前提出的想法.

Thanks for any ideas in advance.

推荐答案

  1. 您可以使用 JSR223采样器,从中选择javascript在语言"下拉菜单中,将代码放置在脚本"区域

  1. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆