如何在 JMeter 中执行 Ajax 请求?
How to execute Ajax requests in JMeter?
我想在 JMeter 中执行 Ajax 请求。我用 JMeter 和 BlazeMeter 记录了我的测试计划,但是 none 可以处理 Ajax 请求。我该如何解决我的问题?
或者是否有任何工具可以发送并发 Ajax 请求?
提前致谢,
M.A
默认情况下,JMeter 无法模拟 Ajax 请求,因为它不处理 .js
文件(从 3.1 版本开始)。您必须为 AJAX 个请求显式添加请求(HTTP 采样器)。
使用浏览器的 Network
选项卡(F12 选项)并按 xhr
过滤流量,仅显示 AJAX 请求。将这些请求作为 HTTP 采样器添加到脚本中您在测试计划中需要的位置。
浏览器可以处理 .js
个文件,因此 AJAX 请求是从浏览器发送的。当您使用 HTTP Test Script Recorder
录制脚本时,当您使用浏览器导航时,即使 AJAX 请求(源自 js 文件)也会 added/recorded 到测试计划。
由于 JMeter 由于限制无法处理 .js
文件,如果您是在没有 HTTP Test Script Recorder
.
的情况下构建 Test Plan
注意:如果您正在使用 HTTP Test Script Recorder
,则无需手动添加它们,因为它们已记录在测试计划中。
您可以通过使用 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
这是不可能的,因为目前不支持启动比线程组中最初定义的线程更多的线程,该功能被跟踪为 Bug 53159。 AJAX 请求是 "normal" HTTP 请求,因此 JMeter 可以记录和重播它们,但是当涉及到异步执行时 - 你现在不能这样做。解决方法选项位于:
- 使用WebDriver Sampler plugin 这样每个 JMeter 虚拟用户都会启动一个真实的浏览器。警告:这种方式非常耗费资源。
- 使用脚本,即JSR223 PostProcessor to kick off AJAX-driven requests via Apache HttpComponents
- Develop your custom sampler。您可以使用当前处理嵌入式资源的方式作为参考。
使用 JMeter 代理记录采样器后,我遇到了同样的问题。答案在此博客 post 上:https://lincolnloop.com/blog/load-testing-jmeter-part-1-getting-started/ - 请参阅 Ajax 请求部分。
为 ajax 请求添加 HTTP Header 管理器,并确保您发送 X-Requested-With:XMLHttpRequest
header.
我想在 JMeter 中执行 Ajax 请求。我用 JMeter 和 BlazeMeter 记录了我的测试计划,但是 none 可以处理 Ajax 请求。我该如何解决我的问题?
或者是否有任何工具可以发送并发 Ajax 请求?
提前致谢, M.A
默认情况下,JMeter 无法模拟 Ajax 请求,因为它不处理 .js
文件(从 3.1 版本开始)。您必须为 AJAX 个请求显式添加请求(HTTP 采样器)。
使用浏览器的 Network
选项卡(F12 选项)并按 xhr
过滤流量,仅显示 AJAX 请求。将这些请求作为 HTTP 采样器添加到脚本中您在测试计划中需要的位置。
浏览器可以处理 .js
个文件,因此 AJAX 请求是从浏览器发送的。当您使用 HTTP Test Script Recorder
录制脚本时,当您使用浏览器导航时,即使 AJAX 请求(源自 js 文件)也会 added/recorded 到测试计划。
由于 JMeter 由于限制无法处理 .js
文件,如果您是在没有 HTTP Test Script Recorder
.
Test Plan
注意:如果您正在使用 HTTP Test Script Recorder
,则无需手动添加它们,因为它们已记录在测试计划中。
您可以通过使用 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
这是不可能的,因为目前不支持启动比线程组中最初定义的线程更多的线程,该功能被跟踪为 Bug 53159。 AJAX 请求是 "normal" HTTP 请求,因此 JMeter 可以记录和重播它们,但是当涉及到异步执行时 - 你现在不能这样做。解决方法选项位于:
- 使用WebDriver Sampler plugin 这样每个 JMeter 虚拟用户都会启动一个真实的浏览器。警告:这种方式非常耗费资源。
- 使用脚本,即JSR223 PostProcessor to kick off AJAX-driven requests via Apache HttpComponents
- Develop your custom sampler。您可以使用当前处理嵌入式资源的方式作为参考。
使用 JMeter 代理记录采样器后,我遇到了同样的问题。答案在此博客 post 上:https://lincolnloop.com/blog/load-testing-jmeter-part-1-getting-started/ - 请参阅 Ajax 请求部分。
为 ajax 请求添加 HTTP Header 管理器,并确保您发送 X-Requested-With:XMLHttpRequest
header.