持续集成中的性能测试?

问题描述 投票:15回答:6

我们已经有了一个持续的集成过程,可以构建,运行单元测试,进行静态代码分析并生成文档。但是,我们希望将其扩展到包括自动性能测试。在这种情况下,我们正在开发.NET Web应用程序。

我们已经使用JMeter(在CI流程之外)进行了一些性能测试,但是我不知道这是否是包含在CI流程中的最佳工具?硒是一种选择吗? WAPT Pro?

我们应该在哪个级别上测试性能?我们应该有一套“性能单元测试”吗?我们是否应该在类似生产的环境中运行JMeter(或类似的工具),并且如果任何请求花费的时间超过1秒而失败?这样的东西差异不会太大吗?

所以,你们是否将自动性能测试作为CI的一部分?您要测试什么,并使用哪些工具?您的经历如何?

.net selenium continuous-integration jmeter performance-testing
6个回答
10
投票

首先,JMeter是包含在CI中的好选择,因为它可以从命令行运行,并且可以在执行此操作时传入变量。我会推荐此任务。

尽管一般来说,集成Perf。对CI进行测试非常困难。您已经列出了这样做的许多原因,因此您已经了解了其中的局限性,因此已经处于中间位置。就是这样:可能有Perf。在CI中进行测试,但仅在有限的范围内进行。

我认为一种好的方法遵循其中一些原则:

您无法在CI中运行满载(或浸泡或容量)测试,这不切实际。结果是主观的,需要人为解释,并且需要时间来运行测试。但是您可以运行一个更简单的简化测试集来衡量请求的响应时间,然后可以评估这些响应时间:

  • 针对NFR或预期范围-即。应该少于1秒。
  • 针对先前的结果-即偏差不应超过上一个版本的10%。

您还可以运行自动加载/性能。在构建过程之外进行全面测试。 “半CI”。因此,也许您可​​以使测试自动化以进行整夜运行,然后在早上检查结果?

重复。只需开始进行操作并获取结果,然后微调测试以及如何随着时间的推移对其进行解释。保持简单,并专注于似乎有用的领域。不要大张旗鼓地发声,保持安静,直到您对过程充满信心,然后开始使构建失败并告诉人们-最初,您可能会得到很多错误的负面评价。

显示您的结果做这个。很多。 CI就是要尽早失败,因此,如果您将其作为最终目标,那么实现它的最佳方法就是尽早且经常进行测试,但是这样做的问题是您有被数据埋藏的风险。因此,一种有效的数据整理方法和呈现相关信息的方法将大有帮助。

您无法将整个过程自动化到红旗绿旗-但您应尝试尽可能走远。

最后,领队Perf给了a very good talk。 Google的测试人员,涵盖了该主题。现在有点老了,但原则仍然存在。另外,在几周后,我将转到meetup,英国媒体公司Channel4将在此讨论他们如何实现这一目标-也许您可以索要一些幻灯片。


2
投票

>您无法在CI中运行满负荷(或浸泡或容量)测试,这不切实际。

