在连续 Integration/Delivery 环境中添加性能测试的最佳方法是什么

What would be the best way to add Performance Testing in Continuous Integration/Delivery Environment

我即将在 CI 上集成性能测试,但我很难决定我应该执行哪些以及如何 运行 它:

  1. 我应该 运行 对单个 API 进行负载测试还是应该 运行 整个工作流程(例如:Login -> Home Page -> Search
  2. 我应该运行多长时间呢?
  3. 我还应该添加压力、峰值和浸泡测试吗?
    我在想,CI.
  4. 中的那些应该是 运行

如有任何意见,我们将不胜感激。

如果不知道什么对您的应用程序很重要,就很难说您应该测试什么。在许多应用程序中,测试登录性能不如测试搜索性能和 sub-optimal 使用时间重要。然而,获得针对测试数据的准确搜索性能可能具有挑战性,但也并非不可能。如果 运行 on CI,可以开发脚本来测试关键或经常变化区域的性能。您的 CI 系统可以设置为监视这些区域的变化,然后在必要时启动性能测试。完成后,CI 可以在开发人员进行更改的区域中的性能未达到指定阈值时通知开发人员。我会担心 运行 一些具有紧密反馈循环的 mission-critical 性能测试,而不是担心 运行 许多类型的测试。请记住,必须有人维护这些测试和支持基础设施。

在持续集成过程中包含测试的主要思想是保护自己免受 regressions 的影响,即确保新功能或错误修复不会导致性能下降。

所以通常的做法是 short-term Load Test covering essential features and conducting anticipated number of users to be run periodically (i.e. on each commit or pull request 到 master/integration 分支)。

如果您有足够的容量和环境可用性,那么 soak test in place, but it should occur less frequently (you want to keep build time short enough, don't you?), i.e. overnight or over the weekend. This way you will be able to identify possible memory leaks

也很有意义

这两种方法都假设有一些参考指标是由以前的 ad-hoc 运行 收集的,这些指标可以被认为是可接受的 pass/fail 标准。

Stress test 假定识别 saturation/breaking 点,因此通常它不会包含在 CI 管道中,并且在主要版本之前手动 运行。

查看 How to Include Load Testing in your Continuous Integration Environment 文章了解更多信息。

如果您的开发人员不断提交代码并且担心每次提交的大型负载测试 运行,您可以要求他们对提交进行批处理并在稍后触发性能测试阶段的构建。但是,如果 QA 阶段得到很好的优化并且可以在几分钟内完成,则可以允许所有临时构建通过完整的 QA 周期。 10-15 分钟的时间段是构建完成全自动测试的良好间隔。现在,管道应将它们标记为未准备好生产的临时构建,并且应仅在完成所有性能测试后才允许它们。您还可以通过与 CI QA 测试相匹配的短负载测试来扩展它,但将较大的负载测试推迟到 end-of 天。总之,构建的生产部署必须等到加载和浸泡测试完成。它确实限制了您全天多次无风险部署的能力。如果您宁愿接受一定程度的风险,您可以继续部署以进行较小的更改,例如 属性 和配置更改。