繁体   English   中英

需要一些关于使用 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 请求采样器,选择 POST HTTP 方法并将表单数据放入参数部分。 所有 Javascript 都是纯客户端行为,因此不属于您的 JMeter 测试。

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

根据JMeter 项目主页

JMeter 不是浏览器,它在协议级别工作。 就 Web 服务和远程服务而言,JMeter 看起来像一个浏览器(或者更确切地说,多个浏览器); 但是 JMeter 不会执行浏览器支持的所有操作。 特别是,JMeter 不执行 HTML 页面中的 Javascript。 它也不会像浏览器那样呈现 HTML 页面(可以将响应视为 HTML 等,但时间不包含在任何示例中,并且一次只显示一个线程中的一个示例)。

所以你不需要复制 JavaScript,你需要使用 JMeter 的HTTP 请求采样器复制这个 JavaScript 函数产生的HTTP POST 请求

您当前的请求“不工作”的最可能原因是缺少这些__EVENTTARGET__EVENTARGUMENT动态参数的相关性或未正确实现相关性

如果您只是记录了这些参数并且没有对它们做任何事情 - 您将无法成功重放您的脚本,因为每次访问应用程序时这些参数都有不同的值,因此需要将它们关联起来,例如算法:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM