性能测试教程

什么是性能测试?
性能测试 是一种软件测试过程,用于测试特定工作负载下软件应用程序的速度、响应时间、稳定性、可靠性、可扩展性和资源使用情况。性能测试的主要目的是识别和消除软件应用程序中的性能瓶颈。它是性能工程的一个子集,也称为 “性能测试”.
性能测试的重点是检查软件程序的:
- 速度 – 确定应用程序是否快速响应
- 可扩展性 – 确定软件应用程序可以处理的最大用户负载
- 稳定性 – 确定应用程序在不同负载下是否稳定
为什么性能测试很重要?
软件系统支持的功能和特性固然重要,但软件应用的性能,例如响应时间、可靠性、资源利用率和可扩展性,同样至关重要。性能测试的目标并非查找漏洞,而是消除性能瓶颈。
性能测试旨在为利益相关者提供有关应用程序速度、稳定性和可扩展性的信息。更重要的是,性能测试能够发现产品上市前需要改进的地方。如果没有进行性能测试,软件很可能会出现诸如多用户同时使用时运行缓慢、不同操作系统间不一致以及用户体验差等问题。
性能测试旨在确定软件在预期工作负载下是否满足速度、可扩展性和稳定性要求。如果应用程序由于缺乏或性能测试不足而导致性能指标不佳,则很可能声誉受损,并且无法达到预期的销售目标。
也, 关键任务应用程序 诸如航天发射计划或救生医疗设备等都应进行性能测试,以确保它们能够长时间运行而不会出现偏差。
根据 Dunn & Bradstreet 的数据,59% 的财富 500 强公司每周的停机时间约为 1.6 小时。考虑到拥有至少 500 名员工的财富 10,000 强公司平均每小时支付 56 美元,此类组织停机成本的人工部分每周将达到 896,000 美元,相当于每年超过 46 万美元。
只有一个 5 分钟停机时间 Google.com 的收购(19 年 13 月 XNUMX 日)预计将使这家搜索巨头损失高达 $ 545,000。
据估计,这些公司损失了销售额。 每秒 1100 美元 由于最近 Amazon Web 服务中断。
因此,性能测试非常重要。为了帮助您完成此过程,请查看此列表 性能测试工具.
性能测试的类型
软件测试中性能测试主要有六种类型,如下所述。
- 负载测试 – 检查应用程序在预期用户负载下的运行能力。目的是在软件应用程序上线之前确定性能瓶颈。
- 压力测试 – 涉及在极端工作负载下测试应用程序,以了解其如何处理高流量或数据处理。目标是确定应用程序的临界点。
- 耐力测试 – 这样做是为了确保软件能够在长时间内处理预期负载。它有助于检测诸如内存泄漏和资源耗尽等仅在持续运行期间才会出现的问题。
- 尖峰测试 – 峰值测试旨在检验软件对用户产生的突发性巨大负载峰值的响应能力。与压力测试不同,峰值测试专门关注系统如何处理和从短暂的流量激增中恢复。
- 容量测试 – 这包括向数据库中填充大量数据,并监控整个软件系统的运行情况。其目的是检验软件应用程序在不同数据库容量下的性能。
- 可扩展性测试 – 它决定了软件应用程序在“扩展”以支持用户负载增加方面的有效性。它有助于规划软件系统的容量扩展。
常见的性能问题
大多数性能问题都围绕速度、响应时间、加载时间和可扩展性差展开。速度通常是应用程序最重要的属性之一。运行缓慢的应用程序会流失潜在用户。性能测试确保应用程序运行速度足够快,从而吸引用户的注意力和兴趣。以下是一些常见的性能问题,其中速度是一个反复出现的问题:
- 加载时间过长 – 加载时间通常是指应用程序启动所需的初始时间。一般来说,加载时间应尽可能缩短。虽然有些应用程序无法在一分钟内加载完毕,但如果可能,加载时间应控制在几秒以内。
- 响应时间较差 – 响应时间是指从用户向应用程序输入数据到应用程序输出对该输入的响应所需的时间。通常情况下,响应时间应该非常短。如果用户等待时间过长,他们就会失去兴趣。
- 可扩展性差—— 当软件产品无法处理预期的用户数量或无法容纳足够广泛的用户时,其可扩展性就会较差。 负载测试 应该这样做以确保应用程序可以处理预期的用户数量。
- 瓶颈 – 瓶颈是指系统中阻碍系统整体性能的障碍。瓶颈是指在特定负载下,由于代码错误或硬件问题导致吞吐量下降。瓶颈通常是由一段有缺陷的代码引起的。解决瓶颈问题的关键在于找到导致速度变慢的代码段并尝试修复它。瓶颈通常可以通过修复运行不良的进程或添加额外的硬件来解决。 常见的性能瓶颈 是:
- CPU利用率
- 内存利用率
- 网络利用率
- Opera系统限制
- 磁盘使用情况
如何进行性能测试
性能测试所采用的方法可能千差万别,但性能测试的目标始终不变。它可以帮助证明您的软件系统符合某些预定义的性能标准。或者,它可以帮助比较两个软件系统的性能。它还可以帮助识别软件系统中降低其性能的部分。
以下是执行性能测试的一般流程。

