一、验收性能测试
通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生产性能要求,具有以下特点:
1、主要目的是验证系统是否具有系统宣称的能力,包括确定用户场景、给出需要关注的性能指标、测试执行、测试分析几个步骤;
2、事先了解被测试系统的典型业务场景,并具有确定的性能目标;
3、已确定运行环境(硬件设备、软件设备、网络条件、基础数据等)。
二、负载测试(可置性测试)
在被测系统上不断增加压力,直到性能指标超过预定指标或者某种资源使用已经达到饱和状态,可以找到系统的处理极限,为系统调优提供数据,具有以下特点:
1、主要目的是找到系统处理能力的极限,描述为“在某条件下最多允许100个用户并发访问”,“在某条件下一小时内最多处理2000条数据”;
2、测试环境确定,也需要考虑被测系统的业务压力量和典型场景,使得测试结果具有业务上的意义;
3、一般用来了解系统的性能容量,或是配合性能调优来使用。
三、压力测试
测试系统在一定饱和状态下(CPU/内存等饱和),系统能够处理的会话能力以及系统是否出现错误,具有以下特点:
1、主要目的是检查系统处于压力情况下时应用的性能表现;
2、一般通过模拟负载等方法,使得系统的资源使用达到较高的水平。除CPU和内存使用率外,JVM可用内存、数据库连接数、数据库服务器CPU使用率等都可以作为压力的依据;
3、可用于测试系统的稳定性,基于这种原理:如果一个系统能够在压力环境下稳定运行一段时间,那么这个系统在平时的运行条件下也是冇问题的。
四、配置测试
通过对被测系统软硬件环境的调整,了解各种不同环境对系统性能影响的程度,从而找到系统各项资源的最优分配原则,具有以下特点:
1、主要目的是了解各种不同因素对系统性能影响的程度,从而判断出最值得进行的调优操作;
2、一般在对系统性能状况有初步了解后进行,在确定的环境、操作步骤和压力条件下进行,比较每次的测试结果找出影响最大的因素;
3、一般用于性能调优和规划能力。
五、并发测试
通过模拟用户的并发访问,测试多用户并发操作时是否存在死锁等性能问题,具有以下特点:
1、主要目的是发现系统中可能隐藏的并发访问时的问题;
2、主要关注系统可能存在的并发问题,例内存泄露、线程锁和资源竞争方面的问题
3、可在开发的各个阶段使用,需要相关的测试工具配合和支持。
并发测试主要关注的问题
问题类型 | 问题描述 |
内存问题 | 是否有内存泄露(C/C++) |
是否有太多的临时对象(Java) | |
是否有太多的超过设计生命周期的对象(Java) | |
数据库问题 | 是否有数据库死锁(Dead Lock) |
是否经常出现长事务(Long Transaction) | |
线程/进程问题 | 是否出现线程/进程同步失败 |
其他问题 | 是否出现资源竞争导致的死锁 |
是否没有正确处理异常(例如超时)导致系统死锁 |
六、可靠性测试
通过给系统加载一定的业务压力(例资源在70%-90%的使用率),让应用持续运行一段时间,测试系统在这种条件下能否稳定运行,具有以下特点:
(PS:这里的可靠性测试并不等同于“获得软件的可靠性”,软件的可靠性是个很大的话题,其一般用平均无故障时间或者失效率来衡量。)
1、主要目的是验证系统是否支持长期稳定的运行;
2、需要在压力下持续一段时间的运行(非关键应用,一般进行3*24的稳定性测试即可);
3、测试过程中需要关注系统的运行状况,如果发现随着时间的推移,RT或者资源使用率有明显波动,则可能是不稳定的前奏。
七、失效恢复测试
针对有冗余备份和负载均衡的系统设计的,可以用来检验如果系统局部发生故障,用户是否能够继续使用系统,以及会受到多大的影响,具有以下特点:
1、主要目的是验证在局部故障情况下,系统能否继续使用;
2、需要给出当问题发生时,能支持多少用户访问和采取何种应急措施的方案;
3、一般来说,只有对系统持续运行指标有明确要求的系统才需要进行这种类型的测试。
------------------------------------------------------------------分割线----------------------------------------------------------------------
下图是性能测试应用领域与测试方法的关联
能力验证 | 规划能力 | 性能调优 | 缺陷发现 | 性能基准比较 | |
性能测试 | ★ | ||||
负载测试 | ★ | ★ | |||
压力测试 | ★ | ★ | ★ | ★ | ★ |
配置测试 | ★ | ★ | |||
并发测试 | ★ | ★ | |||
可靠性测试 | ★ | ||||
失效恢复测试 | ★ | ★ | ★ |
____春风送君千万里,且饮长亭念故人