[本周在美国TISQA conference之后,我更倾向于说我们应该自信地通过CI自动化使越来越多的完整,复杂的负载测试自动化。

您甚至可以考虑在较大的负载测试实验室中运行一个单独的CI实例,并为其配置更实际的基础架构以支持有意义的测试结果。负载测试过程本身与单独的软件开发过程(设计,构造,部署,执行,分析,重复)并无不同。现在,每个性能工具中的大多数都支持与CI解决方案更优雅,更强大的集成,包括SOASTA,LoadRunner / PC,JMeter,Neoyty,Blazemeter,Flood.io。

但是这里需要注意三件事-与奥利弗的评论类似:-性能结果还有很多细微差别...不仅是通过或失败-不要忘记脚本维护以与应用程序更改保持同步-您的负载测试实验室与生产的同步/扩展也可能是自动化的

[如果您愿意,请阅读我自己的TISQA演示文稿here中的一些幻灯片。这可能是如何在整个生命周期中使用CI + Performance的开始。例如,为什么没有一个CI实例仅在PROD中进行更改时“监视配置”并将这些更改同步回负载测试环境?


1
投票

JMeter和Selenium都不是用于CI的工具。 JMeter是性能测试工具,Selenium是用于自动化功能测试的工具。因此,要将性能测试集成到构建过程中,可以将JMeter与以下任何CI服务器一起使用:Jenkins,Bamdoo等。

[AFAIK,现在有两种将JMeter与Jenkins结合使用的常见解决方案:

  1. 将Jenkins / Hudson与JMeter插件一起使用,可以在完成构建过程后开始性能测试任务。在这种情况下,需要配置适当数量的Load Generator,并在其上配置了JMeter。

  2. 另一种方法-使用JMeter testing cloud。该服务提供Jenkins plugin,可在构建应用程序后启动远程测试。在这种情况下,您无需关心配置测试服务器。

P.S。在为Blazemeter工作时,我想提供客观的信息。希望对您有所帮助。


0
投票

您问的问题-硒是否可以选择?

如果从CI使用计算机的内部网格或公共云运行,则应考虑使用Selenium WebDriver和Headless浏览器驱动程序进行性能测试。

在小型Amazon VM(ami)上,使用这种方法模拟了大约25个虚拟用户。因此,如果您的需求约为500 VU,那么我将对此进行调查,因为其好处包括:-

不再需要URL重写等“关联”,因为无头浏览器会自动处理此问题。

您的功能测试被重新指定为性能测试,因此一个工具可以成为专家,并且无需重新设计就可以重新使用。


0
投票

您不是唯一考虑将性能测试与持续集成相结合的人。通常,很多功能都将非功能性测试忽略或留给软件交付过程的最后阶段。我可以看到态度上的积极变化,并且对自动验证CI / CD中的非功能性需求越来越感兴趣。这在不同程度上包括性能,可访问性和安全性。您已经提到使用Selenium进行性能测试。我知道有些人(试图这样做),甚至看到这种尝试之一是多么的不成功。我完全理解为什么人们会考虑这样做,尽管我建议您不要这样做。除非您有充分的理由相反。总的来说,实现这一目标比想象的要难。 Selenium是包含在CI中以进行GUI测试的好工具,但是将其包含在性能测试中有些麻烦。

现在有一个新工具,可以帮助您将JMeter与您选择的CI服务器集成,并具有TeamCity和Jenkins的一些专用功能:

https://github.com/automatictester/lightning

欢迎提供功能要求。


0
投票

如果性能是应用程序的重要组成部分,并且您从一开始就一直关心(或想要关心),那么我希望将其作为集成和部署管道的一部分-是的。

。NET世界(及以后)中有很多工具可以帮助您提供这种体验,并在您喜欢的CI / CD软件中进行无缝设置,例如:

  • k6.iohttps://k6.io/-先前称为LoadImpact)-允许您在环境外部执行性能检查,并将结果报告给管道。易于配置和集成,非常适合涉及更多“聪明”的测试场景,例如压力测试,负载测试等。
  • sitespeed.iohttps://www.sitespeed.io/)-我的第二个最爱,非常有趣并且易于配置,可以用来跟踪FE性能和测试(例如,使用Selenium完成)]
  • 蝗虫https://locust.io/)-用于在您自己的环境中进行负载测试。带有ARM模板的大型仓库,可在Azure上创建自己的服务器“场”:https://github.com/ORBA/azure-locust
  • dynatracehttps://www.dynatrace.com/)-完全合格的APM =具有大量功能和可能性的应用程序性能监视/管理工具
  • Roslyn Analyser(FxCopAnalyzers),StyleCopAnalyzers,EditorConfig以及其他甚至在将代码推送到构建和部署管道之前,也可以检测代码中常见(与性能相关!)问题的方法
  • 灯塔报告-也可以作为指向最常见问题的“指针”执行,并作为PR注释包含在其中,例如或过程中的通知(有很多Github Action或DevOps软件包在执行此操作)

所以,是的-以上所有内容以及更多内容都可以作为您的管道中的步骤放置。在我们的设置中,我们目前在过渡和UAT环境之间进行审核,整个阶段包括:静态代码分析,性能测试(FE&BE),安全扫描和渗透测试(OWASP ZAP)等。如果测试与我们的阈值或期望不符-我们显然不想引入不必要的降级-我们会停在这里,然后在到达UAT和生产之前返回重构并解决问题。希望它能对您甚至其他人有所帮助。


[我还在最近的演讲中收集了一些发现(下面的幻灯片),并将其转换为围绕该主题的一系列博客,其中第一个已经发布:

  1. 我关于“现代Web性能测试”的演讲的幻灯片:https://slides.com/zajkowskimarcin/modern-web-performance-testing/
  2. 该系列中有关同一主题的第一篇博客:https://wearecogworks.com/blog/the-importance-of-modern-web-performance-testing-part-1
© www.soinside.com 2019 - 2024. All rights reserved.