【问题标题】:How to execute Ajax requests in JMeter?如何在 JMeter 中执行 Ajax 请求?
【发布时间】:2017-05-16 08:32:24
【问题描述】:

我想在 JMeter 中执行 Ajax 请求。我用 JMeter 和 BlazeMeter 记录了我的测试计划,但没有一个可以处理 Ajax 请求。我该如何解决我的问题?

或者有什么工具可以发送并发Ajax请求?

提前致谢, 硕士

【问题讨论】:

    标签: ajax jmeter blazemeter


    【解决方案1】:

    默认情况下,JMeter 无法模拟 Ajax 请求,因为它不处理 .js 文件(截至 3.1 版本)。您必须为 AJAX 请求显式添加请求(HTTP 采样器)。

    使用浏览器的Network 选项卡(F12 选项)并按xhr 过滤流量,它只显示AJAX 请求。将这些请求作为 HTTP 采样器添加到脚本中您在测试计划中需要的位置。


    浏览器可以处理.js 文件,因此AJAX 请求是从浏览器发送的。当您使用HTTP Test Script Recorder 录制脚本时,当您使用浏览器进行导航时,即使是 AJAX 请求(源自 js 文件)也会被添加/录制到测试计划中。

    由于 JMeter 受限制无法处理 .js 文件,如果您在构建 Test Plan 时没有 HTTP Test Script Recorder,请使用 HTTP 采样器手动添加 AJAX 请求(除了 HTTP Get 或 Post 请求)。

    注意:如果您使用的是HTTP Test Script Recorder,则无需手动添加,因为它们已记录在测试计划中。

    【讨论】:

    • 是的,这是目前的预期行为。 JMeter 不处理js 文件,因此来自js 文件的请求永远不会被发送。这是 JMeter 的一个已知限制。您必须使用 HTTP 采样器为它们显式添加请求。
    • 如我所说,JMeter不具备处理JS文件的能力。浏览器可以处理下载/接收的 JS 文件,因此发送来自它们的 HTTP 请求(称为 AJAX 请求)。但是,由于限制,JMeter 无法处理 JS 文件。因此,比较来自 JS 文件的请求(使用浏览器 -> F12 选项卡),使用 HTTP 采样器手动为它们添加 HTTP 请求。您遵循的过程是正确的,但不是处理JS文件,除了模拟HTTP请求。当您使用 HTTP Script Recorder 录制脚本时,即使是 AJAX 请求也会被捕获。
    • 请添加您的测试计划的屏幕截图。你在期待什么?实际行为是什么? (在问题中添加查看结果树的屏幕截图)。
    • 我记得 WordPress 对每种类型的操作都有wpnonce(检查在线行为),它的生命周期很短。你把这个值关联起来了吗?比较请求,通过浏览器发送并通过 Jmeter 发送。找出差异。可能,差异(值的变化),您可能需要关联。
    • 非常感谢,您对 wpnonce 的提示,敲响警钟解决我的问题。
    【解决方案2】:

    您可以通过使用 JMeter 代理记录 http 流量来做到这一点

    http://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf

    但只能重放相同的流量,这可能对会话、cookie 有问题... 更好的解决方案是使用 WebDriver

    https://jmeter-plugins.org/wiki/WebDriverTutorial/

    https://jmeter-plugins.org/wiki/PluginInstall/

    需要的包是https://jmeter-plugins.org/files/packages/jpgc-webdriver-1.4.0.zip

    【讨论】:

    • 我一步一步尝试了这个解决方案,但是 WebDriver Sampler 给了我错误。在日志查看器中它给出了这个错误:测试失败! java.lang.NoClassDefFoundError: org/openqa/selenium/os/Kernel32
    • 你添加了需要的库吗??我已经更新了链接
    • 通过安装 "Selenium/WebDriver Support" 插件,这必须将 selenium-remote-driver-x.xx.x.jar 和其他 jar 复制到 JMETER_HOME/lib 文件夹中跨度>
    • JMeter 使用 HTTP Cookie Manager 配置元素处理 cookie(和会话)。你不需要为此使用 WebDriver。
    • @DavidS 我不确定 HTTP Cookie 管理器是否会影响 selenium HtmlUnit 实现...但肯定会影响 HTTP REQUEST 元素...
    【解决方案3】:

    目前不支持启动比线程组中最初定义的线程更多的线程,该功能被跟踪为Bug 53159。 AJAX 请求是“正常”的 HTTP 请求,因此 JMeter 可以记录和重放它们,但是当涉及到异步执行时 - 你现在还不能这样做。解决方法选项位于:

    1. 使用WebDriver Sampler plugin,这样每个JMeter 虚拟用户都会启动一个真正的浏览器。警告:这种方式非常耗费资源。
    2. 使用脚本,即JSR223 PostProcessor 通过Apache HttpComponents 启动 AJAX 驱动的请求
    3. Develop your custom sampler。您可以使用当前处理嵌入式资源的方式作为参考。

    了解更多:How to Load Test AJAX/XHR Enabled Sites With JMeter

    【讨论】:

      【解决方案4】:

      在使用 JMeter 代理记录采样器后,我遇到了同样的问题。答案在这篇博文中:https://lincolnloop.com/blog/load-testing-jmeter-part-1-getting-started/ - 请参阅 Ajax 请求部分。

      为 ajax 请求添加一个 HTTP 标头管理器,并确保您发送的是 X-Requested-With:XMLHttpRequest 标头。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多