性能测试
性能测试是用于测试软件应用程序在特定工作负载下的速度、响应时间、稳定性、可靠性、可扩展性和资源使用情况的软件测试过程。它是性能工程的一个子集,也称为“性能测试”。
性能测试的重点是检查软件程序的
- 速度-确定应用程序是否快速响应
- 可扩展性-确定软件应用程序可以处理的最大用户负载。
- 稳定性-确定应用程序在变化的负载下是否稳定
在本教程中,将了解-
- 什么是性能测试?
- 为什么要进行性能测试?
- 性能测试的类型
- 常见的性能问题
- 性能测试流程
- 性能测试指标:监控的参数
- 性能测试用例示例
- 性能测试工具
- 常见问题解答
为什么要进行性能测试?

软件系统支持的特性和功能并不是唯一需要关注的问题。软件应用程序的性能性能测试的目标不是找出错误,而是消除性能瓶颈。
执行性能测试是为了向涉众提供有关其应用程序的有关速度、稳定性和可伸缩性的信息。如果不进行性能测试,软件很可能会出现以下问题:多个用户同时使用时运行缓慢、不同操作系统之间的不一致以及可用性差。
性能测试将确定他们的软件在预期工作负载下是否满足速度、可扩展性和稳定性要求。由于不存在或性能测试不佳而导致性能指标不佳而投放市场的应用程序可能会获得不好的声誉,无法实现预期的销售目标。
此外,像太空发射计划或救生医疗设备这样的关键任务应用程序应该进行性能测试,以确保它们无偏差地运行。
根据Dunn&BradStreet的数据,据估计,59%的财富500强公司每周有1.6小时的停机时间。考虑到至少有10,000名员工的财富500强公司平均每小时支付56美元,这样的组织的停机成本中的人工部分将是每周896,000美元,相当于每年超过4600万美元。 因此,性能测试非常重要。
性能测试的类型
- 负载测试-检查应用程序在预期用户负载下执行的能力。目标是在软件应用程序上线之前确定性能瓶颈。
- 压力测试-包括在极端工作负载下测试应用程序,以查看其如何处理高流量或数据处理。目标是确定应用程序的断点。
- 耐久性测试-执行该测试是为了确保软件能够在较长时间内处理预期的负载。
- 峰值测试-测试软件对用户产生的负载突然出现大峰值的反应。
- 容量测试-低于容量测试大号。数据填充到数据库中,目标是检查软件应用程序在不同数据库卷下的性能。
- 可伸缩性测试-可伸缩性测试的目标是确定软件应用程序在“向上扩展”以支持用户负载增加方面的有效性。它有助于规划软件系统的容量添加。
常见的性能问题
大多数性能问题都与速度、响应时间、加载时间和可扩展性差有关。看下面的常见性能问题列表,并注意速度是其中许多常见问题的共同因素:
- 加载时间长-加载时间通常是应用程序启动所需的初始时间。虽然有些应用程序不可能在一分钟内加载,但如果可能,加载时间应该保持在几秒以内。
- 响应时间差-响应时间是指从用户向应用程序输入数据到应用程序输出对该输入的响应所需的时间。同样,如果用户必须等待太长时间,他们就会失去兴趣。
- 可伸缩性差-当软件产品不能处理预期的用户数或不能容纳足够广泛的用户时,它的可伸缩性就很差。应该进行负载测试,以确保应用程序可以处理预期数量的用户。
-
瓶颈-瓶颈是系统中降低整体系统性能的障碍。瓶颈I一些常见的性能瓶颈是
- CPU利用率
- 内存利用率
- 网络利用率
- 操作系统限制
- 磁盘使用率
性能测试流程
性能测试采用的方法可以有很大差异,但是性能测试的目标是相同的。它还可以帮助识别软件系统中降低其性能的部分。
以下是有关如何执行性能测试的一般过程

- 确定测试环境-了解物理测试环境、生产环境以及可用的测试工具。它还将帮助确定测试人员在性能测试过程中可能遇到的挑战。
- 确定性能验收标准-这包括吞吐量、响应时间和资源分配的目标和约束。如果可能,找到类似的应用程序进行比较是设置性能目标的好方法。
- 规划和设计性能测试-确定最终用户之间的使用情况可能如何变化,并确定要针对所有可能的用例进行测试的关键场景。有必要模拟各种终端用户,规划性能测试数据,并概述将收集哪些指标。
- 配置测试环境-在执行之前准备测试环境。此外,安排工具和其他资源。
- 实现测试设计-根据测试设计创建性能测试。
- 运行测试-执行和监控测试。
- 分析、调整和重新测试-整合、分析和共享测试结果。然后微调和测试,然后可以考虑增加CPU能力。
性能测试指标:监控的参数
性能测试过程中监测到的基本参数包括:

