关于使用Jmeter执行Java脚本需要一些指导

问题描述 投票:0回答:2

我在过去的几周里一直在学习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采样器或后处理器来执行脚本,但是我不知道该怎么做。我应该复制JavaScript代码,以便产生相同的结果吗?[[或者我可以简单地重用原始JavaScript?

提前感谢!

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

javascript jmeter performance-testing form-submit jsr223
2个回答
1
投票

-1
投票

JMeter不是浏览器,它在协议级别工作。就Web服务和远程服务而言,JMeter看起来像一个浏览器(或者说多个浏览器)。但是,JMeter不会执行浏览器支持的所有操作。

特别是,JMeter不会执行HTML页面中的Java脚本。它也不会像浏览器一样呈现HTML页面(可以将响应查看为HTML等,但是任何示例中均未包含时间安排,并且一次仅在一个线程中显示一个样本)。

因此您不需要复制JavaScript,您需要使用JMeter的HTTP POST Request采样器复制此JavaScript函数产生的HTTP Request

这些当前参数correlation__EVENTTARGET动态参数的__EVENTARGUMENT丢失或未正确实现,导致当前请求“不起作用”的最可能原因。 如果您只是记录了这些参数并且没有对它们做任何事情-您将无法成功重播脚本,因为每次访问应用程序时这些参数具有不同的值,因此它们必须与[[correlated保持一致,示例算法:

打开应用程序的首页

使用合适的JMeter后处理器(最有可能是__EVENTTARGET提取至少这些__EVENTARGUMENTCSS Selector Extractor值并将它们存储到JMeter变量中在后续请求中,将记录的硬编码值替换为步骤2中的JMeter变量

    签出ASP.NET Login Testing with JMeter文章可获得更全面的解释,并提供了有关处理动态请求参数的示例。

  • 也不要忘记将HTTP Cookie Manager添加到您的测试计划中>>
  • © www.soinside.com 2019 - 2024. All rights reserved.