使用LodRunner实现大负载测试的四部曲
上一篇 / 下一篇 2012-01-20 13:52:42 / 个人分类:lr
k w&v:_n+tx'B9a72047 第一步:配置系统参数51Testing软件测试网kc&QJi:iX+h
U[uJV72047 大并发用户的情况下,会出现如下问题:51Testing软件测试网:PF~$L1]#L-l
1CI:G^2D'aR72047 1) 当采用netstat命令时,看到很多Socket处于“WAIT”状态
kmY/U K~Y(b72047)~h?8LO#X72047 2) 负载增大时连接失败
M;x]g4Gxp7204751Testing软件测试网1?y~.]n._9J3) mmdrv的句柄数 随着虚拟用户的运行而增加51Testing软件测试网&D[0U;l(p u5jH
51Testing软件测试网3OM*yj1QD%[4) 当建立连接时出现"No buffer space available"错误信息51Testing软件测试网{`8sh5G _?u
Zg9V-qHq_i(\72047 解决方法51Testing软件测试网D(r;gvz"bq
.d9o6P3`9g*[5E72047 编辑以下注册表项:51Testing软件测试网c)]m7x^N v~c
/m^3v;@mQ72047 1) 设置
!PyE'] V;If2Q7204751Testing软件测试网pakg_DH,M6`“HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Par
"F"q{xmK b7s1nI+h7204751Testing软件测试网1n~WP(be$E(Xameters\TcpTimedWaitDelay” 为30
&|#_"`xx6[)p72047.} v(m['mP1~!J:Vr72047 2) 设置
4`5V |C/cO'}q.e)~72047Q-k5R't-@2s7y:h&OS72047 “HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Par
j4_N+R#sf72047tm[t,T7vvO7p72047 ameters\MaxUserPort”为6553451Testing软件测试网7V8b-}Mh,EKy
51Testing软件测试网zK` c,B1J|2F6e|3) 设置
cp K` _2g/FS7204751Testing软件测试网^}"R:j? T`!RKT“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session51Testing软件测试网zcnZoX
n|[/tt T*MD,WT72047 Manager\Sub Systems\Windows” 为SharedSection为4096
.M `%qv9F-@72047@)va`"T ~L72047 4) 脚本的第一行加上web_set_sockets_option(“SHUTDOWN_MODE”,”ABRUPT”)函数将SHUTDOWN_MODE从默认模式GRACEFUL改为ABRUPT51Testing软件测试网;O(f$v$|OZ
51Testing软件测试网?-x7qn2} x第二步:配置LR
S^&j#\3o5t7204751Testing软件测试网)i[)]Z]0ZLp&l1) 脚本运行时设置51Testing软件测试网oP7G8BD\gO ?J^5Q
51Testing软件测试网2oJ,P#[4y$Bj\● 消息处理时勾选"send message only when error occurs"
O*v^_"\ iW$?/](w%Z2{q72047PW6W|s,S72047 ● 禁用snapshot on error51Testing软件测试网cXI$^S%z'{C0{
I0KC6BUDT4[!d72047 ● "define each step as a transaction"取消勾选
pi?DB({720477]a3K\ h JR72047 ● 取消"simulate browser cache"勾选, 勾选“simulate new user on each iteration”和它的子选项51Testing软件测试网wB0m'E7kE$A(A
51Testing软件测试网5hA K`B|R9[2) 将脚本中web_url函数中的"Mode=HTML"默认方式改为"Mode=HTTP",这将减小LG机器上的压力(不解析HTML)
g.V,Y UhQ{:K V){7204751Testing软件测试网tHDfqjs!r,y?3) 将在controller的diagnostics->configuration中,禁止webpage breakdown51Testing软件测试网? ~7P4u]Y7VP
4dQQ|U.w72047 4) 在Controller通过Tools > Options > Run-Time Settings限制同一时间在所有LG上初始化虚拟用户的数值,设置会被每台LG获得,这样做的目的是为了避免在脚本执行的初始阶段LG系统资源的过度利用.
sWB&HTQ+rP"P7204751Testing软件测试网E4s'~3O/J/SE.[5E5) 修改系统目录下的wlrun7.ini限制测试运行时controller存储的错误数量,在[output]选项中,作如下修改
mDi`#Y{.ey7204751Testing软件测试网CLU a ~7GFlagLimitOutputMessages=151Testing软件测试网.ISa&CaX
51Testing软件测试网,}pMx7h0tMaxNumberOfOutputMessages=<errors count> (默认为10000)51Testing软件测试网v U0yR A-m
-g1f!?YQvy Um72047 6) 在Controller通过Tools>Options>Monitors修改monitor的采样率,这将减小测试运行时Controller的CPU利用率,如下图所示:51Testing软件测试网"D(W.n8kYoq&]
3k&z~,{QcmWlD-[;z72047 7) 修改wlrun7.ini中的ExportMessagesToFile=1重定向输出信息到.txt文件而不是到MDB文件51Testing软件测试网d:L!eyMX\
5A)?jny7G6s72047 此外:关闭Controller和LG上的防病毒,防间谍软件,关于运行在以上电脑上不要的Windows服务;在Controller不要运行虚拟用户;不要频繁打开Error/Output窗口,因为这将增加额外Controller上额外的数据库连接数这些都是对进行成功的大负载测试的有益的建议。51Testing软件测试网T'ld\{!X(SYb
[?^]dX&D72047 第三步:修改脚本
5yDA-x0btNk7204751Testing软件测试网7CK&O\1m!ij)?1) 在负载测试时,保证Controller和Generator的网络通信非常重要,大量的信息(error message,output message)大并发负载测试有着很大的负面影响
-q/c!S Z5r+o|Ey7204751Testing软件测试网*t&Z?&z m*rg1sg如以下两例51Testing软件测试网1rbY.eH Au
!U4KHX#rC'C&ny~72047 ------------------示例1-----------------------
%]w"H:tC o0P3o72047w%gj {4j7e$e#b72047 lr_vuser_status_message("pIteration: %s -START Action", lr_eval_string("{pIteration}"));
%Q|j}3D]W72047^ _:xCu,kl72047 lr_output_message("pIteration: %s -START Action", lr_eval_string("{pIteration}"));
l9](mlhS72047$O(E7v9BV#u }ml72047 ------------------示例2-------------------------51Testing软件测试网s k%{(a`*srV+Ki
uw*w @\$\&qX}72047 web_reg_find("Text=Time on Server", "SaveCount=cErr", ..);
} _F4RSiZ@(h7204751Testing软件测试网y%`^:rr sUtjI.Lweb_url( some url …);51Testing软件测试网'~X$mW4c'J1w:v3l
51Testing软件测试网B9z,ALaif (atoi(lr_eval_string("{cErr}"))>0) {51Testing软件测试网cd!`/c$c;MzSR3Z2}
fLU_.m8jM72047 lr_error_message(some message);51Testing软件测试网-J W!I I{%~}x(J
O&Gf&y,oO,K,`72047 lr_end_transaction("Request_Content_Page", LR_FAIL);51Testing软件测试网s/v&~!v/x VQ2Rm
%\Dn6?E7C&@ YL Ln72047 }51Testing软件测试网&qV7K*Z&S/h
51Testing软件测试网%\K hr"@8U8F-----------------------------------------------------------------------------
&U,pxN_L8zE7204751Testing软件测试网/x7^ys9P}0I0Vz*u这些语句都仅仅应该出现在脚本调试时而不应该出现在负载测试时的脚本中,在正式的负载测试前,注释掉这些语句。
B[7\D2f8oa7204751Testing软件测试网-YK"sf$aTJ'W6|7Eg$@Ld2) 把脚本中sleep()函数改为lr_think_time()函数,lr_think_time将控制权交还给LR,这意味着LR可以做其他事情。不要忽略lr_think_time,适用参数值以模拟更精确的负载同时也可减小LG的压力。
5N CJ9h_%vdKyk{72047ZlO3_C*@-U(cQ:X$l#m72047 3) 在web_reg_save_param函数 添加 “Notfound=empty”51Testing软件测试网iJ1k/Q]'A-h*zo
/V&_5[4\Y9r~"v)]72047 第四步:设置组策略51Testing软件测试网1H_/rK+E-\M
y3KYNn.rO72047 大负载测试时会有以下情况发生
B cF&Q-O-S*a7204751Testing软件测试网c\3V/I8F/N● 产生很多错误,数据量大于1GB
+F@}3[2EKa72047R0SVv%z%NH72047 ● 假如每秒产生1000条左右错误的话,Controller的行为将很难预测51Testing软件测试网'd1}PR-Uje,X
6j;Ci6[im"a3_#b(b72047 ● 压力测试产生很多运行数据
&bU |7O0l;_nm,Z7204751Testing软件测试网Y uF.]C9v*MY6F0B*b X这些问题可以通过设置一个合理的组策略避免,以下举一个例子说明
B0y4GP~^a[#~2F72047jw(Q;c bgh };T@72047 场景为1000个虚拟用户,用一个Group运行
Rv%hU$|1y/EA72047S kAo4McxR,sO72047 这时把这个Group分为两个Group:51Testing软件测试网5Yt7nI4{Orr
6vG|aY*s[w\*{y72047 G1-〉100 Vusers
pk H-o-hnh&R720473{g0XC%x+wm,UX72047 G2-〉900 Vusers
5]V8Le uq,T yU7204751Testing软件测试网0? D0H*js6j在G2的设置中,添加以下命令行:51Testing软件测试网y^qbb
51Testing软件测试网;T(aAq4|,n–disable_data -disable_messages51Testing软件测试网ysG5C~{ ft
51Testing软件测试网+wo)H.w;F&igF-t6Q0j-disable_data – 指示Group不要发送和写入运行数据
g:XG3G,x7[e`7204751Testing软件测试网SNG._`,I-disable_messages – 指示Group不要发送任何信息(errors,logs)给Controller51Testing软件测试网Wxlx1g
51Testing软件测试网/Q/G:G4C.p结尾语:单从测试而言,SilkPerformer和QALoad以及其他开源工具皆可实现压力测试的目的,本文介绍的内容从方法上对于其他工具也适用,但实现细节会略有差别。祝大家成功!
N:lX/uKu&f?*~2}S72047TAG: