一、 什么是性能?
-
性能是系统或组件在给定的限制条件下完成其指定功能的程度,例如速度、准确性或内存使用。
-
性能是基于用户要求和用户对操作系统的看法的外部质量。
-
性能对于实时系统也尤为重要,在实时系统中,动作必须在指定的时间限制内完成才能正确运行。
-
常用性能指标
-
示例:时间效率、空间效率、事务操作性能、I/O操作性能、数据库性能、内存性能、初始化/退出时间和资源利用率等。
-
介绍一些常用的性能指标:延迟、事务处理时间、最大事务处理时间、事务操作时间、数据库性能、最大内存消耗、内存峰值时间、资源消耗。
- 延迟Latency:
指令控制单元发出数据调用的瞬间与数据传输开始的瞬间之间的时间间隔; 请求和操作完成之间的延迟。 - 事务处理时间:
事务处理时间是指完成一个事务所需的运行时间,用于评价事务处理效率。 通常,事务所需的时间越短,效率越高。 - 最大事务处理时间:
它是一个非常重要的性能指标,我们首先需要分析哪些事务花费的时间较多,然后测试出花费的时间,花费最多的时间就是最大的事务处理时间。 - 交易操作时间:
主要用于评价用户操作事务处理所需的操作时间,主要反映用户操作的效率。 测试交易操作时间,需要一个计时器,测试不同用户花费的时间,最后取平均值。 - 数据库性能:
数据库性能指标一般包括搜索、插入、删除和更新数据库所需的时间等,由于数据库性能往往是软件系统性能的瓶颈,因此对数据库性能进行测试是非常必要的。 - 最大的内存消耗:
最大的内存消耗应该配备什么级别的硬件来运行软件,这是硬件成本的直接反映。 最大的内存消耗可以用性能监视器来测试。 - 资源消耗:
应用程序消耗的内存或磁盘空间量。 - 高峰内存时间:
软件运行时间消耗在内存的高峰期。 如果软件使用的内存峰值与系统总内存越接近,软件的效率就会大大降低。 所以,减少内存峰值时间可以提高软件性能。
- 延迟Latency:
-
现在web应用非常广泛,下面介绍几个关于web应用性能的指标,如:并发用户数、响应时间、吞吐量和休眠(休眠)时间等。
-
响应时间:
响应时间是指请求做出响应所需要的时间,可分为传输时间、应用程序延迟时间、数据库延迟时间和当前时间等。 -
系统响应时间:
应用系统从发送请求到客户端接收数据所消耗的时间。 -
呈现时间:
呈现时间取决于客户端收到数据后呈现页面的消耗时间。 -
Web 应用程序的页面响应时间分解
页面响应时间分为传输时间(N1+N2+N3+N4)和应用延迟时间(A1+A2+A3)。
应用延迟时间分为数据库延迟时间(A2)和Web服务器延迟时间(A1+A3)。 -
并发用户数
一般分两种情况:-
严格并发,即所有用户同时做同样的事情或操作。
-
并发的广义类别,多个用户向系统发出请求或进行操作,但这些操作可以相同,也可以不同。
-
性能测试关注的是业务的并发用户数,从业务的角度设置多少并发用户比较合适。
以下是并发用户数估算公式 -
C —平均的并发用户数
n —登录会话的数量
L —登录会话的平均长度
T —考察的时间段长度
-
-
吞吐量是指一次性性能测试的过程,可以测试网络上合并的数据传输量。
- 一般来说,吞吐量用请求数/秒或页数/秒来衡量。
- 吞吐量指标有以下两个作用:
(1) 协助设计性能测试场景,衡量性能测试场景是否达到预期设计目标。
(2) 协助分析性能测试瓶颈。 - 吞吐量和并发用户之间有一定的关系。
计算公式如下:
-
-
性能计数器和资源利用率
- 性能计数器的一些数据指标是描述服务器或操作系统的性能,具有监控和分析的作用。
- 资源利用率是指各种资源的使用情况。
- 示例:1000个并发用户访问系统,web服务器CPU占用率为68%,内存占用率为55%。 其中 68% 和 55% 是资源利用率。
- 通过横向比较的资源利用率(横向比较),可能会发现性能瓶颈。
休眠时间
- 休眠时间也叫思考时间,它是指向用户请求的时间间隔。
- 因此,自动化测试模拟用户操作,测试脚本必须让每个操作间隔一段时间,在操作语句中通过函数Think()设置休眠时间,实现两次操作之间的等待时间。
- 休眠时间、迭代次数、并发用户数和吞吐量之间存在一定的关系。

