第一部分 性能测试51Testing软件测试网\Hz+nA:W)r+}
一软件性能的概念
3@3[+h4h4f \
F_n+lD01.1什么是软件的性能51Testing软件测试网$a^ i+h&i
一般来说,性能是一种指标,表明软件系统或构件对于其及时性要求的符合程度;其次,性能是软件产品的一种特征,可以用时间来进行度量。
YQ.d7t+TO"D0性能的及时性用响应时间或者吞吐量来衡量。响应时间是对请求做出响应所需的时间。对于交互式的系统(例如web系统)来说,我们一般用用户感受到的响应时间来描述系统的性能,而对于非交互式系统(嵌入式系统或银行等的业务处理系统)而言,响应时间是指系统对事件产生响应所需的时间。51Testing软件测试网OQ6GE&u
1.2用户视角的软件性能51Testing软件测试网J+h!f1Au;Y'vJOO
从用户的角度来说,软件的性能就是软件对用户操作的响应时间。必须要说明的是,用户所体会到的“响应时间”既有客观的成分,也有主观的成分。例如,用户执行了某个操作,该操作返回大量的数据,从客观的角度来说,事务的结束应该是系统返回所有的数据,响应时间应该是从用户操作开始到所有数据返回完成的整个耗时;但从用户的主观感知来说,如果采用一种优化的数据呈现策略,当少部分数据返回之后就立即将数据呈现在用户面前,则用户感受到的响应时间就远远小于实际的事务响应时间。51Testing软件测试网~#i{Xmf v?J\
1.3管理员角度的软件性能
R(Y8j9TW#J0从管理员角度来说,软件系统的性能首先表现在系统的响应时间上,这一点和用户视角是一样,但管理员还会关心和系统状态相关的信息。例如服务器资源利用状况,数据库运行状况,应用服务器的一些信息,系统的可扩展性,处理并发的能力,系统的瓶颈在那里等等。在此简要列出管理员所关注的部分性能相关的问题。
|
g?.g2SPM-qi.M0管理员关心的问题 *g x8h"K3E+{]W0 | 软件的性能描述51Testing软件测试网X-R\5}~Y^ |
服务器的资源使用状况 Su-C2l/qQ0 | 资源利用率51Testing软件测试网d2y6{(H_r"M5\U1j |
应用服务器和数据库服务器资源使用状况 ?~S8TL
h0 | 资源利用率51Testing软件测试网9}Fp7F
l|Zw0M4T |
系统的可扩展性如何51Testing软件测试网;[zGWg?9d5^U | 系统的可扩展性51Testing软件测试网-E
H`:u^`m0Q'b:{ |
系统最多能支持多少并发用户的访问?系统最大的业务处理量是多少 "c `F'qH_R(GQ0 | 系统容量 v%hU0Ln0N-|N0 |
系统可能的性能瓶颈在那里51Testing软件测试网0A.RjMA*}$S7q | 系统的可扩展性 :pAb3yC'^c fWA)|0 |
更换那些设备能提高性能 kjt!["F8ShgK0 | 系统的可扩展性51Testing软件测试网Hl
d)aU |
系统能否支持长时间的业务访问 K'KZ[^.d0 | 系统的稳定性51Testing软件测试网1NukG o3rF+XYS$t)H |
1.4开发视角的软件性能51Testing软件测试网0R\-RZ_9m
从开发人员的角度来说,对软件性能的关注就更深入了。不仅会关注管理员所关注的一切问题,同时还会关注如何通过调整设计和代码或是通过调整系统设置参数来提高性能,和如何发现并解决软件设计和开发过程中产生的由于多用户访问引发的缺陷等问题。因此,对于开发人员来说,单纯获知系统性能“好”与“坏”的评价并没太大意义,他们更想知道的是“那些地方是引起不好性能的根源”或是“那些可能存在故障发生的可能”。此简要列出开发人员所关注的部分性能相关的问题。51Testing软件测试网j"O6E%iR7o
开发人员关心的问题 ]xsjEV:`!@s)c!A0 | 问题所属层次51Testing软件测试网:s,[z"Fv0K |
架构设计是否合理 -^9p4A#t
btoR
I0 | 系统架构 #wgy3N
zz%P0 |
数据库设计是否存在问题 y7SfV$t'Ba0 | 数据库设计 1DCF?xHW8E0 |
代码是否存在性能方面的问题51Testing软件测试网%BjJ P*C;y | 代码 _.z7s$vE;t"Q0 |
系统中是否有不合理的内存使用 ?'q e'u#q!D0 | 代码 \-E|fCg
QCqR0 |
系统中是否有不合理的线程同步方式 V
},p&Cv-GC0 | 设计与代码 1U:Z'g6V*?#G4lK0 |
系统中是否存在不合理的资源竞争51Testing软件测试网
[$\'e-H'G_P | 设计与代码 g$u5]/X;{9]&U!E z0 |
二性能测试分类51Testing软件测试网 ^;@??T(x3_)}f
系统的性能测试是一个很大的概念,覆盖面非常广泛,对一个软件系统而言,包括执行效率、资源占用、稳定性、安全性、兼容性、可扩展性、可靠性等方面。在此处主要把软件性能测试分为以下几个方面(不同的文献和资料对性能测试方法的分类以及每种方法的范围界线都不同。)
BaCpv-Q2|z0Ø 负载压力测试51Testing软件测试网zb5e4@7Q
Y
Ø 配置测试51Testing软件测试网5]&?S"Q/w/U
Ø 失效恢复测试51Testing软件测试网1f|} @(s|"c\"nq
2.1负载压力测试
MMmh6J4Z8g0负载测试是通过逐步增加系统的负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载的测试。该测试的特点:51Testing软件测试网SpV AjY
(1) 这种测试方法主要目的是找到系统处理能力的极限51Testing软件测试网!\#SivQ
(2) 这种测试需要在给定的测试环境下进行,通常需要考虑被测系统的业务压力量和典型场景,使的测试结果具有业务上的意义
-_
\Gx e4Pr0(3) 这种测试方法一般用来了解系统的性能容量,或是配合性能调优来使用
F~8L Pa3SZ*m0压力测试是通过逐步增加系统的负载,测试系统性能的变化,并最终确定在什么负载条件下系统性能处于失效状态,并以此来获得系统能够提供的最大服务级别的测试。通俗的讲,压力测试是为了发现在什么条件下系统的性能会变的不可接受。可见,压力测试是一种特定类型的负载测试。
:PIw{^1k^0负载压力测试有助于确认被测系统是否能支持性能需求,以及预期的负载增长等。负载压力测试不只是关注不同负载场景下的响应时间等指标,它也要通过测试来发现在不同负载场景下会出现的,例如速度变慢、内存泄露等问题的原因。因此,应该在开发过程中尽可能早的进行负载压力测试。51Testing软件测试网
le!\%HD+z
负载压力测试是性能测试的重要组成部分,负载压力测试包括并发测试、疲劳强度测试、大数据量测试等内容。
C0k^,z{6hN02.1.1负载压力测试解决方案
$DW+Z0^
i9r4U1[01,并发测试51Testing软件测试网h(j&V%HZ
并发测试方法通过模拟用户的并发访问,测试多用户并发访问同一个应用、同一个模块或者数据时是否存在死锁或者其他性能问题。系统的并发测试是负载压力测试的最主要的组成部分。
B,d([b"X/F{0并发测试方法具有以下特点:
R]}G&M7|;EF2u(Z0(1)以真实的业务为依据,选择有代表性的、关键的业务操作设计测试案例,主要目的是发现系统中隐藏的并发访问时的问题。例如系统中的内存泄露、线程琐和资源争用等方面的问题。下面列出一些主要关注的问题:51Testing软件测试网A/b } JW`
问题类别 &Cz4CQ+lpx"D0 | 问题描述51Testing软件测试网o:Y+Z]Z(HB$jzM |
v
B+f-e&Sk0内存问题 ntyL,}/[0 | 是否有内存泄露51Testing软件测试网A5a2iV*H%vEY!VF1sN |
是否有太多的临时对象 E"q X2p(?)xd0 |
是否有太多的超过设计生命周期的对象51Testing软件测试网`:Bq m+Mi |
数据库问题
ANz6B E9{6Q0_5J0 | 是否有数据库死锁 A7{v:dZRm0 |
是否经常出现长事务 eI%yi5~ f
?&N0 |
线程/进程问题51Testing软件测试网ed$W2u*caepM | 是否出现线程/进程同步失败 "|*X2\hD0 |
其他问题51Testing软件测试网4o0D}]E}DO | 是否出现资源争用导致死锁51Testing软件测试网c Btf2c-iwx/?6T |
J#\zwI0h9B)u3J,g0 | 是否没有正确处理异常导致系统死锁51Testing软件测试网/NF0nY K,h |
(2)这种性能测试方法可以在开发的各个阶段使用,需要相关的测试工具配合和支持。
'M ~I
W(q:EU0并发测试可以针对整个系统进行,也可以仅仅为了验证某种架构或是设计的合理性而进行,因此其可以在开发的各个阶段使用。一般来说,并发测试除了需要性能测试工具进行并发负载的产生外,还需要一些其他工具进行代码级别的检查和定位。如:Devpartner工具、JProfile工具、JProbe工具等可以在这方面发挥作用。
.Lt"[uQ;[I02,疲劳强度测试51Testing软件测试网`Qm1x[1FCQ9X_
疲劳测试是采用系统稳定运行情况下能够支持的最大并发用户数,持续执行一段时间,通过综合分析交易执行指标和资源监控指标来确定系统处理最大工作量强度性能的过程。
@5p C"Q4Xy1|8y.A0Ø 日常业务疲劳强度模拟
pi$F oa3h y4amT\5z3g0日常业务疲劳强度测试就是模拟系统的日常业务,持续执行一段时间,暴露系统的性能问题,例如内存泄露、资源争用等,分析与调整的方法与并发测试是非常相似的。
*g+`-u;B:u1K5V0Ø 高峰业务疲劳强度模拟51Testing软件测试网myb(A+Y%N
一般情况系统运行都有其高峰期,所以疲劳强度测试必须要模拟这样的高峰业务。我们可以看到这样的负载是对系统的双重考验,既包括负载,又包括长时间。这里我们需要对“一段时间”有个合理的选择,这个时间指标要满足两个主要条件,一是这段时间所处理的交易量要达到系统疲劳强度需求的业务量;二是这段测试周期中必须通过加大负载,以及尽可能长的测试周期来保证疲劳强度测试。
'Q sNf/N3uu03,大数据量测试51Testing软件测试网~wMA
ka
大数据量测试可以分为两种类型:针对某些系统存储、传输、统计、查询等业务进行大数据量的独立数据量测试;与压力负载性能测试、疲劳性能测试相结合的综合数据量测试方案。
Vh:d(wzm2]Yo:G0Ø 独立数据量测试51Testing软件测试网;D m:BmP&Rlv6r
针对某些系统存储、传输、统计、查询等业务进行大数据量的独立数据量测试。例如,对某些系统经常会有上传、下载的操作,操作的对象可能就是大数据量,包括图片文件、音频文件或者视频文件等。还有些系统存在大量的批处理任务,批处理任务就是指一次操作将对数据库中大量数据进行互斥访问的数据库事务。这种类型的事务通常是更新同一个数据库表中数千项乃至更多的数据。51Testing软件测试网`C|Y8y#n
Ø 综合数据量测试
S,x^L4kPaG.d'CtO0我们提出“一定的数据量是并发测试与疲劳强度测试的基础”,在并发测试和疲劳强度测试的过程中,如果不考虑数据量对系统性能的影响,无疑会带来一个缺陷。因此在测试实施过程中,我们要采用并发测试、疲劳强度测试以及大数据量测试相结合的综合测试方案。
9|K~I,?f1I02.2配置测试51Testing软件测试网!JL0w3b-W
配置测试方法通过对被测系统的软/硬件环境的调整,了解各种不同环境对系统性能影响程度,从而找到系统各项资源的最优分配原则。这种测试有如下特点:
.SP4FB-C2X%y8Y1z0(1) 这种测试方法的主要目的是了解各种不同因素对系统性能影响的程度,从而判断出最值得进行的调优操作。此配置测试方法不同与功能测试并列的那个“配置测试”方法。对整个系统来说,配置测试是针对软件而言,其主要目的是验证软件能否在不同的软硬件环境中正常运行,其主要是功能验证。而这里提到的配置测试方法,是在性能测试领域内的配置测试方法,它的主要目的是了解各种因素对系统性能的影响程度,从而判断出对性能影响最大的因素。
#t2l _ P#o$q,e([0(2) 这种测试方法一般在对系统有初步了解后进行。需要在确定的环境和操作步骤、确定的压力条件下进行。该方法在每次操作执行测试时更换、扩充硬件设备,调整网络环境,调整应用服务器和数据库服务器的参数设置,比较每次测试结果,从而确定各个因素对系统的影响,找出影响最大的因素。
?D(z6~z
r i"P0(3) 这种性能测试方法一般用于性能调优和能力规划。
|4hB,],LL02.3失效恢复测试
"E[Y)Z?
f3n0失效恢复测试是针对有冗余设备和负载均衡的系统设计的。这种测试方法可以用来检验如果系统局部发生故障,用户是否能够继续使用系统;以及如果这种情况发生,用户将受到多大程度的影响。该方法具有以下特点:
~5UA#o/a`0(1) 该测试方法主要目的是验证在局部故障情况下,系统能否继续使用。失效恢复测试方法可以模拟一台或几台设备故障,验证预期的恢复技术是否能够发挥作用。51Testing软件测试网3n:J'nO3Dgx
(2) 这种测试方法还需要指出,当问题发生时“能支持多少用户访问”的结论和“采取何种应急措施”的方案。
3]7v{:jpf R0(3) 一般来说,不是所有的系统都需要这种类型的测试,只有对系统持续运行指标有明确要求的系统才需要进行这种类型的测试。51Testing软件测试网
R[H7E.v$S
三&