如何使用JMeter对Vaadin 10执行负载测试/性能测试

4

我正在开发一个Vaadin 10项目,我们希望对网站进行负载测试。在使用Vaadin 10之前,我们可以使用Jmeter来执行此操作,但是在使用Vaadin 10后,似乎JMeter无法正常工作。

我们尝试使用JMeter 5.1.1并记录测试案例。然而,我们遇到了第一个问题:CSRF令牌和推送ID。这两个值可以通过正则表达式提取器获取,并将它们放入body data中:

{"csrfToken":"${csrf}","rpc":  [{"type":"mSync","node":5,"feature":1,"property":"invalid","value":true}],"  syncId":0,"clientId":0}

据我所知,至少这个方法是有效的。但我们只得到一个包含“您必须在浏览器中启用JavaScript才能使用此网站”的HTML页面作为结果。
有人知道在Vaadin 10应用程序上执行负载测试或如何使其与JMeter配合工作的更好方法吗?
迄今为止,我找到的大多数答案都针对Vaadin 8或7,而没有针对Vaadin 10+的答案。

1
关于 JS 部分,它是可以预期的,并且与 Flow 无关。有关此主题的更多讨论,请参见以下链接:JMeter 和 JavaScriptJMeter: JavaScript seems to be disabled in your browser - anasmi
2个回答

9

是的,可以使用 JMeter 对 Vaadin 10+ 应用进行负载测试。您应该能够使用以下正则表达式来提取 csrf token:

Vaadin-Security-Key":"(.+?)"

在使用JMeter测试Vaadin 13 Bakery应用启动器时的屏幕截图如下:

enter image description here

除了JMeter外,Gatling也是测试Vaadin(任何版本)应用程序的可伸缩性的良好选择。对于Vaadin 13,Bakery应用启动器中有一个相当不错的Gatling测试脚本示例:https://vaadin.com/start/latest/full-stack-spring。请参见项目的路径:\src\test\scala\BaristaFlow.scala。 编辑: 我上传了一个针对V13应用程序(与Bakery Flow starter相同)的小型但完全运行的JMeter测试,网址如下:https://gist.github.com/johannest/593309e31e35789f8e5b03bed074f13c
该示例脚本显示了csrf令牌提取,还显示了如何提取组件ID(例如用于“New”按钮的ID)以及客户端和同步ID。提取这些ID并在接下来的请求中使用它们作为变量(而不是使用记录的ID)可以使你的测试更加稳定。

非常感谢提供示例。我已经下载了面包店应用程序的启动器。我可以问一下如何运行Scala吗? - sel
1
有两种方法来运行Gatling的Scala文件。1. 通过Gatling Maven集成:请参阅Bakery App Starter的README文件。2. 在下载Gatling后通过命令行运行:https://gatling.io/docs/3.0/general/configuration/(请参见命令行选项) - Johannes Tuikkala

0

我之前发布了这个问题,因为有些人对此感兴趣,所以我将发布一些信息,说明我们如何处理这种情况。

  1. 我们的应用程序不想与J-Meter一起工作,虽然使用jmeter应该是可能的,但我没有成功使其达到工作状态
  2. 我们使用了NeoLoad(试用版对我们的用例已经足够),而且NeoLoad很容易用于Vaadin 10, 但我无法提供如何在Vaadin 10中使用NeoLoad的详细信息,但也许有人可以利用这些信息来缩短研究时间

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接