软件开发过程需要广泛的持续测试,主要是敏捷测试,以帮助确保高效、可预测的性能。 但是,敏捷测试在多用户系统中的最终用户体验方面存在局限性。 一旦软件项目接近完成,公司必须转向另一种类型的测试,称为负载测试,以确定应用程序在各种工作负载和流量级别下在现实世界中的性能。
什么是负载测试?
负载测试是用于软件、网站、应用程序和相关系统的性能测试的子集。 它是一种模拟多个用户同时访问系统的行为的非功能性测试。 也称为“批量测试”,负载测试在实时条件下复制 Web 系统的性能、稳定性和功能,这就是为什么它是部署前实施的最终和最关键的测试类型之一。
负载测试确定了 Web 系统的几个关键方面,包括以下内容:
- 应用程序的总运行能力,包括可以支持的并发用户数
- 应用程序响应峰值用户负载的能力
- 应用程序基础架构的稳定性
- 不同用户负载水平下应用程序的响应时间、吞吐率和资源需求
负载测试是启动任何客户端/服务器 Internet 和 Intranet 应用程序之前使用的关键过程。 它适用于前端软件(例如网站)和后端系统(例如托管站点的服务器)。
为什么我们需要负载测试?
功能测试在软件开发中发挥着重要作用,但它们在预测不同级别的用户参与下的性能方面存在局限性。 负载测试可以识别其他测试无法识别的关键性能问题,从而使公司能够在启动软件或实施升级之前解决这些问题。
公司需要执行负载测试有三个核心原因:
- 评估软件的功能
- 创造收入、提供服务并保护公司声誉
- 确保愉快、有效的用户体验
负载测试对于识别瓶颈、衡量站点操作的响应时间和提高未来性能是必要的。 当然,这些目标都可以通过响应现场网站的行为来实现,但只能以强烈的消费者中断为代价。
请注意,虽然负载测试软件通常与基于 Internet 的应用程序相关联,但它也用于测试硬件。
负载测试的好处
提供 Internet 或 Intranet 应用程序的企业将从负载测试中获得巨大收益。 执行负载测试的一些最佳理由包括:
1. 防止停机和应用程序故障
使用负载测试有助于优化系统的正常和峰值负载时间,并识别由于意外压力导致的潜在停机时间。
此外,Web 负载测试有助于为增长期或异常高使用率做好准备,例如电子商务销售或新产品发布。
2. 监控绩效标准
负载测试提供公司用来评估应用程序代码和基础设施更改的性能数据。
组织可以通过分析平均和高峰时段的流量来制定绩效目标。
3. 降低成本
网络停机平均每分钟将花费公司 5,600 美元(每小时 300,000 美元)。 此外,经常遇到非功能性应用程序的用户越来越有可能永远不会回来。
负载测试成本始终低于停机时间过长、站点无法访问以及与客户不满意相关的更广泛损失的潜在费用。
4. 提高效率
负载测试可识别系统瓶颈,一旦消除这些瓶颈,系统就会以最高效率运行。 消除瓶颈不仅可以实现卓越的操作性能,而且还提高了系统的可扩展性。
高效、快速加载的页面可提高用户满意度并提高网站的搜索排名。
5. 服务水平协议合规性
负载测试允许组织测量性能质量,用于开发为用户提供有保证的基线的SLA (服务水平协议)的数据。 这些数据还有助于将绩效与内部基准和竞争对手的绩效进行比较。
6.容量规划
负载测试提供了对容量规划至关重要的信息。 如果应用程序对测试的响应良好,则组织可以相应地计划扩展和高峰时间。 如果应用程序记录了可接受参数之外的指标——如果它“失败”了负载测试——数据作为压力测试仍然是有益的。
(您将在本指南后面部分找到有关负载测试和压力测试之间区别的更多信息。)
负载测试的挑战和局限性
负载测试提供了相当大的好处,这反映在它在多个行业和系统中的广泛采用。 但是,与任何应用程序一样,也存在缺点和挑战。
挑战 1:无形性
负载测试不一定是最明显的工具,因为它的核心优势之一是在潜在问题发生之前识别它们。 与站点停机时间和应用程序故障相关的许多负面影响(财务和其他方面)根本不会成为现实。
专注于“假设”场景的测试类型往往会被忽视。 虽然负载测试可以帮助分析用户过载后的情况,但它作为一种预防工具对组织来说更有益。
挑战 2:复杂性
开源和内部负载测试工具在技术层面上都有很高的进入门槛。 根据组织的规模和复杂性,他们可能没有员工或资源专门用于负载测试。
这个问题的一个例外是专业的负载测试平台,例如ZAPTEST 负载测试,它将专注于提供清晰、用户友好的界面。 ZAPTEST LOAD 提供了创建记录和基于 API 的脚本的能力,这些脚本执行最终用户业务流程并测量整个负载系统 (SUL) 中的端到端事务。
负载测试的类型
有几种不同类型的负载测试可供使用,允许组织根据预算、项目复杂性、员工的技术专长和其他因素来定制他们的测试策略。
1. 手动负载测试
手动负载测试是在没有自动负载测试工具的情况下评估系统,这意味着模拟用户是手动创建的。
手动负载测试提供的好处很少(如果有的话)。 除了后勤方面的困难外,测试结果通常不可靠并且几乎不可能复制。 除非组织对手动测试有特殊需求,否则其工作最好集中在自动化软件测试上。
2. 内部测试工具
因为负载测试是一个持续的过程,特别是在增长时期,许多组织选择创建自己的负载测试自动化工具。
定制工具从头开始设计,可与组织的特定应用程序配合使用,从而允许工具和系统之间轻松而完整的集成。 其他优势包括减少设置时间、维护需求、操作错误、培训时间等。
然而,存在一些缺点。 随着用户群的增长,内部工具可能无法轻松扩展。 此外,开发自定义工具需要初始投资时间和金钱,在此期间组织必须使用其他测试工具或根本不使用。
3.开源测试工具
存在许多开源测试工具。 作为开源程序,它们可以免费使用,提供强大的修改选项,并得到强大的社区支持。
流行的开源测试工具包括 Locust、k6 和 JMeter。 每个都允许您模拟大规模用户负载、记录测试脚本、查看性能报告等。
虽然大多数开源工具都可以“完成工作”,但它们可能存在缺陷,尤其是对于企业组织而言。 开源工具通常很复杂,缺乏商业负载测试自动化工具中的用户友好性。 此外,支持通常仅限于在紧急情况下使用有限的 wiki、论坛等。
4.企业级负载测试自动化工具
企业测试工具提供了各种功能,可以根据电子商务网站、服务平台和各种类型的专业组织的需求进行扩展。
使用企业负载测试服务的好处包括:
- 产生海量用户流量的能力
- 捕捉/回放设施
- 支持多种协议的能力
- 恢复丢失文件的能力
- 一键式测试文档输入
受欢迎的企业负载测试公司包括 ZAPTEST 及其技术行业合作伙伴 Gartner。 (那些熟悉自动化行业的人也可能会从他们在机器人过程自动化方面广受赞誉的工作中认出 ZAPTEST。)此外,ZAPTEST 的免费版提供免费的 LOAD 功能,允许用户使用最新功能和深入分析进行性能测试。
企业级负载测试自动化工具提供可靠、支持支持的解决方案,不需要像开源工具那样多的技术知识。 大多数企业负载测试服务在订阅模式下运行。
我们应该通过负载测试测试什么?
自动化负载测试工具生成用于准确回答几个重要问题的数据:
- 应用程序(网站、系统等)在正常时间有多少用户? 在高峰时段?
- 应用程序的哪些元素受用户数量的影响?
- 多少用户会导致网站下线?
- 系统何时会耗尽资源?
- 网站加载速度有多快?
通过运行非功能性模拟,组织可以获得有关速度、可靠性和扩展能力的数据。 测试上述各个方面可以创建更全面的图景,其中更容易识别瓶颈。
1. 基线表现
公司可以使用负载测试来测试应用程序的基线性能。 随着测试期间用户数量稳步增加,所创建的数据显示了平均连接速度、文件下载时间和延迟的基准性能。
2. 基准性能
网站负载测试还收集基准性能数据。 虽然“基线”和“基准”经常互换使用,但它们有本质的区别。 基准测试根据竞争站点或内部要求(例如最终用户 SLA)来衡量性能。
负载测试指标/目标
各个组织将根据其独特需求制定测试指标。 企业级自动化负载测试工具的一个显着优势是能够自定义跟踪的指标。
无论如何,大多数组织将通过自动负载测试跟踪以下指标:
1. 响应时间
响应时间是自动负载测试测量的主要指标。 用户发送请求后,系统需要多长时间响应? (超过10 秒的响应时间可能会导致用户离开。)
2. 吞吐量
吞吐量是发送和接收的数据量。 在负载测试中,它通常表示为每秒命中数 (hps) 或每秒事务数 (tps)。
3. 特定于硬件的指标
缓慢的响应时间可能预示着硬件限制,因此负载测试过程的一部分包括监控 CPU 使用率、可用 RAM、磁盘 I/O 和类似的基于硬件的功能。
4. 数据库
大多数企业级应用程序需要多个系统才能运行,但随着数据库数量的增加,出现瓶颈的机会也在增加。 负载测试软件测量数据库读取和写入以及打开的数据库连接的数量。
消除一些混乱
许多软件质量保证实践重叠和交织。 即使是具有专业经验的人也会对以下类型的软件测试服务感到困惑。
性能测试与负载测试
性能测试是用于衡量软件系统的稳定性、响应能力、资源需求和其他性能指标的所有实践的总称,尤其是与用户体验相关的指标。
负载测试是性能测试的一个子类别。 其他常见类型包括:
- 耐久性测试– 也称为浸泡测试,耐久性测试测量持续的、预期的用户负载。 耐力测试发现内存泄漏和响应时间延长。
- 尖峰测试– 尖峰测试模拟用户数量的突然、急剧增加或减少。
- 隔离测试– 重复导致系统问题的测试以帮助隔离原因。
性能测试是非功能测试,通常在开发周期快结束或开发完成后进行。
压力测试与负载测试
负载和压力测试在许多方面都相似。 重申一下,网站负载测试测量系统对预期流量的响应,例如正常或高峰流量。 您执行负载测试以衡量性能下降及其与历史预期负载期间的用户体验的关系。 简而言之,负载测试并非旨在破坏系统。
压力测试有不同的目的。 在压力测试期间,用户数量会一直增加至性能下降点,直至完全失败。 压力测试不仅测量系统的“断点”,而且还查看系统将进行哪种类型的自动恢复。
开发人员可以着手进行压力测试,但也可能在上层负载测试期间无意中发生。 在这两种类型的测试中,负载测试自动化工具都会将系统推到可用资源之外,从而提供大量有价值的数据。
功能测试与负载测试
功能测试和负载测试是性能测试的类型,虽然两者都是必要的,但它们各自用于不同的目的。
功能测试确定系统的特定方面是否满足预定要求。 它比负载测试更频繁地使用,具有明确定义的参数和步骤。 负载测试更加不可预测,结果可能与预期大相径庭。
此外,负载测试完全取决于用户负载,而功能测试则基于测试数据。
有效负载测试的特征
虽然企业负载测试是一个强大的工具,但如果企业想要最大限度地提高测试的有效性,他们应该遵循这些最佳实践。
1.使用现实场景
您的测试场景应尽可能与用户的真实行为相似。 仔细考虑用户行为。 他们为什么使用您的应用程序? 他们使用什么类型的设备来访问它?
在您的网站负载测试中包含一些不可预测的行为,因为真实用户会以您无法预料的方式行事。
2. 不从零开始
许多测试人员以零负载开始测试,并逐渐添加模拟用户。 虽然该方法有一些价值,但不要忘记在系统已经处于正常负载下时进行测试。 这样做有助于避免误报,并导致更准确的结果,因为您的系统在现实世界中很少(如果有的话)负载为零。
3. 使用真实数据
正如这些先前的实践所表明的,测试前获得的数据质量越高,测试结果就越有用。 转向以前通过您的监控工具获得的数据,以帮助开发现实场景。
需要考虑的两个有用的数据类别:
- 用户驱动数据:使用的设备和浏览器、采用的路径和下车点
- 系统数据:第一次再见时间,DOM 加载
4. 分析和重复
在负载测试之后,您的团队将想要识别瓶颈及其相应的代码。 将从测试结果中获得的信息转化为可改进的指标并不总是那么简单,尤其是使用开源软件,尽管企业负载测试自动化工具可以使过程更加简单和高效。
虽然负载测试在产品发布之前至关重要,但它不是“一劳永逸”的解决方案。 相反,负载测试应该成为组织敏捷和自动化实践的一部分。
谁参与了负载测试过程?
尽管负载测试是在开发接近尾声时进行的,但它需要许多不同团队的参与,包括在产品生命周期早期开始工作的团队。
1. 开发工程师
工程师将在开发过程中使用集成开发环境来测试流程,从而产生有助于在发布前建立负载测试参数的数据。
2. 其他测试人员
敏捷和功能测试人员为应用程序的特定组件提供了宝贵的洞察力。 此外,来自敏捷测试的数据有助于为负载测试中使用的基线指标提供信息。
3. 最终用户/利益相关者
他们的目标决定了他们在应用程序上的行为。 了解他们在系统中的动机有助于为测试场景提供信息。
负载测试过程
负载测试过程可能会变得相当复杂,尤其是在使用开源或内部测试软件时。 虽然企业级软件大大简化了测试,但了解如何进行负载测试的核心步骤有助于确保获得最佳结果。
尽管负载测试的具体细节因业务模型、硬件、用户群和其他个性化因素而异,但大多数测试都遵循以下基本结构:
1. 确定目标
明确的目标会带来更有用的结果。 确定要测试的最关键的应用程序功能。
2. 建立基线
如果您已经进行过之前的测试,请使用这些数据为即将进行的测试创建性能基准。 从基线的任何推导表明进一步调查。
3. 创建负载测试环境
测试环境应尽可能地反映真实世界的条件,因此您需要在类似的机器配置文件、网络架构、防火墙、数据库等上进行测试。
4. 开发负载场景
创建负载场景的最常见方法是将脚本与记录的用户活动结合起来。 每个场景都将包括测量、事务和验证点。
5. 运行测试
建立基线、加载场景并创建测试环境后,测试就可以执行了。 您可以同时运行多个场景,调整用户级别、位置、浏览器和其他因素。
6. 考后考试
完成的测试会返回大量数据,包括响应时间、加载时间、错误、服务器性能等。 大多数数据分析涉及重新运行场景以缩小问题范围并确定核心问题。
成功数据解释的关键是事先建立明确的目标并在分析过程中维护大量文档。
负载测试示例
负载测试用于许多场景,包括许多公司忽略的情况。 示例包括:
1. 网站
长时间下载大文件会测试基于 Web 的应用程序的功能。
2. 服务器
通过同时运行应用程序的多个实例或许多不同的应用程序来对服务器进行负载测试。
3. 硬盘
反复读写数据将考验系统中硬盘的极限。
4.邮件服务器
邮件服务器通过模拟用户活动进行负载测试。 大多数邮件服务器负载测试至少模拟 1,000 个用户。
5. 应用程序接口
API 负载测试在操作系统、软件库、编程语言、硬件等上执行。
6.打印机
打印机负载测试涉及向打印机队列发送越来越多的作业。 它很少是需要硬件操作的物理测试。
加载测试用例
负载测试使各种类型和规模的组织受益。 一些涉及负载测试实施的实际案例包括:
1. 促销活动
一家大型电子商务网站想要评估其网站在进行重大促销(例如黑色星期五促销)时的能力。 另一个例子是一家玩具公司将通过提供一种新的、备受期待的玩具来扩展其网站。
2. 公共门户网站
测试有助于大型门户网站为使用中的巨大变化做好准备,例如当 IRS 门户网站在税收季节看到流量增加时。 一个类似的例子是负载测试门户网站,以帮助大学在学期开始时为在线注册做准备。
3. 服务器测试
通过使服务器承受大量流量,企业组织可以确定其基础架构是否足以应对任何即将到来的扩展。 服务器测试也是维护运行良好的网站的重要组成部分。
4. 文件传输测试
负载测试可以测量文件与硬盘之间的传输速度,例如笔记本电脑与台式机或笔记本电脑与笔记本电脑之间的传输速度。 除其他用途外,它还可以帮助组织确定为员工购买哪些硬件。
如何编写负载测试用例
学习如何进行负载测试可能会让人望而生畏,即使对于经验丰富的软件专业人员来说也是如此,但它比许多人意识到的要简单得多。
创建指导文档是开发负载测试用例的第一阶段。 您的负载测试计划不需要很复杂,即使是要点列表也会有所帮助,但它应该从头到尾概述测试的基本组成部分。
确保负载测试计划包括以下要素:
一、目标与要求
你为什么要进行这个测试? 您正在测试哪些具体指标,哪些结果将决定关于生产的响应类型?
2. 边界
描述系统或浏览器负载测试的范围。 您是在进行组件测试还是端到端测试? 您正在测试什么流量负载(峰值、正常或其他)?
范围可能会在测试期间发生变化,尤其是在您遇到意外事件时。 但是,您仍然希望最初定义清晰的测试边界。
3. 工作量
您需要详细说明负载配置文件,其中包括以下内容:
- 关键交易
- 每个事务的负载分配
- 交易时间
开发负载配置文件/工作负载模型可以说是负载测试中最重要的元素,因为它决定了您的测试在真实用户的重压下与系统行为的接近程度。 不要忘记实施浏览器负载测试,因为您不知道访问者会使用什么浏览器。
4. 服务器健康
描述您在测试期间监控服务器的计划。 您需要监视应用程序服务器和用于运行负载测试的服务器(尽管在使用企业负载测试工具时后者通常不是主要问题)。
5. 测试场景
最后,您需要描述您的测试场景,这是您实施一系列测试用例的总体计划。
6.负载测试用例示例
企业级使用的一些一般案例示例包括:
- API 负载测试以确定付款是否在两分钟内通过第三方系统处理。
- 浏览器负载测试,以确定用户是否会遇到超过 10 秒的加载速度差异,具体取决于他们的浏览器。
- 在流量高峰期间使用新网站功能的组件测试。
请注意上述场景如何明确定义目标、边界和指标。
负载测试工具
企业组织有时会开发内部负载测试工具,但这是一个需要时间和投资的过程,使其更像是一项长期战略。 在开发定制工具的同时,组织必须转向免费或企业自动化负载测试工具。
鼓励组织谨慎选择他们的负载测试工具,即使他们计划只是暂时使用它们。 企业或开源网站负载测试工具提供所有必要的解决方案的情况并不少见,因此无需开发内部版本。
1. 免费负载测试工具
许多组织首先考虑开源测试工具。 不乏选择,包括以下内容:
- JMeter – 基于企业工具 LoadRunner 的 Java 应用程序。
- Taurus – 一个允许您编写自己的负载测试的工具。
- k6 – 一种负载测试工具,专注于面向经验丰富的开发人员的后端基础架构。
- SoapUI – SoapUI 负载测试使用简单对象访问协议。 此应用程序的商业版本也可用。
- Locust – 一种负载测试工具,以其相对的用户友好性和稀疏的资源需求而闻名。
- ZAPTEST 免费版通过 LOAD Studio 提供免费的性能测试,用户可以在其中使用录制的和基于 API 的脚本,甚至与功能测试相关联
尽管开源测试工具没有直接的金钱成本,但选择一种工具对于任何企业来说仍然是一项重大承诺,因此了解其好处和潜在缺点非常重要。
免费负载测试工具的好处
免费负载测试工具有几个显着的优势。
1. 低成本
开源软件的最大优势是它是免费的。 公司,尤其是资源有限的新公司,可以在没有财务承诺的情况下运行负载测试。
2. 灵活性
社区经常审查、更新和改进开源软件。 如果您有特定的测试需求,则可能存在附加组件。
3. 更快的升级
开源软件通常比商业软件发展得更快。 错误修复、安全更新、新功能等通常以更稳定和更快的速度出现。
免费负载测试工具的局限性
虽然免费负载测试工具具有显着优势,但公司应注意潜在的缺点。
1. 缺乏支持
如果用户在使用开源负载测试软件时遇到任何问题,他们将不得不使用基于社区的资源(如论坛和 wiki)自己找到答案。 与企业软件不同,免费工具没有专门的支持团队来打电话或发电子邮件。
2. 复杂性
用户友好的操作并不总是开源负载测试软件的高优先级。 许多应用程序假定用户具有相当复杂的开发知识。 学习如何使用开源软件进行负载测试通常很困难。
3. 用户负载限制
开源测试软件在运行大容量负载测试时经常会遇到内存和 CPU 问题。 企业级公司可能会发现免费负载测试根本不足以满足他们的需求。
企业负载测试工具
企业测试工具是为大型复杂组织的需求而设计的付费产品。 它们通常是基于订阅的,价格与模拟用户数量和其他测试细节相对应。
许多企业负载测试公司可供选择,但领先的企业是 ZAPTEST,超自动化领域的行业领导者, ZAPTEST因其用户友好的软件和无限的支持访问而被称为最好的负载测试工具之一。
企业负载测试公司提供的质量和功能可能会有很大差异,因此鼓励组织在订阅之前仔细考虑每个提供商。
企业测试工具的好处
虽然具体功能和操作简便性会根据特定产品而变化,但最好的负载测试工具具有以下优点。
1. 易用性
开源软件可能有混乱的用户界面、复杂的流程以及对用户的普遍冷漠。 然而,企业工具强调直观、直接的体验。
2. 客户支持
企业测试的一个主要好处是可以获得训练有素的支持。 不仅在负载测试方面,而且在您拥有的负载测试仪的细节方面受过培训的专家,随时准备帮助解决任何问题。 企业服务将为您提供 24/7 全天候支持。
3. 可靠性
企业测试工具旨在支持具有大规模运营的公司,其中任何停机都可能导致收入和客户满意度的重大损失。 这些工具旨在提供适用于长期规划和决策的可操作、准确的数据。
企业测试工具的局限性
虽然企业测试工具提供了优于其他类型的多种优势,但它们也包含一些潜在的限制。
1.成本
最大的缺点是成本。 企业负载测试以订阅模式运行,成本根据测试期间生成的虚拟用户数量进行调整。
最终,消除瓶颈并防止应用程序停机使负载测试随着时间的推移成为更具成本效益的选择,但组织仍然可能产生大量的前期成本。 相比之下,ZAPTEST 等成熟的负载测试套件提供一个固定成本的软件+服务订阅,具有无限的使用和许可证……这种模式降低了随着公司规模扩大而不断增长的测试成本。
2. 学习曲线
虽然企业工具是迄今为止可用于负载测试的最用户友好的选项,但即使是最好的负载测试工具也至少有一些学习曲线。 团队成员,最好是那些有编码经验的人,需要花时间学习如何最大限度地利用工具。 再一次,像 ZAPTEST 这样的领先负载测试工具通过提供不需要编码技能并且可以由组织内的大多数人使用的低代码平台来缓解这个缺点,而不仅仅是开发人员。
什么时候应该使用企业和免费负载测试工具?
免费负载测试工具在许多组织中占有一席之地。 它们是最具成本效益的选择,使它们在初创企业和其他资源有限的企业中很受欢迎。
免费工具也是提高个人技能的有效方式。 例如,测试人员可能会进行 SoapUI 负载测试,不仅是为了测试系统,而且是为了提高他们对开源工具的理解。
对于大多数商业应用和大型组织来说,最好的负载测试工具是企业级产品,例如 ZAPTEST 和类似的行业领导者。 它们提供可靠性、准确性和安全性,保护您的公司和最终用户。 此外,它们比免费工具更容易使用,并提供无与伦比的功能水平。
负载测试清单
成功进行负载测试的一个重要关键是组织。 许多企业发现使用清单进行测试有助于团队继续完成任务。 以下清单可以很好地作为企业级组织的起点。
1.网络服务器
- 您是否有足够的带宽来防止出现瓶颈?
- 系统每秒可以处理足够的事务吗?
- 您是否有足够的 Web 服务器来管理繁忙和空闲的威胁?
2.主机
- 网络接口是否存在 CPU、内存或磁盘空间问题?
- 主机上运行哪些进程?
3.应用服务器
- 每个负载级别所需的 CPU 使用率是多少?
- 系统是否在各种负载级别泄漏内存?
- 应用程序服务器是否正确分配负载?
虽然您需要修改清单以适应您组织的特定需求,但这些基本元素将有助于确保您涵盖系统性能和操作的关键方面。
结论
负载测试在任何软件开发项目的成功中都起着至关重要的作用。 为了真正利用负载测试自动化工具的能力,组织应与ZAPTEST等企业级负载测试公司建立合作伙伴关系。
负载测试工具使您的组织能够识别潜在的服务中断和瓶颈,从而最大限度地提高效率、减少停机时间、增加收入并改善用户体验。