什么是负载测试?(示例)

什么是负载测试?
负载测试 是一种非功能性软件测试过程,其中在特定的预期负载下测试软件应用程序的性能。它确定软件应用程序在被多个用户同时访问时的行为方式。负载测试的目标是改善性能瓶颈并确保软件应用程序在部署之前的稳定性和平稳运行。
这种测试通常识别 –
- 应用程序的最大运行容量
- 确定当前基础架构是否足以运行该应用程序
- 针对峰值用户负载的应用可持续性
- 应用程序可以支持的并发用户数,以及允许更多用户访问的可扩展性。
它是一种非功能性测试。在软件工程中,负载测试通常用于客户端/服务器、基于 Web 的应用程序(包括 Intranet 和 Internet)。
为什么需要负载测试?
一些非常受欢迎的网站在获得大量流量时会遭遇严重的宕机。电子商务网站在广告活动上投入巨资,但当营销活动带来流量时,却不会进行负载测试以确保最佳系统性能。
负载测试示例
- Toysrus.com 无法应对其自身广告活动带来的流量,导致营销支出和预期销售额双双损失。
- 在节日期间,一家航空公司的网站无法处理 10000 多名用户。
- 大英百科全书将免费访问其在线数据库作为促销优惠。他们无法应对数周的流量冲击。
许多网站在遇到大流量时都会出现加载延迟的情况。一些事实——
- 页面加载时间超过约 3 秒后,放弃率会急剧上升,而且这种影响在移动连接上更为显著。
- 页面加载速度慢会导致电商网站每次访问都损失可观的收入,因此性能被视为一项业务指标,而非技术指标。
为什么要进行负载测试?
- 负载测试使人们对系统及其可靠性和性能充满信心。
- 负载测试有助于在生产环境中出现高用户压力情况下识别系统瓶颈,避免其发生。
- 负载测试可以很好地防止性能不佳,并适应生产环境性能管理和监控的补充策略。
负载测试的目标
在将应用程序推向市场或生产之前,加载测试可以识别以下问题:
- 每笔交易的响应时间
- 系统组件在不同负载下的性能
- 不同负载下数据库组件的性能
- 客户端与服务器之间的网络延迟
- 软件设计问题
- 服务器配置问题,如 Web 服务器、应用程序服务器、数据库服务器等。
- 硬件限制问题,如 CPU 最大化、内存限制、网络瓶颈等。
负载测试将确定系统是否需要微调或修改硬件和软件以提高性能。为了有效地进行负载测试,您可以利用各种 性能测试工具 可以帮助您确定需要改进的领域。
负载测试的前提条件
负载测试的主要指标是响应时间。在开始负载测试之前,您必须确定 –
- 是否已经测量并比较了响应时间 – 定量
- 响应时间是否适用于业务流程 – 相关
- 响应时间是否合理——现实
- 响应时间是否可以实现 – 可以实现
- 是否可以使用工具或秒表测量响应时间 – 可测量
负载测试前的环境设置
| 硬件平台 | 软件配置 |
|---|---|
|
|
负载测试策略
执行负载测试的方法有很多种。以下是一些负载测试策略:
- 手动负载测试:这是执行负载测试的策略之一,但它不会产生可重复的结果,无法提供应用程序可测量的压力水平,并且是一个无法协调的过程。
- 内部开发的负载测试工具:认识到负载测试重要性的组织可能会构建自己的工具来执行负载测试。
- 开源负载测试工具:有几种免费的开源负载测试工具。它们可能不如付费工具那么复杂,但如果您预算有限,它们就是最佳选择。
- 企业级负载测试工具:它们通常带有捕获/播放功能。它们支持大量协议。它们可以模拟大量用户。
如何进行负载测试
负载测试过程可简要描述如下 -
- 创建一个专门的 测试环境 用于负载测试
- 定义负载测试场景
- 确定应用程序的负载测试事务
- 为每笔交易准备数据
- 需要预测访问系统的用户数量
- 确定连接速度。有些用户可能通过专线连接,而其他用户可能使用拨号连接
- 确定用户使用的不同浏览器和操作系统
- 所有服务器(如 Web、应用程序和数据库服务器)的配置
- 测试场景执行和监控。收集各种指标
- 分析结果。提出建议
- 微调系统
- 重新测试
负载测试指南
- 一旦应用程序功能稳定,就应该计划进行负载测试。
- 数据池中应准备大量唯一数据
- 应根据每个场景或脚本确定用户数量
- 避免创建详细日志以节省磁盘 IO 空间
- 尽量避免下载网站内的图片
- 在执行负载测试用例的过程中,应记录经过一段时间内的响应时间的一致性,并将其与各种测试运行进行比较。
负载测试和压力测试之间的区别
| 负载测试 | 压力测试 |
|---|---|
| 负载测试识别各种工作负载下系统的瓶颈,并检查负载逐渐增加时系统如何反应 | 压力测试 确定系统的临界点,以揭示系统临界的最大点。 |
| 要了解系统的上限,请设置应用程序的 SLA 并检查系统如何处理重负载。 | 检查系统在极端负载下的行为以及如何从故障中恢复。 |
| 在 Web 应用程序上产生增加的负载是负载测试的主要目的。 | 压力测试旨在确保服务器在相当长的时间内突然承受高负载的情况下不会崩溃。 |
| 负载测试中检查的属性是峰值性能、服务器数量和响应时间。 | 这种测试检查稳定性响应时间等。 |
| 在负载测试中,负载极限是中断的阈值。 | 在压力测试中,负载限制高于中断的阈值。 |
功能测试和负载测试之间的区别
| 功能测试 | 负载测试 |
|---|---|
| 由于我们定义了适当的步骤和先决条件,因此功能测试的结果很容易预测 | 负载测试的结果不可预测 |
| 功能测试结果略有不同 | 负载测试结果差异很大 |
| 执行频率 功能测试 会很高 | 执行负载测试的频率较低 |
| 功能测试的结果取决于测试数据 | 负载测试取决于用户数量。 |
负载测试工具
加载程序
LoadRunner 最初是 HP 的产品,现在是 HP 的一部分。 OpenText 在Micro Focus收购之后,该测试平台会在正常负载和峰值负载下测试应用程序。它通过模拟真实网络流量的虚拟用户生成负载,并以图形方式报告结果。
阅读更多内容 LoadRunner教程.
Apache JMeter
开源 Java 该工具是目前使用最广泛的免费选项。它支持 HTTP、JDBC、JMS、FTP 等协议,将测试计划存储为 XML 格式,并集成到 CI 流水线中。请参阅 JMeter 教程 进行演示。
加特林
一个开源工具,其测试是用 Scala 或 Scala 代码编写的。 Java它在配置一般的硬件上能够处理高并发任务,并生成详细的 HTML 报告,这非常适合喜欢使用版本控制测试脚本的团队。
k6
一个开源工具,其测试是用以下语言编写的: Java该脚本旨在供开发人员在 CI 管道内进行性能测试,而不是作为单独的 QA 活动。
选择工具
Pick JMeter 如果想要获得最广泛的协议覆盖范围且无需任何费用,可以选择 Gatling 或 k6;如果团队希望将测试与应用程序一起保存在源代码控制中,则可以选择 LoadRunner 等商业工具;如果企业协议支持和供应商协助足以证明许可证的合理性,则可以选择 LoadRunner 等商业工具。
负载测试的优点和缺点
以下是负载测试的优点:
- 生产前识别性能瓶颈
- 提高系统的可扩展性
- 最大限度地降低与系统停机相关的风险
- 降低失败成本
- 提高客户满意度
负载测试的缺点:
- 大多数工具都需要编程知识才能编写出逼真的场景脚本。
- 工具可能很昂贵,因为定价取决于所支持的虚拟用户数量。
负载测试期间需要收集的关键指标
前提条件部分将响应时间确立为主要指标。但实际上,负载测试报告需要六位数的响应时间,因为仅凭响应时间无法判断系统速度变慢的原因。
| 米制 | 它告诉你什么 | 警告牌 |
|---|---|---|
| 平均响应时间 | 典型的用户体验 | 随着负荷增加而上升 |
| 第 95 百分位响应时间 | 最慢用户的体验 | 远高于平均水平 |
| 生产能力 | 每秒成功处理的请求数 | 负载上升时,车身或地面会压平或下沉 |
| 错误率 | 失败或超时请求的占比 | 任何超过约定阈值的涨幅 |
| 并发用户 | 实际同时进行的会话 | 低于预期情景 |
| 服务器资源使用情况 | CPU、内存、磁盘和网络余量 | 任何高于大约 80% 的资源 |
读取吞吐量和响应时间。 随着吞吐量的增加,响应时间也随之增加,这仅仅意味着系统更加繁忙。响应时间增加 落下 吞吐量意味着它已经超过了其容量,现在正在丢失工作,而这正是该测试存在的目的。
切勿仅报告平均值。 平均响应时间为 900 毫秒,第 95 百分位数为 1.1 秒,表明系统运行稳定。如果平均响应时间的第 95 百分位数为 11 秒,则意味着每 20 个用户中就有 1 个用户会遇到无法接受的体验,而平均值掩盖了这一问题。
此测试与其他性能测试的比较
性能测试是一系列测试的总称,这些测试在施加的载荷形式上有所不同,因此很容易混淆。
| 测试类型 | 增加的是什么 | 它解答的问题 |
|---|---|---|
| 负载测试 | 并发用户数达到预期峰值 | 在正常高峰交通流量下,它能达到目标吗? |
| 容量测试 | 数据库中存储的数据 | 随着数据集的增长,它能否应对? |
| 压力测试 | 负载超过容量,直至发生故障 | 它在哪里断裂,又是如何断裂的? |
| 尖峰测试 | 加载速度极快,速度极快 | 它能否在受到冲击后存活并恢复? |
| 耐力测试 | 正常负荷下的持续时间 | 性能会随着时间推移而下降吗? |
| 浸泡测试 | 时长,观看资源 | 是否存在内存泄漏或句柄泄漏? |
| 稳定性测试 | 各种条件 | 随着环境变化,它还能保持可靠性吗? |
这里最重要的区别在于: 容量测试衡量数据规模,负载测试衡量用户规模。 一份报表,如果处理一万行数据需要两秒钟,处理一千万行数据需要两分钟,那么这是数据量问题,而不是负载问题,再多的服务器容量也无法解决这个问题。



