负载测试类型

系统在使用过程中可能会出现许多问题。在平常的日子里,系统必须同时运行大量操作并响应来自不同用户的不同请求,但也可能会出现用户突然激增或重大事件,从而将系统推向极限——甚至超出极限。为了应对这些性能风险,团队会使用负载测试来了解应用程序或系统在各种用例下的表现。

但是,一个好的负载测试策略不仅仅是执行单个脚本。不同的流量模式会给应用程序带来不同的风险特征。为了进行全面的准备,团队必须针对不同类型的负载测试对系统进行测试。

Diagram showing the different load testing types and load volumes and durations for each test.

在这里,我们将回顾最常见的负载测试类型以及每种负载测试类型的用例。

负载测试属于哪种测试类型?

负载测试是性能测试的一个子集,通常用于查看系统如何响应正常和峰值使用情况。您需要查找响应时间慢、错误、崩溃和其他问题,以确定系统在性能下降之前可以容纳多少用户和事务。

如今的测试人员通常依赖 开源负载测试工具或专业的云自动化工具(例如Grafana Cloud k6)来通过虚拟用户和模拟数据量测试系统,以了解额外负载对性能的影响。他们监控和测量响应时间、吞吐量和资源利用率,以检测需要在系统部署到生产环境之前解决的潜在瓶颈或扩展问题。

当您拥有快速的软件开发和交付流程时,工程团队需要一个强大可靠的测试套件,以跟上持续开发和部署的步伐。这样的测试平台有助于团队确保每次发布的质量。为了使测试可靠,团队应在各种环境中执行不同类型的负载测试,包括开发、金丝雀、QA、预生产和生产。团队还应在持续交付流水线中自动化测试,以防止迭代地向最终用户交付新功能或实验时出现错误。

尽管自动化和频率因负载测试类型而异,但持续自动化负载测试现已成为标准实践,也是大多数负载测试类型的最终目标。

负载测试与性能测试  

负载测试和性能测试虽然相关,但它们是不同的测试类型。

正如我们所讨论的,负载测试模拟用户活动,以确定系统处理增加的流量或负载的能力。

性能测试是一个总称,用于衡量系统或应用程序的整体性能。这可能包括测试速度、可伸缩性、可靠性和资源利用率,以确定需要改进的领域。性能测试包括负载测试,但也包含其他类型的测试,例如浏览器性能测试和合成监控。

负载测试有多少种类型? 

应用程序在任何给定时刻处理的流量大小和持续时间不同,其性能也不同。您不应假设应用程序在支持 10 或 100 个用户与支持 1,000 或 5,000 个或更多用户时表现相同。

您可以对应用程序执行六种常见的负载测试类型,以测量在不同负载下的性能。

1. 冒烟测试

冒烟测试验证系统在最小负载下是否正常运行,并用于收集基线性能值。冒烟测试也称为抖动测试(shakeout tests)。

这种测试类型包括使用少量 VU 运行测试。例如,超过 5 个虚拟用户 (VU) 可被视为迷你负载测试。同样,测试应在短时间内执行,迭代次数少或持续时间从几秒到最多几分钟。迭代次数持续时间从几秒到最多几分钟。

2. 平均负载测试

平均负载测试评估系统在您的系统或应用程序的典型负载下的性能。典型负载可能是生产环境中的常规一天或日常流量的平均时间范围。这种测试也可能被称为日常负载测试或容量测试。

平均负载测试模拟生产环境中反映平均行为的并发用户数和每秒请求数。这种类型的测试通常会逐渐增加吞吐量或 VU,并维持该平均负载一段时间。根据系统的特性,测试可能会突然停止或有一个短暂的下降期。

3. 压力测试

压力测试帮助您发现系统在流量高峰期负载下的功能表现。压力测试也可能被称为高峰期测试、激增测试或规模测试。请参阅“负载测试中的压力测试是什么?”部分了解更多信息。

4. 尖峰测试

尖峰测试验证系统是否能在突然的大规模利用率激增下存活并正常运行。尖峰测试验证系统是否能在突然的大规模利用率激增下存活并正常运行。

当系统可能会遇到流量异常巨大的事件时,尖峰测试非常有用。此类事件的示例包括门票销售(泰勒·斯威夫特)、产品发布(PS5)、广播广告(超级碗)、流程截止日期(纳税申报)和季节性销售(黑色星期五)。此外,流量尖峰也可能是由更频繁的事件(例如高峰期)引起的。

尖峰测试会在非常短或不存在的爬升时间内增加到极高的负载。同样,下降也非常快或不存在,让过程只迭代一次。

这种测试可能包含与之前的测试类型不同的过程,因为尖峰通常不是生产环境正常一天的一部分。它可能还需要在测试脚本中添加、删除或修改通常不包含在您的平均负载测试中的过程。

5. 断点测试

断点测试发现系统的极限。断点测试也称为容量测试、点负载测试和极限测试。

您可能想要进行断点测试的原因包括

  • 调整或关注系统的薄弱点,以便在更高层次上重新分配更高的限制。
  • 帮助规划这些情况下的补救措施,并为系统接近这些限制时做好准备。

这不仅仅是了解系统将在何时失败。它也是一项测试,有助于确定系统从何处以及如何开始失败,并帮助团队为这些限制做好准备。

断点测试会达到不切实际的高数值。当阈值开始失败时,这种测试通常必须手动或自动停止。当这些问题出现时,系统就达到了它的极限。

6. 浸泡测试

浸泡测试是平均负载测试的一种变体。主要区别在于测试持续时间。在浸泡测试中,峰值负载通常是平均负载,但峰值负载持续时间会延长数小时甚至数天。尽管持续时间明显更长,但浸泡测试的爬升和下降阶段与平均负载测试相同。