- 处理器使用率-处理器执行非空闲线程所花费的时间。
- 内存使用量-可供计算机上的进程使用的物理内存量。
- 磁盘时间-磁盘忙于执行读或写求的时间量。
- 带宽-显示网络接口每秒使用的位数。
- 私有字节-进程分配的不能在其他进程之间共享的字节数。这些用于测量内存泄漏和使用情况。
- 提交的内存-已使用的虚拟内存量。
- Memory Pages/Second-为解决硬页故障而写入磁盘或从磁盘读取的页数。硬页错误是指从其他地方调用不是来自当前工作集中的代码并从磁盘检索。
- 页面故障/秒-处理器处理故障页面的总速率。当进程需要来自其工作集之外的代码时,同样会发生这种情况。
- CPU每秒中断数-是平均值。处理器每秒接收和处理的硬件中断数。
- 磁盘队列长度-是平均值。在采样间隔内为所选磁盘排队的读写求的个数。
- Network Output Queue Length-输出数据包队列的长度(以数据包为单位)。任何大于两个的值都意味着延迟,需要停止瓶颈。
- Network Bytes Total Per Second-在接口上发送和接收的字节(包括成帧字符)的速率。
- 响应时间-从用户输入求到收到响应的第一个字符的时间。
- 吞吐量-计算机或网络每秒接收求的速率。
- 连接池数量-池连接满足的用户求数。池中的连接满足的求越多,性能就越好。
- 最大活动会话数-一次可以处于活动状态的最大会话数。
- 命中率-这与缓存数据(而不是昂贵的I/O操作)处理的SQL语句的数量有关。这是解决瓶颈问题的好起点。
- 每秒点击次数-第在负载测试的每秒Web服务器上的命中率。
- 回滚段-在任何时间点可以回滚的数据量。
- 数据库锁-需要监视和仔细调优表和数据库的锁。
- 顶级等待-监视以确定在处理从内存检索数据的速度时可以缩短的等待时间
- 线程数-应用程序的运行状况可以通过NO。正在运行且当前处于活动状态的线程的数量。
- 垃圾收集-它与将未使用的内存返回给系统有关。需要监控垃圾收集的效率。
性能测试用例示例
- 当1000个用户同时访问网站时,验证响应时间不超过4秒。
- 当网络连接速度较慢时,验证负载下应用程序的响应时间是否在可接受的范围内
- 检查应用程序在崩溃之前可以处理的最大用户数。
- 检查同时读/写500条记录时的数据库执行时间。
- 检查峰值负载条件下应用程序和数据库服务器的CPU和内存使用情况
- 验证应用程序在低负载、正常负载、中等负载和重负载条件下的响应时间。
在实际的性能测试执行过程中,模糊的术语如可接受范围、重负载等。性能工程师根据业务需求和应用程序的技术环境设置这些数字。
性能测试工具
市场上有各种各样的性能测试工具可供选择。选择用于测试的工具将取决于许多因素,例如下面列出的是常用测试工具的类型。
- LoadNinja-正在革命性地改变我们的负载测试方式。这个基于云的负载测试工具使团队能够记录并即时回放全面的负载测试,而无需复杂的动态关联&运行测试并将负载测试时间缩短60%以上。
- HP LoadRunner-是当今市场上最流行的性能测试工具。该工具能够模拟数十万用户,将应用程序置于真实负载下,以确定它们在预期负载下的行为。LoadRunner提供了一个虚拟用户生成器,它模拟真实人类用户的行为。
- JMeter-用于Web和应用服务器负载测试的领先工具之一。
常见问题解答
应该测试哪些应用程序的性能?
性能测试始终仅针对基于客户端-服务器的系统进行。这意味着,任何不是基于客户端-服务器架构的应用程序都不能需要性能测试。
例如,Microsoft Calculator既不基于客户端-服务器,也不运行多个用户;因此,它不适合进行性能测试。

性能测试和性能工程有什么不同
理解性能测试与性能工程的区别具有重要意义。下面分享一项理解:
性能测试是一门涉及测试和报告软件应用程序在各种参数下的当前性能的学科。
性能工程是为了实现所需的性能而对软件进行测试和调优的过程。用户体验。
从历史上看,测试和调优一直是截然不同的,而且经常是相互竞争的领域。然而,在过去的几年中,由于这些团队取得了巨大的成功,将性能测试与性能调优相结合的概念已经流行起来,现在我们称之为性能工程。
结论
在软件工程中,销售任何软件产品之前,性能测试都是必要的。性能测试的成本通常可以通过提高客户满意度、忠诚度和保留率可以弥补!