寻找开源的、基于 Java 的性能测试工具

软件测试 自动化测试 爪哇 表现 负载测试 仪表
2022-01-17 00:06:07

目标:我有一个用 java 编写的企业应用程序来测试性能。我需要单独做,所以我将基本上模拟通过 http/https 的用户交互。

我的发现:

  • Selenium 不适合负载测试。即使使用线程,Selenium 似乎也不能同时满足很多请求。

  • Jmeter 是最推荐的解决方案,但使用它编写脚本会增加学习曲线。

  • OpenSTA好像是2007年以后剩下的,不然是个好工具

  • 最近遇到了加特林。他们声称克服了包括 Jmeter 在内的其他工具的缺点

次要要求/场景:

  1. 我的团队中有 selenium 专业知识,并且有几个脚本已准备好进行回归测试。所以可能我想重新使用它们。

  2. 在我可以使用开源工具/API 完美完成工作之前,我不愿意有付费解决方案,即使它需要我付出更多努力。

因此,请建议您的解决方案/工具。我仍然认为我最终会使用 Jmeter ..但是需要建议。͏͏͏͏͏

4个回答

我在使用Grinder时遇到了一些运气。它基于 Java,但您也可以使用 Jython 或 Clojure 编写脚本。

您说您想利用您团队当前的 Selenium 脚本和专业性能测试。您没有描述您的回归测试脚本,但您可能想重新考虑它们是否合适。特别是,您应该考虑两个问题:Selenium 是否适合性能测试以及功能测试是否适合性能测试?

首先,您可能已经意识到,Selenium 是一种非常耗费资源的方式来引发系统负载。让我引用 Selenium Grid FAQ 中的第一个问题:

问:你会推荐使用 Selenium Grid 进行性能/负载测试吗?

答:Selenium Grid 不是为性能和负载测试而设计的 [...] 主要原因是使用真实浏览器进行性能/负载测试是一个非常糟糕的主意,因为扩展负载和实际负载很难/昂贵。负载非常不一致。

[...]

例如,要模拟 200 个并发用户,您需要 200 个并发浏览器以及基于 Selenium Grid 的负载测试框架。即使您在 Linux 上使用 Firefox(因此是最有效的设置),您也可能需要至少 10 台机器来产生这种负载。当 JMeter/Grinder/httperf 可以在单台机器上生成相同类型的负载时,这真是太疯狂了。

其次,功能测试性能测试的需求之间存在张力功能测试侧重于各种情况下的正确行为,包括一些可能很少发生但对用户体验很重要的行为。性能测试侧重于系统在预期负载下的响应方式。如果您的功能测试没有为典型用户的工作流程建模,则它不属于性能测试。例如,当您输入 2 位数的电话号码时,知道页面会生成一个很好的错误消息可能很重要,但询问 100 个用户同时这样做时会发生什么是毫无意义的。

即使功能测试确实模拟了典型的用户行为,它仍然可能不适合性能测试。功能测试侧重于处理一组输入并检查结果是否与其预期值匹配。如果测试涉及多个步骤,它还可以检查中间结果以进行诊断。根据我的经验,性能测试省去了所有检查,因为它减慢了性能测试。(更准确地说,可能有一些线程检查预期结果与实际结果,但大多数线程只是尝试加载系统而不担心正确的结果。)

我用 Gatling 试了一下,我的评价远远超过 Jmeter。

  1. 最大的优势是您可以为负载测试编写一些代码——安全地引入类型、可重用性和可维护性。

  2. Scala 对于 Java 开发人员来说并不难学。

  3. 您可以产生更高的负载而不会真正阻塞您自己的机器。

  4. Jmeter 本身的性能会随着负载的增加而降低。这将为负载测试生成不正确的结果。加特林是相当新的,但很棒。

你可以参考它的网站。我完全推荐它,我也提出了一个观点并说服我的管理层使用它

http://gatling-tool.org/

仪表

我知道这听起来像我在这里打死马,但这是最常用的开源工具。互联网上有关于使用和设置它的文档。此外,如果您的公司是一家 Java 商店,那么可能有很多开发人员可以帮助您的团队入门。

我会建议 Jmeter 性能...

顾名思义,Jmeter 是用于负载测试客户端/服务器应用程序的 Java 工具之一。早些时候它仅用于测试 Web 应用程序,但现在它被用于其他测试功能。它通常用于测量性能和负载测试客户端-服务器应用程序的功能行为。它还可以处理 FTP 和 JDBC 请求。您必须了解诸如 WinRunner 之类的其他工具。您会很高兴知道,与 WinRunner 相比,Jmeter 由于其简单直观的 GUI 易于使用。此外,它是完全免费的,并且可以作为开源软件轻松修改。

Jmeter的重要功能是可以通过使用它来刺激服务器上的重负载,而不是在服务器上,而是在网络或对象上的重负载,以测试其在不同负载类型下的强度。也可以使用 Jmeter 对性能进行图形分析,或者也可以在高并发负载下测试服务器/脚本/对象的行为。