步骤 1)确定您的测试环境
了解您的物理测试环境、生产环境以及可用的测试工具。在开始测试之前,务必了解测试过程中使用的硬件、软件和网络配置的详细信息。这将有助于测试人员创建更高效的测试,并有助于识别性能测试过程中可能遇到的挑战。
步骤2)确定绩效验收标准
这包括吞吐量、响应时间和资源分配方面的目标和约束。此外,还需要在这些目标和约束之外确定项目成功标准。应授权测试人员设定性能标准和目标,因为项目规范通常不会包含足够广泛的性能基准。有时甚至可能根本没有基准。如果可能,找到一个类似的应用程序进行比较是设定性能目标的好方法。
步骤3)规划和设计性能测试
确定最终用户的使用习惯可能存在的差异,并确定所有可能使用场景的关键测试场景。有必要模拟各种最终用户,规划性能测试数据,并概述将要收集的指标。
步骤 4)配置测试环境
执行测试前,请准备好测试环境。同时,请安排好工具和其他资源。尽可能模拟生产环境,以确保测试结果真实可靠且具有实际意义。
步骤5)实施测试设计
根据您的测试设计创建性能测试。
步骤 6)运行测试
执行并监控测试。
步骤 7)分析、调整和重新测试
汇总、分析并分享测试结果。然后进行微调并再次测试,以查看性能是否有所提升或下降。由于每次重复测试的提升幅度通常会逐渐减小,因此当瓶颈是由 CPU 引起时,应停止测试。此时,您可能需要考虑提升 CPU 性能。
性能测试指标:监控参数
性能测试期间监控的基本参数包括:
- 处理器使用情况 – 处理器执行非空闲线程所花费的时间。
- 内存使用 – 计算机上可供进程使用的物理内存量。
- 磁盘时间 – 磁盘忙于执行读取或写入请求的时间。
- 带宽– 显示网络接口每秒使用的位数。
- 私有字节 – 进程分配的、无法与其他进程共享的字节数。这些数值用于衡量内存泄漏和使用情况。
- 已提交的记忆 – 已使用的虚拟内存量。
- 内存页面/秒 – 为了解决硬缺页错误,需要写入磁盘或从磁盘读取多少页。硬缺页错误是指从其他位置调用非当前工作集中的代码,并从磁盘检索这些代码时发生的错误。
- 每秒页面错误数 – 处理器处理故障页的总体速率。当进程需要来自其工作集之外的代码时,就会发生这种情况。
- 每秒 CPU 中断次数 – 处理器每秒接收和处理的硬件中断的平均数量。
- 磁盘队列长度 – 在采样间隔内,所选磁盘的平均读写请求排队数量。
- 网络输出队列长度 – 输出数据包队列的长度(以数据包为单位)。超过 2 则表示存在延迟,需要消除瓶颈。
- 每秒网络字节总数 – 接口上发送和接收字节(包括帧字符)的速率。
- 响应时间 - 从用户输入请求到收到响应的第一个字符所花费的时间。
- 吞吐量 – 计算机或网络每秒接收请求的速率。
- 连接池的数量 – 池连接满足的用户请求数。池中的连接满足的请求越多,性能就越好。
- 最大活动会话数 – 可以同时处于活动状态的最大会话数。
- 命中率 – 这与数量有关 SQL 这些语句由缓存数据处理,而不是昂贵的 I/O 操作。这是解决瓶颈问题的良好开端。
- 每秒点击次数 – 在负载测试中,Web 服务器每秒的访问次数。
- 回滚段 – 可以在任何时间点回滚的数据量。
- 数据库锁 – 表和数据库的锁定需要进行监控和仔细调整。
- 最热门的等待 – 监测以确定在处理从内存中检索数据的速度时,可以缩短哪些等待时间。
- 线程数 – 可以通过正在运行且当前处于活动状态的线程数来衡量应用程序的健康状况。
- 垃圾收集 - 垃圾回收是指将未使用的内存返回给系统。需要监控垃圾回收的效率。
性能测试用例示例
以下是一些性能测试用例示例:
- 测试用例 01: 验证当 1000 个用户同时访问网站时,响应时间不超过 4 秒。
- 测试用例 02: 当网络连接速度较慢时,验证应用程序在高负载下的响应时间是否在可接受的范围内。
- 测试用例 03: 检查应用程序崩溃前可以处理的最大用户数。
- 测试用例 04: 检查同时读取/写入500条记录时的数据库执行时间。
- 测试用例 05: 在峰值负载条件下,检查应用程序和数据库服务器的 CPU 和内存使用情况。
- 测试用例 06: 验证应用程序在低负载、正常负载、中负载和重负载条件下的响应时间。
在实际的性能测试执行过程中,可接受范围、重负载等模糊术语被具体的数字所取代。性能工程师根据业务需求和应用程序的技术状况设置这些数字。
性能测试最佳实践
遵循既定的最佳实践可以确保性能测试获得可靠的结果。这些准则有助于团队避免常见的陷阱。
- 镜像生产环境—— 尽量使测试环境与生产环境保持一致。硬件或软件版本的差异可能会导致误导性的结果。
- 设计符合实际的测试场景—— 创建模拟实际用户行为的测试用例,包括思考时间和并发事务组合。
- 使用基于百分位数的指标—— 应参考第 90 和第 95 百分位响应时间,而不仅仅依赖平均值。百分位数据能够揭示平均值可能掩盖的尾部延迟。
- 尽早并持续进行测试—— 将性能测试集成到 CI/CD 流水线中,而不是将其视为最后阶段的活动。
- 文件和基线结果 – 记录每次测试运行的结果。将新结果与基准结果进行比较,可以轻松检测出不同版本之间的回归问题。
人工智能如何变革性能测试
人工智能是重塑ping 通过自动化复杂的分析任务并实现预测功能,进行性能测试。人工智能驱动的工具分析历史数据、检测模式并提供可操作的建议,无需每一步都进行人工干预。
- 预测性异常检测 – AI 算法在负载测试期间实时分析性能指标,并在偏差升级为严重故障之前发出警报。
- 自动化根本原因分析—— 人工智能工具可以关联分布式系统中的数据,从而精确定位导致性能下降的组件。
- 智能测试优化 – 机器学习模型能够识别冗余的测试场景并提出最佳配置,从而在保持覆盖率的同时减少执行时间。
- 自愈测试脚本 – AI 会在应用程序接口发生变化时调整测试脚本,从而降低性能测试套件的维护成本。
性能测试工具
市面上有各种各样的性能测试工具。选择哪种测试工具取决于诸多因素,例如支持的协议类型、许可费用、硬件要求和平台支持。以下列出了一些常用的测试工具。
- HP LoadRunner – 是市场上最受欢迎的性能测试工具之一。该工具能够模拟数十万用户,使应用程序承受真实负载,从而确定其在预期负载下的行为。 加载程序 具有虚拟用户生成器,可模拟真实人类用户的动作。
- JMeter – 它是领先的开源工具之一,用于对 Web 和应用服务器进行负载测试。它支持多种协议,并提供强大的报告功能。


