【问题标题】:How to automate performance tests and integrate with CI?如何自动化性能测试并与 CI 集成?
【发布时间】:2015-06-21 23:32:49
【问题描述】:

我正在考虑自动化性能测试,就像我们目前的单元测试一样。

我知道如何使用 jMeter 等工具运行性能测试,或者通过编写自己的代码来触发应用程序的特定部分。我知道如何使用 time、jvisualvm、nmon 或其他方法来收集有关正在使用的资源的信息。

我想更进一步并编写一个性能测试,如果它越过某些线(执行时间、内存或 CPU 消耗......)就会失败。然后我会让我的 CI 服务器 (Jenkins) 定期运行测试以确保性能保持良好。

这很复杂,因为性能取决于硬件,而在我目前的做法中,它需要人工解释结果来决定这是否令人满意。

您知道以这种方式帮助自动化性能测试的任何工具或框架(如果可能基于 Java)吗?如果没有,您有什么好的做法可以建议吗?

谢谢。

【问题讨论】:

  • 你想把你的传感器放在哪里...服务器或客户端。无论哪种方式,您都必须设定要在测试中实现的特定目标。如果你让你的测试结果像响应时间一样可以解释,你可以很容易地自动决定它们是通过还是失败......快乐的脚本编写
  • 两者,有时同时两者。例如,我有一个案例,我们有一个与服务器通信的 Windows 客户端。我想确保它不会给服务器带来太多负载。所以这将意味着启动客户端的许多实例,并在服务器端测量 CPU 消耗、内存......
  • 我觉得上限很难设置。或者,我建议使用某种工具来比较相邻提交的性能,以确保性能不会意外下降。

标签: java performance testing


【解决方案1】:

如果您的测试是主观的,那么要使其自动化,您需要“消除”一些主观性。我的意思是,设置一些您认为可接受和不可接受的阈值。看看是否有办法扔旗子或詹金斯可以拿起的东西。如果您有这些阈值,您就更有可能获得所需的自动化。

【讨论】:

  • 我同意这一点。我想这个练习的一部分是明确我想要设置的限制。
【解决方案2】:

过去,我曾使用 JUnit 做一些性能测试。然而,它不需要人工解释——算法要么耗时太长,要么足够快。在某种程度上,这是一个基于时间阈值的通过/失败测试。

如果你需要自动完成主观性能测试,恐怕很难构建。

【讨论】:

  • 所以我猜你测量了一段代码执行所花费的时间,如果它高于某个值,则调用“fail()”。内存消耗呢?
  • 没错。我们不需要跟踪内存消耗。
【解决方案3】:

Jenkins 有一个“性能插件”,可以从 JMeter 和 JUnit 中获取结果。在“Manage Jenkins”下的“Plugins”下的“available plugins”中查找它

【讨论】:

  • 谢谢。看起来它允许阈值。这对我来说将是一个好的开始。
【解决方案4】:

要自动通过或失败测试,​​您必须能够根据布尔值定义通过/失败标准。这可以是平均响应时间,或者更高级的统计分析,例如趋势函数或标准差。

我不知道有任何工具可以为客户端和服务器端做这种事情。

可以为客户端结果执行此操作的工具数量有限。

使用Jenkins Performance Plugin,您应该能够使用配置的错误阈值通过/失败构建。这是测试结果的非常基本的自动验证,也是通过或失败构建的一种方式。

当我遇到类似的挑战时,我评估了 Performance Plugin,但对它提供的功能并不完全满意。通过这种方式,我开始研究基于 Java 的 Lightning 项目。它使您能够分析 JMeter 结果并自动通过铁路构建,例如基于特定交易类型的平均响应时间或标准偏差。

【讨论】:

    【解决方案5】:

    您可以使用 jmeter 和 ant 在 CI 服务器上自动运行性能测试。我不确定您是否可以捕获超过阈值的响应时间,但我想这应该很容易通过 XSL/shell 脚本来完成。您当然可以发布绩效报告,但可以手动查看。

    【讨论】:

      猜你喜欢
      • 2014-03-15
      • 2015-08-03
      • 2010-10-05
      • 2022-11-16
      • 2011-09-19
      • 2020-09-22
      • 2019-04-21
      • 1970-01-01
      • 2015-07-17
      相关资源
      最近更新 更多