gpt4 book ai didi

jmeter - 在 Jmeter 中执行 Javascript 的更好方法

转载 作者:行者123 更新时间:2023-12-04 22:29:32 29 4
gpt4 key购买 nike

我的 Jmeter 脚本的 SetUp 部分包含在生成实际负载之前绕过我的 Web 应用程序登录页面的步骤。作为这些步骤的结果,服务器设置了证明成功登录的特定 cookie。

为此,我的脚本应该执行服务器响应注入(inject)的 Javascript 函数。由于它是一次性程序,因此我使用 WebDriver 并在浏览器实例中执行 Javascript。

但是我绝对不能作为加载线程的一部分做同样的事情,因为 WebDriver 对于性能测试来说(根本)不是一个好主意。

但是,我仍然想知道这是一种无需创建浏览器实例即可计算 JS 的方法,因为我的 JS 脚本只不过是算术计算(虽然很复杂)。所以,

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

  • 提前感谢您的任何想法。

    最佳答案

  • 您可以使用JSR223 Sampler , 选择javascript从“语言”下拉列表中,将您的代码放在“脚本”区域

    JSR223 JavaScript
  • 您可以使用 WebDriver Sampler 对循环中的所有线程使用单个浏览器实例,例如:
    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 变量,例如:
    cookie1=foo
    cookie2=bar
    etc.

  • 因此,您将能够使用 __threadNum() 引用变量值需要的功能,例如:
    ${__evalVar(cookie${__threadNum})}

    The WebDriver Sampler: Your Top 10 Questions Answered有关使用 WebDriver Sampler 的更多信息的指南。

    关于jmeter - 在 Jmeter 中执行 Javascript 的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35606717/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com