如何在JMeter中执行Ajax请求?
我想在JMeter中执行Ajax请求。我用JMeter和BlazeMeter记录了我的测试计划,但没有人能处理Ajax请求。我如何解决我的问题?如何在JMeter中执行Ajax请求?
或者是否有任何工具可以发送并发的Ajax请求?
由于提前, M.A
默认情况下,Ajax请求不能被JMeter的模拟,因为它不处理.js
文件(3.1版本以上)。您必须为AJAX请求明确添加请求(HTTP采样器)。
使用浏览器(F12选项)的Network
选项卡并通过xhr
过滤流量,该流量仅显示AJAX请求。将这些请求作为HTTP采样器添加到测试计划中需要的脚本中。
浏览器可以处理.js
文件,因此AJAX请求从浏览器发送。当您使用HTTP Test Script Recorder
录制脚本时,当您使用浏览器进行导航时,甚至AJAX请求(源自js文件)也将被添加/记录到测试计划中。
由于JMeter的无法处理.js
文件由于限制,手动添加AJAX请求使用HTTP取样(不过HTTP GET或POST请求),如果你不HTTP Test Script Recorder
建设Test Plan
。
注意:如果您使用的是HTTP Test Script Recorder
,则不需要手动添加它们,因为它们已经记录在测试计划中。
你可以做,通过记录与JMeter的代理服务器的HTTP流量
http://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf
但也仅仅是能够重现相同的业务,可以为会话,饼干...... 更好的方法是有问题的使用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取样器给了我错误。在日志查看器中出现此错误:测试失败! java.lang.NoClassDefFoundError:org/openqa/selenium/os/Kernel32 –
你有没有添加需要的库?我通过安装**“Selenium/WebDriver Support”**插件更新了链接 –
,这必须将selenium-remote-driver-x.xx.x.jar和其他jar文件复制到JMETER_HOME/lib文件夹 –
由于不能启动线程组中最初定义的线程数量,因此当前不支持该功能,因此该功能被追踪为Bug 53159。 AJAX请求是“正常的”HTTP请求,因此JMeter可以记录并重放它们,但是当涉及到异步执行时 - 您目前无法做到这一点。解决方法选项在:
- 使用WebDriver Sampler plugin因此每个JMeter虚拟用户都会启动一个真正的浏览器。警告:这种方式非常耗费资源。
- 使用脚本,即JSR223 PostProcessor通过Apache HttpComponents
- Develop your custom sampler开球AJAX驱动的请求。您可以使用当前处理嵌入式资源的方式作为参考。
我记录使用JMeter的代理取样后有同样的问题。答案在这篇博文中:https://lincolnloop.com/blog/load-testing-jmeter-part-1-getting-started/ - 请参阅Ajax请求部分。
为ajax请求添加HTTP标头管理器,并确保您发送X-Requested-With:XMLHttpRequest
标头。
JMeter可以记录Js和xhr部分中浏览器的Network选项卡上显示的所有JS请求,但是当我播放测试计划时,JS请求将不会生效,并且Js请求不会生效。 –
是的,这是目前的预期行为。 JMeter不处理'js'文件,所以源于'js'文件的请求永远不会被发送。这是JMeter的一个已知限制。您必须使用HTTP采样器为他们明确添加请求。 –
我对我的JS请求使用了采样器/ HTTP请求。换句话说,我右键单击采样器并选择HTTP请求,然后将路径添加到路径字段中的JS文件。但它不处理JS文件。它不是HTTP采样器?我使用HTTP采样器的方式错误吗? –