需要一些关于使用 Jmeter 执行 Javascript 的指导

Need some guidance on executing Javascript with Jmeter

过去几周我一直在学习 Jmeter,所以它对我来说仍然是一个新鲜的主题。我创建的最后一个测试包括登录、一些页面导航和最后的表单提交。整个测试有效,但最后一个表单的内容没有提交到数据库,我相信会发生这种情况,因为这是通过 JavaScript,特别是这个脚本:

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['WebForm1'];
if (!theForm) {
    theForm = document.WebForm1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>

据我所知,我应该使用 JSR223 Sampler 或 Post-processor 来执行脚本,但我不知道该怎么做。我应该复制 JavaScript 代码以产生相同的结果 还是我可以简单地重复使用原始 JavaScript?

提前致谢!

编辑:我想我问得太早了。我显然不能重用 JavaScript 代码。我想应该使用我刚刚发现的 JMeterContext 和 JMeterVariables 中的方法来完成。我的方向对吗?

像 JMeter 这样的工具的想法是在协议级别(在本例中为 HTTP)复制用户行为。 JMeter 不会构建您网站的 DOM 表示,因此将无法执行您在浏览器中看到的 Javascript。您应该使用 HTTP 请求采样器,select POST HTTP 方法并将您的表单数据放入参数部分。所有 Javascript 都是纯客户端行为,因此不属于您的 JMeter 测试。

如果您已经尝试过但失败了,请提供更多详细信息!

根据JMeter project main page

JMeter is not a browser, it works at protocol level. As far as web-services and remote services are concerned, JMeter looks like a browser (or rather, multiple browsers); however JMeter does not perform all the actions supported by browsers. In particular, JMeter does not execute the Javascript found in HTML pages. Nor does it render the HTML pages as a browser does (it's possible to view the response as HTML etc., but the timings are not included in any samples, and only one sample in one thread is ever displayed at a time).

所以你不需要复制JavaScript,你需要复制HTTP POST Request which is produced by this JavaScript function using JMeter's HTTP Request采样器

您当前请求的最可能原因 "not working" 这些 __EVENTTARGET__EVENTARGUMENT 动态参数丢失或未正确实现 correlation

如果您只是记录了这些参数并且没有对它们进行任何操作 - 您将无法成功重播您的脚本,因为这些参数在您每次访问应用程序时都有不同的值,因此它们需要 相关,示例算法:

  1. 打开申请的第一页
  2. 使用合适的 JMeter Post-处理器(最有可能 CSS Selector Extractor)至少提取这些 __EVENTTARGET__EVENTARGUMENT 值并将它们存储到 JMeter 变量中
  3. 在后续请求中,将记录的硬编码值替换为步骤 2 中的 JMeter 变量

查看 ASP.NET Login Testing with JMeter 文章以获取更全面的解释以及围绕动态请求参数工作的示例。

另外不要忘记将 HTTP Cookie Manager 添加到您的测试计划