- 在实际测试中,可以通过以下步骤计算思考时间:
(1)首先计算系统并发用户数。
(2)统计一个系统平均吞吐量。
(3)统计每个用户的平均请求数。
(4) 根据计算得到思考时间。
二、 什么是性能测试?
- 性能测试(Performance testing)是为评估具有指定性能要求的系统的性能而进行的测试。
- 性能测试确定应用程序及其支持基础设施在特定条件下的运行时“行为”。
- 性能测试用于测量多个系统特性,例如处理速度、响应时间、资源消耗、吞吐量和效率。
性能测试配置文件
- 性能测试中的关键活动之一是决定在系统/应用程序上放置什么类型的负载。
- 我们可以选择多种性能测试,因此我们首先必须确定需要什么。
负载测试
-
负载测试确定负载下的应用程序行为,直到并包括其限制(不仅仅是在其限制下)。
-
负载测试特指负载大小(并发用户数)及相关数值。
-
负载测试是在系统负载下模拟实际软件系统负载情况,通过持续负载添加(增加虚拟并发用户数)或其他负载添加方式来观察不同负载系统下的性能指标,如响应时间和数据吞吐量 , 系统资源利用率(CPU 和内存),测试行为和特性,发现系统可能存在的性能瓶颈、内存泄漏等无法同步等问题。
-
负载测试加载方式
-
一次性加载
一次性加载多个用户,在一定时间内持续运行。
比如早上上班的时候是访问网站或者登陆网站的时间非常集中,基本上都属于扁平加载模式。 -
增加负荷
以有规律的方式逐步增加用户,每秒增加一些新用户,纵横交错。
通过这种加载助手进行测试,很容易找到性能的拐点,即性能瓶颈。 -
高和低突变负荷
某个时间用户量大,突然下降到很低,很长一段时间,突然增加到高点,重复几次。
通过这种加载助手进行测试,容易发现内存泄漏、资源释放等问题。 -
随机加载方式
通过随机算法在一定范围内自动生成一定量的变化,动态加载,而这种方式可能是最接近实际情况的一种加载方式。
虽然不容易模拟系统运行时的峰值时刻,但可以模拟系统长时间运行的状态。
-
压力测试
- 压力测试决定了应用在强负载测试(处理大量数据、大量并发用户)中的能力。
- 将全负载应用于服务器时,压力测试会更加成功。
- 结合客户端测试在服务器上运行附加应用程序是压力测试的另一种形式。
- 压力测试可以分为两种类型:
- 高负载长时间(如24小时以上)稳定性压力测试。
- 极限负载情况导致系统崩溃破坏性压力测试。
- 微软测试实践经验表明,如果软件产品通过72小时压力测试,72小时后出现问题的可能性极小。 于是,72小时成为微软产品压力测试的时间标记。
三、性能测试有哪些类型?
- 三种最常见的软件性能测试类型包括:
- 测试由我们想要测量的内容驱动。
- 基于负载的来源或类型的测试。
- 测试以对系统施加压力或发现其限制。
- 由我们要测量的内容驱动的测试
响应时间测试; 吞吐量测试 - 基于负载来源或类型的测试
- 负载变化/弹跳测试
在性能测量期间改变测试负载,以反映真实负载如何随时间起伏的典型模式。 - 校准(还原)测试
根据强制要求(例如来自政府监管机构的要求)检查系统。
- 负载变化/弹跳测试
- 测试以对系统施加压力或发现其限制
- 死锁测试
运行卷测试以检测系统中是否存在资源争用,例如多个请求者试图访问同一个数据库并导致系统由于数据库记录锁等区域的冲突而锁定用户请求。
- 死锁测试
四、 如何进行性能测试?
性能测试的过程
计划——记录——修改——执行——分析

Step1:Planning
- 了解负载
- 一旦我们知道我们想要完成什么
我们想要的一般测试类型。
我们要运行哪些测试。 - 现在我们必须决定活动量和该量的组成,负载(即工作量)
- 一旦我们知道我们想要完成什么
- 负载(操作)配置文件
– 为了更好地模拟现实世界,不仅应该估计负载大小,还需要创建构成负载的用户/活动的配置文件。 - 测试样本大小
我们想要衡量的大多数因素(例如响应时间)因许多因素而异; 已知和未知- 这意味着我们不能一次测量某物,而是必须对其进行多次采样才能计算出有意义的平均值
- 样本需要多大? 这是样本量和准确性之间关系的粗略经验法则
- 何时采样——采样误差
- 用户数量和类型
用户(事件)的组合可能因时间段而异。
特殊事件可以改变组合。 - 网站上的用户数量会因多种因素而异
网站类型
供品
季节性活动
特别活动
等等。
- 并发性
- 划分时间粒度,应该较小,解决操作存在时间性集中的问题。
- 注重业务模式的特殊性。
- 思考时间
- 负荷背景或噪声背景Background Load (Noise)
- 指哪些增加的活动被认为是直接导致性能下降的网络或其它应用的负载——噪声背景
- 需要测试的类型或度量
- 负载
- 性能
- 压力
第二到第四步,记录,修改,执行
- 首先模拟实际用户的操作行为,记录和回放多用户测试事务处理过程,自动生成测试脚本。
- 第二次修改脚本,增加逻辑控制,完成参数和数据的关联。
- 性能测试工具的抽象架构
- Profiler(检验器)是一种性能监视器,提供代码级的测量,包括计时、内存使用等。
- 当我们想要定位软件系统中的性能瓶颈时,分析器很有用。
- 虚拟用户生成器
- 用于捕获最终用户业务流程并创建测试脚本,即通过记录应用程序在典型的最终用户执行操作中,自动记录到虚拟用户(Vuser)脚本中,从而作为负载测试的基础。
- 虚拟用户包括:C Vuser、VB Vuser、VB script Vuser、JAVA Vuser、Java Script Vuser……
- 控制器
- 用于组织、驱动、管理和监控负载测试中央控制。
- 使用控制器可以运行用来模拟真实执行的操作脚本,并且可以通过让多个Vuser同时执行这些操作来在系统中创建负载。
- 负载生成器
Load Generator 运行虚拟用户,产生高效、监控负载。 - 分析
帮助检查、分析和比较性能结果,并使用报告和图表来标记和确定应用瓶颈,并确保需要更改以提高系统的系统性能。