浸泡测试也可能被称为耐久测试、恒定高负载测试或耐力测试。

浸泡测试重点分析以下内容

  • 系统在长时间内性能和资源消耗的退化情况。
  • 系统在长时间内的可用性和稳定性。

下表提供了六种主要负载测试类型的一些概括性比较

类型VU/吞吐量持续时间何时进行?
冒烟短(秒或分钟)当相关的系统或应用程序代码发生变化时。它检查功能逻辑、基线指标和偏差
平均负载生产环境平均水平中等(5-60 分钟)通常用于检查系统在平均使用情况下是否保持性能
压力高(高于平均水平)中等(5-60 分钟)当系统可能接收高于平均水平的负载时,检查其管理能力
浸泡平均长(小时)变更后检查系统在长时间连续使用下的情况
尖峰非常高短(几分钟)当系统为季节性事件做准备或频繁接收流量高峰时
断点增加直到中断需要多久就多久进行几次以找到系统的上限

负载测试的总体目标决定了您可能需要的负载测试类型。您选择的测试类型将决定如何计划、构建和执行负载测试。但每个应用程序、组织和测试项目都不同。

我们对负载测试的建议始终是**从简单开始并频繁测试**。例如,从冒烟测试开始,然后逐步增加负载和持续时间。您始终可以迭代和扩展您的测试套件,在逐渐将负载测试纳入工作流程时添加更多负载测试类型。

负载测试中的压力测试是什么? 

压力测试是一种流行的负载测试类型,用于评估系统在工作负载高于平常时如何表现。

Diagram showing how a stress test works

压力测试验证系统在高于正常使用情况下的稳定性和可靠性。系统可能会接收到高于平常的工作负载,例如流程截止日期、发薪日、高峰期、工作周结束以及许多其他可能导致频繁高于平均流量的场合。

运行压力测试时,请考虑以下最佳实践、技巧和窍门

  • 负载应高于系统平均承受的负载

一些测试人员可能对压力测试有默认目标——例如在平均负载基础上增加 50% 或 100%——但没有固定百分比。

压力测试中模拟的负载取决于系统可能面临的情况类型。有时可能只比平均水平高出几个百分点。其他时候,可能像前面提到的那样,高出 50% 到 100%。有些压力情况可能比平均负载高出两倍、三倍甚至几个数量级。

无论如何,您都应根据系统可能接收到的风险负载模式来定义压力测试中的负载。

  • 仅在运行平均负载测试后运行压力测试

在尝试更具挑战性的测试之前,先在平均负载测试下识别性能问题。这个顺序至关重要。

  • 重复使用平均负载测试脚本

修改参数以获得更高的负载或 VU。

  • 与平均负载相比,预期性能会更差

此测试确定性能随额外负载下降多少以及系统是否能承受。性能良好的系统在处理持续的工作负载较长时间时应以一致的响应时间响应。

负载测试类型:最佳实践

在编写和运行不同负载测试类型时,请考虑以下最佳实践。

1. 从冒烟测试开始

冒烟测试开始。在开始大型测试之前,验证您的负载测试脚本按预期工作,并且您的系统在少量用户下表现良好。

在您知道脚本工作正常且系统对最小负载做出正确响应后,您可以继续进行平均负载测试。从那里,您可以逐步进行更复杂的负载模式。

2. 具体情况取决于您的用例

系统具有不同的架构和不同的用户群。因此,正确的负载测试策略高度依赖于您组织的风险特征。避免绝对化思维。

例如,开源工具 Grafana k6 可以通过 VU 数量或每秒迭代次数来模拟负载(开环 vs 闭环)。在设计测试时,考虑哪种模式适合您的类型。

此外,没有单一测试类型可以消除所有风险。要评估系统的不同故障模式,请结合使用多种测试类型。您系统的风险特征决定了重点关注哪些测试类型

  • 有些系统长时间使用风险较高,在这种情况下应优先进行浸泡测试。
  • 其他系统则面临密集使用风险,在这种情况下应优先进行压力测试。

无论何种情况,任何单一测试都无法发现所有问题。

此外,这些类别本身是相对于用例而言的。对于某个应用程序来说,压力测试可能被认为是平均负载测试。实际上,正如您所见,即使对于各种负载测试类型的具体名称也没有达成共识。

3. 力求简单的设计和可重现的结果

尽管具体情况很大程度上取决于上下文,但不变的是您希望获得可比较和解释的结果。

坚持简单的负载模式。对于所有测试类型,方向都是相同的:爬升、平稳、下降。

避免负载多次增加和减少的“过山车”系列。这些会浪费资源,并且难以隔离问题。

负载测试为何重要

在系统上部署全面的各类负载测试套件,最终可帮助您提供出色的用户体验。

当您应用负载测试时,您正在确保用户体验是

  • 快速。精明的客户期望您的网站快速——无论是在普通的日子还是在重大活动期间——如果他们遇到性能缓慢的页面,他们可能会转向竞争对手。
  • 无错误。如果用户遇到故障或错误,他们可能会在社交媒体和客户评论网站等公共论坛上发布他们的负面体验。
  • 积极。许多因素可能导致负面的用户体验——缓慢、错误等。负载测试帮助您确保用户在使用您的应用程序时获得积极的体验。

用户期望他们访问的每个网站和应用程序都能提供出色的体验。一流的用户体验对您的业务成功至关重要——利用不同类型的负载测试可以确保您在任何情况下都能提供优质体验。

更简单的入门方式

Grafana Cloud 是开始使用指标、日志、追踪和仪表盘的最简单方式。我们提供慷慨的永久免费层级和适用于各种用例的计划。