使用 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 元素的主要内容,如果未能解决你的问题,请参考以下文章