51Testing软件测试网1PK)O JA1ML]7|woLoadrunner性能测试指标分析
[!PPuBT0Hbl.eU^5?0(写完这篇总结,我自己都迷糊,希望有大大看到指点迷津一下,也希望各位看文的博友能提一些建议)
:pbx%V5W1k/Y0rE&N$F
xy0响应博友们的建议,修改一下标题~~~51Testing软件测试网'QKI7k)o;q&U;s
51Testing软件测试网B1TCVN5mdPS:本人在51testing和sina blog上的文章全部为原创,转载请注明出处!!
&_(JnPV
SG,{B#g04V,T\%nvg d0昨晚在家无所事事上网时,有个熬夜加班的网友问了我一个问题,如果估算系统一天的最大承载用户数?其实最近在做项目的过程中,我也是很迷茫(估计还是我WEB相关知识的匮乏,很多都不知道的原因),在和他讨论的过程中,心里也在不断的质疑自己的理解是否正确,结果讨论到最后,心里也没底,郁闷..51Testing软件测试网9dp0em$}4D+N'Q
51Testing软件测试网xWxk!y;Wn P B今天在论坛里看到一个老帖:http://bbs.51testing.com/thread-10681-1-1.html51Testing软件测试网P+g9XB+g/j)o-[
发现很多牛人(PCL以及sunshinelius)的回复,仔细的琢磨了一下,觉得自己的思路还是没有错,下面整理一下:51Testing软件测试网P&FM ^,Ya sR9z
aCZ@B3RgH6F01、从其他项目经验库或者项目其他角色处获得的性能指标
t0P)Z5O!M;J0A、项目经验库51Testing软件测试网,rS ^i+W.R
前些日子拜读了csdn的一个专家的文章,他描述了一个完整的性能测试流程(虽然简单了点儿~),但是我还是从其中找到了一些我想要的东西,包括建立项目经验库;51Testing软件测试网2@D&F3lG:Q+bS
每次测试结束51Testing软件测试网FnCh$jv
◇把项目的性能指标(平均响应时间、最大用户数、最大并发数等web服务器或数据库的性能指标)收集起来,建立性能指标库
!@r
|xU/D8Qb0◇把脚本代码及相关文件(参数化数据文件)收集整理并存档(重点是可以重用的部分),建立脚本代码库
Qy ~9BE I9L{#r0◇把测试方案场景设计(可能包含在测试计划里)收集整理,建立测试方案设计库51Testing软件测试网*J0~$\1n?3@1@]cN
◇把测试结果(Analysis结果以及你的性能测试报告)收集整理,建立测试结果备份库
hQj%J]&`0◇把项目性能调优过程(包括负载均衡配置、IIS或tomcat或apache的设置更改、应用程序调优更改、数据库配置调优方法等)记录下来,形成调优方法库51Testing软件测试网2Oc#B;j2k)l
如果仔细的建立上面的工作模式并积极积累,再经过5-10个左右的不同的项目,相信大家再做项目时,不能说是轻松,只能说是异常轻松了,呵呵51Testing软件测试网Zz7EBZ
至于怎么记录这些信息,使用什么工具比较好,各位自行挖掘!51Testing软件测试网1t7F"W0sU%X
L/X7ZH9eZ2v'B0B、项目需求51Testing软件测试网;B0bo]SV.I:V%E9K
有经验的系统分析师或者架构师,在设计项目需求的时候都会包含项目的性能指标,这些指标是我们性能测试方案以及场景设计的主要参考51Testing软件测试网7FuGj+A%SlsS
#z:mr)I+tM-iB0C、模糊的目标
%z.qo-e3G`V/b0不能否认的是,现在很多开发人员甚至开发经理,项目经理这些人物,其实对性能测试以及项目的性能指标概念也是非常模糊,他们的经验可能大多都没有规范的性能测试这块儿51Testing软件测试网5vkT4o0a%f
D^`8NV0的,而在不同的公司结构里,这些人也会提出一些非常模糊的性能指标让我们来测试;就像文章开始的那位网友遇到的,她的领导大口一张,出来一个指标,汗!!通常这类模糊的目标,我们在测试的报告中都要提供,否则领导们会翻脸、PK、爆踹各位云云,没准儿也会sm哦!!那怎么解决呢??看pcl2004_27大大的一句话:
&MP]~@]+jls0“性能测试是个收集分析数据的过程”;51Testing软件测试网g/ag%XW_
所以,我们把模糊的性能指标合理的分析解释为LR的一些标准元素,这样我们就可以理解并且进行测试了!
.|Z5yu U'h*M051Testing软件测试网Hz8j/b3L!a R.yg0^2、尝试把性能指标分析51Testing软件测试网tD#z(^6Zo-K
还是拿“如果估算系统一天的最大承载用户数?”为例子吧!首先:
ub*T/o Dg \0◇这个所谓的用户数到底是啥东西?51Testing软件测试网\2Td
c7C$|
]
领导们的意思可能是真实的用户,而真实的用户对于我们来说几乎无法统计,所以这里我用虚拟用户来进行统计;
SiP du0要统计一天的用户数,我们必须分析虚拟用户的具体访问行为,我管这个指标叫“生命周期”:生命周期就是一个用户从登录到退出之间所做的操作,也就是迭代次数;
P:~gm b1\0aFP0比如:我们打开news.sina.com.cn,看了3个新闻后关闭,这就是一个用户的生命周期,在这个生命周期里虚拟用户做了3次迭代操作;比如说我们登录论坛后回帖5个后退出,这也是一个生命周期,在这个生命周期里虚拟用户做了5次迭代操作;这里恐怕有人就要问了,我登录论坛后,我可能发3个新帖,回5个帖,然后浏览20个别人的帖后才退出啊!这样,我们的分析就更必须复杂了,碰到这种情况,我通常把一个用户分成3个独立的用户行为,既第一个行为发了3个新帖,第二个行为回了5个帖,第三个行为浏览了20个别人的帖,用脚
']rv\Pw s`0A"SI+C#{]:DW/j0本实现如下:
o"hl\p0Action()
oF)Y)B5B9b0{51Testing软件测试网PuLq8k;rk
//发帖的脚本;51Testing软件测试网I)C!\6GGpfVM(T
}51Testing软件测试网f+a$[M$o{.e?*N
Action2()51Testing软件测试网I L!@ o7et.[9aF;j`
{51Testing软件测试网7r%k,G:N1Gb
//回帖的脚本;51Testing软件测试网\"xQu$^i![o'R
}
"e[ R}[F6y'\0Action3()
d&xMms[ k3Q0S&i0{51Testing软件测试网
OlI@,e~/p,M
//浏览的脚本;
9cf4x"r
KU!rA0}
J&{s6Fo0然后在runtime-setting里设置action的迭代次数为3,action2的迭代次数为5,action3的迭代次数为20,就搞定了一个虚拟用户的生命周期;但是因为LR不好统计一个vuser生命周期的处理速度(通常我们只是统计事务的响应时间,而我定义的用户生命周期如果包含很多action或事务,而且只能统计每个Action或者事务的TPS,那么我将无法统计整个生命周期的处理速度),所以,应该把所有的事务都放在一个大的事务里去,实现方法如下:51Testing软件测试网e,f_:Q&C#rb
Action()
:PfCjc"R3E#k%O0{51Testing软件测试网!kp~C"mr D?.B7E
int i,j,k;
#T~-zfn*N0 for(i=0;i<3;i++)
"{ZDE+cDd0 {51Testing软件测试网3GB7A,BZ5u
//发帖的脚本;
!B
^D#UFdzE.t0 }
k
yF)Vh)ON0 for(j=0;j<5;j++)51Testing软件测试网U9s0~]mn4Wu#Vh~
{
o(RQ?$]M0C0 //回帖的脚本;
(W*rF
q)W&w0 }
5uw&y s$cMpk0 for(k=0;k<20;k++)
)ME u~2~"mfV:}0 {51Testing软件测试网-Cr3d)~^S6o
//浏览的脚本;
"ZIm,l{Ow0 }
B5X6[+PR/k*R1J4e0}
q8d p$f"vO
f0这样,我就可以统计了。
y1P9V#V!t0通过与项目其他角色的探讨与分析,讨论出目标系统的典型用户生命周期(记得加入思考时间模拟用户的真实访问),然后设计好脚本。
-]E1U5s%|0AU%G[U`u8Q6R@0◇何为最大承载?51Testing软件测试网la9jE{1eBW
@
既然是最大,那么就一定是一个极值;因为通常在负载量不断加大的情况下,服务器会有性能下降,从而造成处理能力下降和速度慢,所以我认为这个极值是处理典型用户的生命周期的最快速度。
Eq`D.^B@K0获取这个速度,我认为有以下几个方法(写完下面的我也很郁闷,汗~):51Testing软件测试网A)lK:U"s3lE
◎可以用不断增加负载的加压场景测试出TPS最大值时的虚拟用户数,然后以这个虚拟用户数为目标,查看TPS是否趋于稳定并且可以达到那个最大值;51Testing软件测试网y+JD-t!U'vU
◎可以以TPS为目标,建立一个较高的目标,然后加载足够的虚拟用户,查看TPS实际最大可以达到多少(因为在以目标的场景中,可能只加载几十个用户也能达到TPS最大值,郁闷);51Testing软件测试网NI%S~"I@
◎也可以直接设计场景运行10分钟或者半小时,查看处理典型用户生命周期pass数(要在系统稳定的情况下,通常事务通过率应超过99%),然后除以时间算出典型用户生命周期的TPS.
H9J*t
Yj
} s05fG`q,z#lK0
,O$R]*E7g ^#[0◇算出一天的用户处理量51Testing软件测试网(PmA:l"Av"eH7@q g
假设那位网友测出这个速度为:N个典型用户的声明周期/秒(这里注意这个速度一定是趋于稳定的),这样我们就可以算出1天(24h)的时间内最快能处理完多少个典型用户生命周期的个数(N*60*60*24),从而得到系统一天的最大承载用户数。
IsZF3H051Testing软件测试网$]r:zi qR5P51Testing软件测试网;NDO gbz9fQb,|
欢迎各位同行大拿批评指教,可直接在留言板留言,也可以加msn: qiguojie at hotmail dot com 或者 QQ 41022551Testing软件测试网$NLEnR/]r s`at