使用 k6 进行 Meteor 应用程序负载测试,等待 body 元素

Posted

技术标签:

【中文标题】使用 k6 进行 Meteor 应用程序负载测试,等待 body 元素【英文标题】:Meteor application load testing with k6, wait on body element 【发布时间】:2018-10-01 22:18:12 【问题描述】:

k6 新手,使用 Web 应用程序,在加载 css 和 js 文件时在主页上简要显示一个微调器。

加载文件并且脚本可用后,会添加一个登录表单(替换微调器)。

使用 k6,有没有办法等到正文中的特定正文元素(登录表单)可用后再继续下一步(即填充用户名和密码并提交表单以登录)?

目前,当我查看响应正文时,我只看到微调器元素。添加延迟似乎不会影响返回的正文,即使理论上应该已将登录表单添加到页面。

如果元素在初始页面加载后添加到正文中,是否会被 k6 检测到并在响应中可用?

感谢您的帮助。

比尔

【问题讨论】:

***.com/questions/1033398/… 感谢您的链接,凯尔 【参考方案1】:

k6 不像浏览器那样工作——负载测试是用 javascript 编写的,但是当您请求 html 文件时,该文件中的 JavaScript 不会执行。即使使用eval() 或类似的东西,它通常也无法执行,因为 k6 没有 DOM 或任何常用的浏览器 API。因此,您必须明确指定您希望 k6 脚本发出的任何 HTTP 请求,在您的情况下,我假设微调器和登录表单是由主页中某处的 JavaScript 生成的。

为了简化在使用 k6 时处理此类高度动态的网站,您可以在浏览器中正常使用该网站,将浏览器会话记录为 .har 文件并将其导出,然后将该 .har 文件转换为带有k6 convert 命令的k6 脚本,如下所示:k6 convert session.har -O k6_script.js。更多全流程信息您可以找到here。

【讨论】:

太棒了!这似乎奏效了。现在我需要花一些时间挖掘转换后的 .har、微调内容并更详细地学习如何使用 k6。感谢您的提示! 我也在使用InfluxDB output with Grafana to visualize results——不错的工具组合。 在更深入地查看结果和额外测试后,似乎记录没有完成整个过程(即等待登录表单添加到页面,提交表单,登录等)。我会继续修补,看看我能不能让它发挥作用,但遗憾的是,我可能不得不换个方向。【参考方案2】:

k6 不执行客户端代码,也不渲染任何内容。它向目标系统发出请求并加载它们。这使得发出大量请求很有效,但会产生在某些情况下必须解决的新问题。

    捕获所有必要的请求 - 通常使用 k6 convert 转换 HAR 文件可以很好地为脚本奠定基础。我建议在转换中使用其他选项来限制任何第三方请求。例如--only--skip。更多信息在这里:https://support.loadimpact.com/4.0/how-to-tutorials/how-to-convert-har-to-k6-test/

    由于您记录了浏览器会话,如果您的应用程序/站点使用任何东西来防止 CSRF 攻击,您必须处理这些值/关联它们。例如.NET 站点使用 VIEWSTATE,如果您正在测试 .NET 应用程序,则需要指示 VU 从响应正文中提取视图状态并在需要它的请求中重用它

    与第 2 点类似,如果您提交表单,您可能不想一遍又一遍地使用相同的详细信息。这通常只是测试您的系统可以缓存多少或导致请求失败(例如,如果您正在登录并且您的系统不支持同一用户的并发登录)。 k6 能够利用 CSV 或 JSON 数据作为数据参数化的来源。如果不太复杂,您也可以生成其中的一些内联。一些例子在这里:https://docs.k6.io/docs/open-filepath-mode

【讨论】:

感谢您的建议! k6 可能最终成为负载测试 API 的一个很好的解决方案,但由于网站本身的动态/交互性质,看起来 Selenium 可能需要成为负载测试组合的一部分。

以上是关于使用 k6 进行 Meteor 应用程序负载测试,等待 body 元素的主要内容,如果未能解决你的问题,请参考以下文章

从 K6 模拟每个 VU 的浏览器缓存以进行负载测试

使用 K6 来给你的服务做一次负载和压力测试吧

开源负载测试工具k6比JMeter更容易的5件事

开源负载测试工具k6比JMeter更容易的5件事

K6 负载测试 - 如何为整个测试运行创建顺序 ID

K6性能测试工具的使用入门