微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JMeter - 嵌入的请求有 Bundle.js,它反过来触发更多的次要请求 - 递归检索嵌入的资源请求

如何解决JMeter - 嵌入的请求有 Bundle.js,它反过来触发更多的次要请求 - 递归检索嵌入的资源请求

我的 JMeter 版本是 apache-jmeter-5.4.1。 我正在尝试在基于 React 的网站上设置类似这样的 HTTP 请求:

  1. HTTP 请求 - GET http://YYY.YYY.YYYY/141719(选中检索嵌入资源) 当我运行它时,我可以看到 JMeter 捕获了类似于 *.css、*.js 的嵌入式资源请求(二级请求)

第二组嵌入式资源请求: 但是,其中一个称为 bundle.xxxxxxxx.js 的辅助请求会向服务器创建另一组嵌入式资源请求,这些请求会检索更多 *.js 文件作为请求发起者链的一部分。 而这个文件本身的名称随机生成的,例如,bundle.0787f963ab0ac67dd7d4.js

浏览器当然会立即解析这个bundle.xxxxxxx.js并获取所有嵌入的资源/请求(包括chunk.*.js)

我的问题是如何使用 JMeter 复制此行为,以便同时触发第二组嵌入式资源请求。目前我只能实现捕获第一组嵌入式资源请求。这不会给我真正的负载测试结果,因为第二组有更多的服务器流量。有没有办法递归检索所有嵌入的资源。

我们正在测试的应用程序基于 React JS。

解决方法

根据JMeter project main page

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

有几种启动器类型:

  • 解析器(索引、样式、字体等)——这些家伙将被嵌入的资源下载功能所捕获。以下所有内容都需要以其他方式处理
  • 重定向
  • 脚本
  • 其他

因此,如果您需要模拟大量源自 JavaScript 的 HTTP 请求,则需要在 JMeter 中复制此 JavaScript 代码的逻辑。

您将 JavaScript 复制并粘贴到 JSR223 PostProcessor 中的可能性很小,但很可能它依赖于某些对象,例如 navigatorwindow 或 {{3}所以很有可能你必须用 Groovy 重写它。一旦您有足够的数据来正确构建 HTTP 请求采样器,您很可能需要将它们放在 XMLHttpRequest

另一种选择是 Parallel Controller 并使用真实浏览器进行测试,但请注意,与 HTTP 请求采样器相比,浏览器是非常资源密集型的

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。