51Testing软件测试网?Ic x8zLoadrunner性能测试指标分析51Testing软件测试网"o_9j$K0C:oV ]hl
hUkP%Im0WZ%x DHy%d0(写完这篇总结,我自己都迷糊,希望有大大看到指点迷津一下,也希望各位看文的博友能提一些建议)51Testing软件测试网?:qQKpE
51Testing软件测试网Y:D0~~7Z"M5O响应博友们的建议,修改一下标题~~~
9xC8mz8k.C W$IH0%xR(x.^&f;g0PS:本人在51testing和sina blog上的文章全部为原创,转载请注明出处!!
'h$}9R1W"F&|uk051Testing软件测试网7Jg.O$x0m昨晚在家无所事事上网时,有个熬夜加班的网友问了我一个问题,如果估算系统一天的最大承载用户数?其实最近在做项目的过程中,我也是很迷茫(估计还是我WEB相关知识的匮乏,很多都不知道的原因),在和他讨论的过程中,心里也在不断的质疑自己的理解是否正确,结果讨论到最后,心里也没底,郁闷..
"g1R9C;mn?0bm"XJsz2W%jXQY(S0今天在论坛里看到一个老帖:http://bbs.51testing.com/thread-10681-1-1.html51Testing软件测试网 cIih g1W*cA+P4o
发现很多牛人(PCL以及sunshinelius)的回复,仔细的琢磨了一下,觉得自己的思路还是没有错,下面整理一下:
!cAVLh2h5pG051Testing软件测试网
piDu#K1、从其他项目经验库或者项目其他角色处获得的性能指标51Testing软件测试网w Mj"^?+Zu(c
A、项目经验库51Testing软件测试网2gF%s1y~zyR@l
前些日子拜读了csdn的一个专家的文章,他描述了一个完整的性能测试流程(虽然简单了点儿~),但是我还是从其中找到了一些我想要的东西,包括建立项目经验库;51Testing软件测试网!D*yQJx`4t?
每次测试结束
;u#Ih2ciD0◇把项目的性能指标(平均响应时间、最大用户数、最大并发数等web服务器或数据库的性能指标)收集起来,建立性能指标库
!h$B3],SfikR0◇把脚本代码及相关文件(参数化数据文件)收集整理并存档(重点是可以重用的部分),建立脚本代码库51Testing软件测试网fJ)g1m+h)\\[
◇把测试方案场景设计(可能包含在测试计划里)收集整理,建立测试方案设计库
6fa5Ridg._/wm6e0◇把测试结果(Analysis结果以及你的性能测试报告)收集整理,建立测试结果备份库51Testing软件测试网*lU2P,sF'gZ0P6I
◇把项目性能调优过程(包括负载均衡配置、IIS或tomcat或apache的设置更改、应用程序调优更改、数据库配置调优方法等)记录下来,形成调优方法库51Testing软件测试网u-tPc"`
如果仔细的建立上面的工作模式并积极积累,再经过5-10个左右的不同的项目,相信大家再做项目时,不能说是轻松,只能说是异常轻松了,呵呵51Testing软件测试网1C$J:\TLSB
至于怎么记录这些信息,使用什么工具比较好,各位自行挖掘!51Testing软件测试网^!V5H%W#~}@"b
51Testing软件测试网~ Ulw,CD"LlB、项目需求51Testing软件测试网8K1QM T(ixN,z
有经验的系统分析师或者架构师,在设计项目需求的时候都会包含项目的性能指标,这些指标是我们性能测试方案以及场景设计的主要参考51Testing软件测试网 oMW%t`Z)j;r
q!v8eo*Cx0C、模糊的目标51Testing软件测试网)_'^`vI g B
不能否认的是,现在很多开发人员甚至开发经理,项目经理这些人物,其实对性能测试以及项目的性能指标概念也是非常模糊,他们的经验可能大多都没有规范的性能测试这块儿
!bk)Yy8\D!p\;n&y(I051Testing软件测试网O(]^X[5_UhO的,而在不同的公司结构里,这些人也会提出一些非常模糊的性能指标让我们来测试;就像文章开始的那位网友遇到的,她的领导大口一张,出来一个指标,汗!!通常这类模糊的目标,我们在测试的报告中都要提供,否则领导们会翻脸、PK、爆踹各位云云,没准儿也会sm哦!!那怎么解决呢??看pcl2004_27大大的一句话:51Testing软件测试网"eeP8c:E
“性能测试是个收集分析数据的过程”;
M'Nu;X.w|}yRa0所以,我们把模糊的性能指标合理的分析解释为LR的一些标准元素,这样我们就可以理解并且进行测试了!51Testing软件测试网*Zz+^,TX5\
Hy'mcR }
51Testing软件测试网wupT`Z2w-}2、尝试把性能指标分析
%Y5B E"Z-e.sl0还是拿“如果估算系统一天的最大承载用户数?”为例子吧!首先:51Testing软件测试网.]'T(j
~|X
w
◇这个所谓的用户数到底是啥东西?
BL*e/g7T n$V+O0领导们的意思可能是真实的用户,而真实的用户对于我们来说几乎无法统计,所以这里我用虚拟用户来进行统计;
)d#\9]S
R#f0要统计一天的用户数,我们必须分析虚拟用户的具体访问行为,我管这个指标叫“生命周期”:生命周期就是一个用户从登录到退出之间所做的操作,也就是迭代次数;51Testing软件测试网2c/h"Z6OJb5x
比如:我们打开news.sina.com.cn,看了3个新闻后关闭,这就是一个用户的生命周期,在这个生命周期里虚拟用户做了3次迭代操作;比如说我们登录论坛后回帖5个后退出,这也是一个生命周期,在这个生命周期里虚拟用户做了5次迭代操作;这里恐怕有人就要问了,我登录论坛后,我可能发3个新帖,回5个帖,然后浏览20个别人的帖后才退出啊!这样,我们的分析就更必须复杂了,碰到这种情况,我通常把一个用户分成3个独立的用户行为,既第一个行为发了3个新帖,第二个行为回了5个帖,第三个行为浏览了20个别人的帖,用脚51Testing软件测试网9k%MY6dm6L
51Testing软件测试网4A%N*hm2IFJ8u本实现如下:
J"j@9fS0Action()
BS7B/x C7p9`f0{
I&xt]T0 //发帖的脚本;51Testing软件测试网 Xc J4ij'L]`
}
8H(RN
@VA|0|
vM*Y.B0Action2()51Testing软件测试网c;B,K6GWD0}0RDbk
{
T/D#s*O$p9@Y||0 //回帖的脚本;51Testing软件测试网%}2[ pl F1f.nG%\0j
U
}51Testing软件测试网C1o I
[Rm_5yz|*^;{
Action3()
*SHz
t{)~0{
C*BF'H~x~L`0 //浏览的脚本;51Testing软件测试网0J/v$UH8M
}
m6zW3iBe.lzWD0然后在runtime-setting里设置action的迭代次数为3,action2的迭代次数为5,action3的迭代次数为20,就搞定了一个虚拟用户的生命周期;但是因为LR不好统计一个vuser生命周期的处理速度(通常我们只是统计事务的响应时间,而我定义的用户生命周期如果包含很多action或事务,而且只能统计每个Action或者事务的TPS,那么我将无法统计整个生命周期的处理速度),所以,应该把所有的事务都放在一个大的事务里去,实现方法如下:51Testing软件测试网5d2V4w&q O
`5S6q;d-J
Action()
#J6E:P&H*Wc0{
^f,q8@Lk0 int i,j,k;51Testing软件测试网,Un6{-v?[ Q'G:c
for(i=0;i<3;i++)51Testing软件测试网:zl8w6S$K/I~G
{
M7y3V,f-smvo4jx0 //发帖的脚本;51Testing软件测试网C2M|0U hsJ
}51Testing软件测试网(g}D'|W-z]Rx
for(j=0;j<5;j++)
5La lE'lBN0 {51Testing软件测试网)p1`EC3y3H*R6I
//回帖的脚本;51Testing软件测试网
aWY_,rm:c]ba:J
}
UaOl0m"C0 for(k=0;k<20;k++)51Testing软件测试网1B6] lE$p!^2y@K
{51Testing软件测试网zi.On'oMS
//浏览的脚本;51Testing软件测试网%Zn?_ N#B
~
}
+Xb+v)kqL0}
.fEa6]G6VAY0这样,我就可以统计了。
?tG4x;o
Ds%U0k0通过与项目其他角色的探讨与分析,讨论出目标系统的典型用户生命周期(记得加入思考时间模拟用户的真实访问),然后设计好脚本。51Testing软件测试网~ ?&@5LNz7xSj
)]%n.H.K8p u0◇何为最大承载?
6?5P&PmrYz0既然是最大,那么就一定是一个极值;因为通常在负载量不断加大的情况下,服务器会有性能下降,从而造成处理能力下降和速度慢,所以我认为这个极值是处理典型用户的生命周期的最快速度。
xy3W9^"Kz~e0获取这个速度,我认为有以下几个方法(写完下面的我也很郁闷,汗~):
E.]tC ],K;r0◎可以用不断增加负载的加压场景测试出TPS最大值时的虚拟用户数,然后以这个虚拟用户数为目标,查看TPS是否趋于稳定并且可以达到那个最大值;
$Jomv^/`9I0◎可以以TPS为目标,建立一个较高的目标,然后加载足够的虚拟用户,查看TPS实际最大可以达到多少(因为在以目标的场景中,可能只加载几十个用户也能达到TPS最大值,郁闷);
]N6f:lciB0◎也可以直接设计场景运行10分钟或者半小时,查看处理典型用户生命周期pass数(要在系统稳定的情况下,通常事务通过率应超过99%),然后除以时间算出典型用户生命周期的TPS.51Testing软件测试网ZB_'DrM
4M:|s,m#}7z051Testing软件测试网t*?7Wo*Qs4\
◇算出一天的用户处理量51Testing软件测试网&o7xd^n D/m dfV
假设那位网友测出这个速度为:N个典型用户的声明周期/秒(这里注意这个速度一定是趋于稳定的),这样我们就可以算出1天(24h)的时间内最快能处理完多少个典型用户生命周期的个数(N*60*60*24),从而得到系统一天的最大承载用户数。
;d4FZ,I-?cBNT051Testing软件测试网o2A,BU!?WS#S
s9]P^t6R:xF0欢迎各位同行大拿批评指教,可直接在留言板留言,也可以加msn: qiguojie at hotmail dot com 或者 QQ 41022551Testing软件测试网 OJH B9P