性能测试教程(定义、类型、指标、示例)
性能测试
性能测试是一种软件测试方法,用于在特定负载下计算软件应用程序的速度、响应时间、稳定性、可靠性、可扩展性和资源利用率。性能测试的主要目标是观察和消除软件应用程序中的性能瓶颈。它也称为“性能测试”,是性能工程的一部分。
性能测试的目标是确定软件产品的性能如何。
应用程序的速度决定了它的响应速度。
软件应用程序可以处理的最大用户负载取决于其可扩展性。
稳定性 - 确定应用程序在承受不同负载时是否稳定。
性能测试的目的是什么?
软件系统不只有功能和特性需要考虑。软件应用程序的性能,例如响应时间、可靠性、资源利用率和可扩展性,也很重要。性能测试的目的是消除性能瓶颈,而不是发现bug。进行性能测试是为了向利益相关者提供有关其应用程序的性能、稳定性和可扩展性的信息。此外,性能测试揭示了在产品发布到市场之前需要解决的问题。
如果没有性能测试,软件更有可能出现问题,例如当多人同时使用时速度缓慢、在不同操作系统上的不稳定以及可用性差。在预期的负载下,性能测试将确定其程序是否满足速度、可扩展性和稳定性标准。由于性能测试不足或不存在而以较差的性能指标投放市场的程序,可能会获得不好的声誉,并且无法实现销售目标。
关键任务应用程序,例如空间发射计划或救生医疗设备,也应进行性能测试,以验证它们是否可以在较长时间内不间断地运行。
根据邓白氏公司的数据,59%的财富500强企业平均每周停机时间为1.6小时。鉴于财富500强企业平均每小时向其至少10,000名员工支付56美元,因此这类企业的停机成本的劳动力部分将达到每周896,000美元,或每年超过4600万美元。据预测,Google.com仅延迟5分钟(2013年8月19日)就会使这家搜索巨头损失545,000美元。最近的一次亚马逊网络服务中断据信已导致企业每秒损失1100美元的销售额。
因此,性能测试至关重要。
性能测试类型
负载测试 − 负载测试评估应用程序处理预期用户负载的能力。在软件程序上线之前,目标是识别性能瓶颈。
压力测试 − 压力测试是让应用程序承受高负载以查看其在高流量或数据处理方面的管理能力的过程。目标是找出应用程序的临界点。
耐力测试 − 耐力测试确保程序能够在较长时间内承受预期的负载。
尖峰测试 − 尖峰测试检查软件对用户负载的巨大峰值的响应。
容量测试 − 容量测试包含大量测试。数据被输入数据库,并监控软件系统的总体行为。目标是测试软件应用程序在不同数据库容量下的性能。
可扩展性测试 − 可扩展性测试的目标是查看软件程序在维持用户负载增加方面的“扩展”能力如何。它有助于规划软件系统的容量扩展。
典型的性能问题
速度、响应时间、加载时间和可扩展性不足是最常见的性能问题。速度是应用程序最关键的特性之一。潜在用户会放弃运行缓慢的应用程序。性能测试确保您的程序运行速度足够快,以保持用户的注意力和兴趣。查看下面常见的性能问题列表,您会发现速度是许多问题的共同特征:
加载时间过长 − 应用程序的加载时间是指应用程序启动所需的时间。这应该限制到最低限度。虽然有些应用程序不可能在不到一分钟的时间内加载,但有些可以。如果可能的话,加载时间应保持在几秒钟。
响应时间差 − 用户将数据写入应用程序并应用程序响应该输入所需的时间称为响应时间。通常,这应该是一个相当快的过程。如果用户被迫等待太久,他们会失去兴趣。
可扩展性差 − 当软件产品无法处理预期的用户数量或无法适应足够广泛的客户范围时,则称其可扩展性差。为了确保应用程序能够处理预期的用户数量,应该进行负载测试。
瓶颈 − 瓶颈是系统中的障碍,它降低了系统的整体性能。当编码缺陷或硬件问题在特定条件下导致吞吐量下降时,这被称为瓶颈。通常,一段有缺陷的代码是瓶颈的根源。解决瓶颈问题的关键是找到导致速度变慢的代码部分并尝试在那里纠正它。瓶颈通常通过改进或添加更多硬件来缓解。CPU 占用率是常见的性能瓶颈。
- 内存利用率
- 网络利用率
- 操作系统的限制
- 硬盘使用率
性能测试过程
性能测试中使用的方法可能差异很大,但测试目标保持不变。它可以帮助您证明您的软件系统满足预定义的性能标准。它还可以用于比较两个不同软件系统的性能。它还可以帮助您识别导致软件系统性能不佳的区域。
下面概述了执行性能测试的步骤。
确定您的测试环境 - 了解您的物理测试环境、生产环境和测试工具。在开始测试过程之前,了解将使用的硬件、软件和网络设置。这将有助于测试人员开发更高效的测试。它还有助于识别性能测试方法中测试人员可能面临的潜在问题。
确定性能验收标准 - 包括吞吐量、响应时间以及资源分配目标和限制。除了这些目标和限制之外,制定项目成功标准也很重要。因为项目规范通常不提供各种性能基准,所以应赋予测试人员创建性能标准和目标的权力。有时根本没有。如果可能,找到一个可比较的应用程序进行比较是设置性能目标的一种有用的方法。
计划和设计性能测试 – 找出最终用户的行为可能有何不同,并选择关键场景来测试所有可能的用例。必须模拟一系列最终用户,规划性能测试数据,并定义指标。
配置测试环境 - 在开始测试之前,确保环境已准备好。也安排好工具和其他资源。
实现测试设计 - 根据您的测试计划编写性能测试。
运行测试 - 运行测试并仔细查看它们。
分析、调整和重新测试 - 通过分析、调整和重新测试来整合、评估和沟通测试结果。然后微调并再次测试以确定性能是提高还是降低。当 CPU 成为瓶颈时停止,因为每次重新测试的改进往往会越来越少。然后您可能需要考虑升级 CPU 性能。
性能测试工具
市场上有许多不同类型的性能测试工具。您用于测试的工具将取决于许多参数,包括支持的协议类型、许可证成本、硬件要求、平台支持等等。下面提供了一些常用测试工具的集合。
- LoadNinja
- HP LoadRunner
- JMeter
我们应该测试哪些应用程序的性能?
只有客户端-服务器系统才进行性能测试。这意味着任何没有基于客户端-服务器架构构建的应用程序都不需要进行测试。
例如,Microsoft Calculator 不是面向客户端-服务器的,并且不支持多个用户,因此它不是性能测试的候选对象。
性能测试用例示例
当 1000 个用户同时访问网站时,确保响应时间小于 4 秒。
当网络连接缓慢时,检查应用程序在负载下的响应时间是否在可接受的范围内。
在应用程序崩溃之前,检查它可以管理的最大用户数。
同时读写500条记录时,检查数据库执行时间。
检查应用程序和数据库服务器在高负载下的CPU和内存利用率。
检查应用程序在低、中、中等和高负载情况下的响应时间。
在实际性能测试执行过程中,“可接受范围”、“高负载”等模糊词语将被替换为实际值。这些指标由性能工程师根据应用程序的技术架构和业务需求设定。
结论
在软件工程中,任何软件产品上市前都需要进行性能测试。它既能保证客户满意度,又能保护投资者的投资免受产品失败的风险。客户满意度、忠诚度和留存率往往远远超过性能测试的成本。