本文为英文资料翻译中文,来自Grafana的官网[1],供学习了解,感兴趣的可以阅读原文
负载测试曾经是指定 QA 团队的严格职责——开发人员编写代码,然后将其交给 QA,以查看其在压力下的表现。但如今这种情况很少见,因为在更快、更迭代的软件开发周期中,开发和运营变得越来越一致。
因此,您可能会在团队中听到更多关于负载测试的讨论,但您知道负载测试包含哪些内容以及它如何使您的组织受益吗?在这里,我们将帮助您了解负载测试并解释为什么它是软件生命周期的重要组成部分。
什么是负载测试?
负载测试是一种软件测试,它会在系统(应用程序、API 或网站)上放置模拟工作负载,以查看其性能。它可以帮助组织确保其系统能够处理预期的工作负载,同时保持稳定、高质量的用户体验。团队还会执行负载测试,以应对可能导致系统速度变慢、崩溃或产生其他类型错误的流量高峰。
负载测试可能有多个目标,但通常您要查看系统如何响应正常和高峰使用情况。这包括它如何处理不断变化的用户数量、交易和数据量。然后,您可以将测试结果与应用程序和系统指标进行可视化和关联,以全面了解系统的性能。
负载测试的类型
负载测试是什么类型的测试?
负载测试是性能测试的一个子集,通常用于检查系统如何响应正常使用和峰值使用。您需要检查响应时间缓慢、错误、崩溃和其他问题,以确定系统在性能受到影响之前可以容纳多少用户和事务。
如今,测试人员通常依靠专门的基于云的自动化工具(如Grafana Cloud k6)来使用虚拟用户和模拟数据量测试系统,以了解额外负载如何影响性能。他们监控和测量响应时间、吞吐量和资源利用率,以检测在系统部署到生产环境之前需要解决的潜在瓶颈或扩展问题。
负载测试与性能测试
虽然负载测试和性能测试相关,但它们是不同类型的测试。
正如我们所讨论的,负载测试模拟用户活动来确定系统处理增加的流量或负载的能力。
性能测试是一个总称,用于衡量应用程序的整体性能。这可能包括测试速度、可扩展性、可靠性和资源利用率,以确定需要改进的领域。性能测试包括负载测试,但也包括其他类型的测试,例如浏览器性能测试和综合监控。
负载测试有多少种类型?
您可以在应用程序上执行多种不同的负载测试。请考虑以下测试类型,它们对应于不同的目标和负载配置文件:
- 烟雾测试:以最小负载验证系统功能。
- 平均负载测试:了解系统在典型流量下的运行情况。
- 压力测试:了解系统在高峰流量时的负载运行情况。
- 峰值测试:了解系统在流量突然大量增加的情况下如何运行。
- 断点测试:逐步增加流量以发现系统断点。
- 浸泡测试:发现系统在较长时间的负载下是否或何时会出现性能下降。
负载测试的总体目标决定了您可能需要的负载测试类型。您选择的测试类型将决定您如何规划和构建负载测试。但每个应用程序、组织和测试项目都有所不同。
我们对负载测试的建议是始终从简单开始并经常测试。您可以随时迭代和扩展测试套件。
负载测试中的压力测试是什么?
压力测试是一种常见的负载测试类型,用于评估系统在负载比平时更重时的表现。压力测试也可能被称为高峰时段测试、激增测试或规模测试。
压力测试可验证系统在高于正常使用量的情况下的稳定性和可靠性。系统可能会在异常时刻承受高于正常水平的工作负载,例如流程截止日、发薪日、高峰时段、工作周结束以及许多其他可能导致频繁高于平均水平的流量的场合。
负载测试工具
最好的负载测试工具是什么?
最好的负载测试工具是最适合您特定需求的工具。也就是说,选择始终是主观的。基础设施和应用程序需求可能千差万别,负载测试的重点将影响您的决定。
不过,在选择最佳负载测试工具时,你仍应该关注一些关键功能:
- 易于使用的 API 和 CLI
- 可以使用熟悉的脚本语言构建测试
- 自动化测试
- 高性能和可扩展性
- 支持多种数据存储
- 适用于其他类型测试的更广泛的功能
JMeter 是一个负载测试工具吗?
Apache JMeter 是最受欢迎的负载测试工具之一,已经流行了一段时间。该开源项目于 1998 年首次发布,完全由Apache 基金会用 Java 构建,并引起了人们的兴趣,因为它是当时流行的商业工具的免费替代品。
JMeter 负载测试
与Grafana k6一样,JMeter支持多种协议,并提供测试结果的详细摘要,帮助用户分析系统性能并确定后续步骤。
总体而言,JMeter 非常适合传统软件测试团队或喜欢 GUI 驱动测试工具的团队。虽然 JMeter 用户可以使用代码扩展测试脚本,但大多数脚本都是通过 GUI 完成的。相比之下,Grafana k6 等工具专为跨职能工程团队以及希望将负载测试集成到 DevOps 工作流或 CI/CD 管道中的团队而设计。
根据JMeter 网站,该 Java 应用程序最初是为测试 Web 应用程序而设计的,但后来扩展到其他类型的软件测试。它模拟不同类型的负载,以便您可以看到对系统性能的潜在影响。测试人员可以使用代码执行脚本,但 JMeter 中的大多数脚本都是在 UI 中完成的。
负载测试工具:开源
JMeter 可能已经证明开源可以与专有产品竞争,但它并不是唯一一家这样做的公司。以下按字母顺序列出了 10 种值得考虑的流行开源负载测试工具:
- ApacheBench
- Apache JMeter
- Artillery
- Gatling
- Grafana k6
- Locust
- Siege
- Taurus
- The Grinder
- Tsung
负载测试工具:免费与商业
开源工具是一种构建概念验证的出色且经济高效的方法。对于进行简单、不频繁测试的小型团队来说,它也非常有效。但是,为应对复杂的用户场景而频繁进行测试的团队应该考虑超越基础的强大解决方案。在一定规模下,管理流程所需的专业知识水平会变得太高。
以下按字母顺序列出了 10 个最受欢迎的付费负载测试解决方案:
- Akamai CloudTest
- BlazeMeter
- Grafana Cloud k6
- Headspin
- LoadRunner
- LoadNinja
- LoadView
- NeoLoad
- New Relic
- Radview WebLOAD
当然,这不一定是非此即彼的选择。许多组织使用开源和专有工具的组合来满足其负载测试需求。无论如何,在将任何工具嵌入到您的测试策略之前,请务必计算各种选项的总拥有成本。
API 的负载测试工具
对 API 进行负载测试的团队可以缩短加载时间并提高整体性能。他们还可以通过避免停机和提高运营效率来降低故障风险并帮助降低成本。许多工具在设计时都考虑到了 API 负载测试,其中包括 BlazeMeter、Grafana k6、JMeter、Postman 和 Taurus,仅举几例。
通常,API 负载测试从评估小型、独立的组件开始。随着每次相应的迭代,测试范围会不断扩大,直到获得更完整的端到端 API 工作流程视角,以及它与其他 API 的交互方式。
负载测试示例
负载测试的例子有哪些?
负载测试对任何应用程序都有好处,涵盖了广泛的用例,但以下是团队可能进行负载测试的一些常见应用程序示例:
- 电子商务网站。在此场景中,测试人员模拟用户浏览产品、将商品添加到购物车并完成购买。他们还考虑了不同类型的用户,例如新客户和回头客,以及不同类型的浏览行为,例如搜索特定产品或浏览类别。
- 银行应用程序。测试器模拟用户执行不同类型的交易,例如资金转账、余额查询和加载应用程序。它们包括不同类型的用户,例如个人和商业客户,以及不同类型的交易量。
- 医疗保健应用。虚拟用户(患者、医疗保健提供者等)可访问医疗记录、安排预约和请求处方。测试应解决不同类型的使用模式,例如高峰预约时间。
- 视频流媒体平台。在对视频流媒体平台进行负载测试时,团队会模拟大量用户观看视频、搜索内容以及与平台功能互动的情况。这可以考虑免费和付费订阅者以及不同的观看行为,包括在不同设备和不同分辨率下进行流媒体播放。
- 除了这些类型的网站和应用程序之外,团队还可能对其他系统组件进行负载测试,例如 API。
负载测试和压力测试示例
如前所述,负载测试是一种软件测试,它将模拟工作负载放在系统(应用程序、API 或网站)上,以查看其性能。压力测试是一种特定类型的负载测试,用于评估系统在工作负载比平时更重时的性能。
压力测试过程中的步骤通常与前面概述的负载测试步骤非常相似 - 它们只是涉及更高的负载量。
k6 负载测试示例
Grafana k6 是一款开源 (OSS) 负载测试工具。团队可以使用 k6 测试系统可靠性和性能,并更快地发现问题。Grafana Cloud k6 是 Grafana k6 的托管和完全管理版本。
k6 的最大优势之一是其基于代码的脚本以及迎合开发人员体验的事实。
k6 围绕四个主要支柱构建:
- 使用户能够编写脚本并配置他们的工作负载:虽然 k6 是用 Go 编写的,但 k6 用户使用 JavaScript 概述他们的工作负载,k6 使用其goja 解释器运行JavaScript。k6 还支持各种开源技术、工具和协议,并允许通过其扩展实现定制和灵活性。
- 规划和执行测试:用户通过可配置选项定义他们希望复制的特定执行场景。然后,k6 创建执行计划并根据用户的要求执行。
- 收集软件性能的测量数据,例如响应时间: k6 收集测量数据,然后将其分类并聚合为指标,例如响应时间。
- 将结果转发给用户:测试结束摘要为用户提供即时且可操作的见解。
如何进行在线负载测试
一般来说,网站负载测试的目的是模拟真实用户流量,以提高可靠性并防止潜在故障。测试团队可以从各种网站测试方法中进行选择,例如:
- 后端与前端性能测试
- 基于协议、基于浏览器或混合负载测试
- 组件测试与端到端测试
如何进行负载测试?
负载测试的目标是在给定情况下模拟系统上一定数量的用户活动 — — 无论是普通的一天,还是预期的活动高峰(即在线零售商的假日促销),或者您想了解可以将系统整体压力提升到何种程度。
根据要测试的系统或应用程序以及总体目标和要求,执行负载测试的具体过程可能会有所不同。但是,要进行简单的负载测试,您可能会使用负载测试工具(例如 Grafana k6 或 JMeter)来创建和运行测试脚本。然后,测试本身通常会遵循以下流程示例:
- 增加脚本的活动直到达到所需的模拟用户数量和吞吐量。
- 在规定的时间内维持该负荷。
- 根据测试用例,在设定的时间段后完全停止测试或让测试逐渐减少。
负载测试的步骤是什么?
虽然在负载测试过程中遵循的具体步骤可能有所不同,但测试人员通常会执行一系列步骤,包括以下示例中概述的步骤:
- 定义测试要求和范围:这需要选择要测试的特定特性、功能或用户旅程。无论测试哪个系统,团队都应该知道具体的用户数量和每个流程的典型吞吐量。
- 创建测试脚本:使用 Grafana k6 等负载测试工具,团队将构建一个自动执行负载测试的脚本。
- 运行脚本:脚本将持续运行,直到达到定义的用户数和吞吐量。然后,该负载将维持一段指定的时间,然后测试停止或逐渐减少。
- 分析测试结果:根据生成的测试结果,测试团队可以判断其系统的性能和资源消耗在满负荷期间是否保持稳定。在某些情况下,系统在此期间可能表现不佳或不稳定 - 这表明可能存在需要您识别和解决的潜在问题。另一方面,即使系统表现良好并承受了典型负载,团队也可能选择执行进一步的测试(例如压力测试),以评估其在高于平均水平的条件下的表现。
负载测试的好处
如果您的公司构建软件、API 或应用程序(或以上所有),则现代负载测试是必要的。
负载测试可以提高组织的整体绩效,因为团队可以:
- 快速行动并确保发布的质量。
- 正确评估新的或改变的基础设施。
- 预防或降低因软件或API问题导致的风险。
- 尽量减少失败的成本。
- 为高峰事件和需求高峰准备应用程序。
- 提供快速、可靠的卓越用户体验。
- 确保团队能够满足服务水平协议 (SLA)。
整个组织内的团队都应采用负载测试,因为测试过程中参与测试的人越多,产品就越可靠、性能就越高。当您的产品运行良好时,您的用户也会做出良好的反应,这对您的业务和整个组织都有好处。
参考文献
- https://grafana.com/load-testing/#what-is-load-testing