LoadRunner以下简称(LR)是目前业界最流行的压力测试工具,广泛地应用于电信、金融、电力行业。LR安装后文件非常大,这也说明LR是个强大复杂的工具。LR入门的介绍在网上有很多好的文章,它们都很好的介绍了工具的使用。但是对于很多行业级应用,使用LR会同时运行很多虚拟用户数(1000+),本文针对这样的测试类型介绍了一些需要考虑的问题和解决方法,希望给同行一些帮助。
:l+[ u#}cI-{0 51Testing软件测试网 l8q/I4ScZV~2b第一步:配置系统参数
Gk8w Pj7u.@&[ A0e#ha!p_g-d0 大并发用户的情况下,会出现如下问题:
B E+TSZ9n0 51Testing软件测试网K!i?X` fe1) 当采用netstat命令时,看到很多Socket处于“WAIT”状态51Testing软件测试网"~ s C,`5]A-F9s
9r,u t!s2Ga%U0 2) 负载增大时连接失败51Testing软件测试网tl?Zxv/tz W&MN
51Testing软件测试网-Bp-sh$B?Ka(i3) mmdrv的句柄数 随着虚拟用户的运行而增加
'V5_ zm*lt3\'@r(P?n0+e+t ]:c;}$F0 4) 当建立连接时出现"No buffer space available"错误信息51Testing软件测试网3j^2c(hjj
51Testing软件测试网4p^-P/lMX解决方法
-RP_%u0^a0 51Testing软件测试网oS/AP|Yn"A编辑以下注册表项:51Testing软件测试网 ^(t'C~;Mo*P
(xc.S(l,} C,o6F i0 1) 设置51Testing软件测试网?c'BF.x?y
~h8_Naf;`%r0 “HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Par
}j4irb;V [O0i:i:p*~\?X8c)e0 ameters\TcpTimedWaitDelay” 为30
f1W |'D'l)t1uD0W0 51Testing软件测试网,[B!\ \-MS BW2) 设置
S o[6I&xY)F/c0 51Testing软件测试网e)d O w}8G,K%Qm“HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Par51Testing软件测试网*d!Q5]!L4y'Qj \{R
51Testing软件测试网Bx)A)q'zkameters\MaxUserPort”为6553451Testing软件测试网,}#K!pK i
4t,h&@$n.P&A0 3) 设置
(M*H7f%dS4c9zL?0,e.M b7M}6hN A0 “HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session
f'd9pVlpH!]0 51Testing软件测试网f,N$Y[2YB%@_*~Manager\Sub Systems\Windows” 为SharedSection为409651Testing软件测试网+\.W&b(C`z
51Testing软件测试网 y(R*DY&C4) 脚本的第一行加上web_set_sockets_option(“SHUTDOWN_MODE”,”ABRUPT”)函数将SHUTDOWN_MODE从默认模式GRACEFUL改为ABRUPT51Testing软件测试网!|o1g9?lv"M m
h2~;@"np0 第二步:配置LR
)p ?A8QkOv;x W l7b0|Z Q}RO3_.z-Q0 1) 脚本运行时设置51Testing软件测试网^ ^t-L+GW
6_rKG&`5u0bf;X/[0 ● 消息处理时勾选"send message only when error occurs"
g:|d5[,l8^7k00_0m h]zG0 ● 禁用snapshot on error
SBfh]"@"?3~0+AZ;ka%GDft)~0 ● "define each step as a transaction"取消勾选
,U}h0wJ0 51Testing软件测试网3[U y5w#UN#T&@(n● 取消"simulate browser cache"勾选, 勾选“simulate new user on each iteration”和它的子选项
r\+s:bW g0 51Testing软件测试网J6I iR2^o+Vs2) 将脚本中web_url函数中的"Mode=HTML"默认方式改为"Mode=HTTP",这将减小LG机器上的压力(不解析HTML)
F K?Ncu(M0 51Testing软件测试网ZxIE5Q*V@~3) 将在controller的diagnostics->configuration中,禁止web page breakdown
'L3|%P-Q:_4P0 51Testing软件测试网n}v!l+P me.n4) 在Controller通过Tools > Options > Run-Time Settings限制同一时间在所有LG上初始化虚拟用户的数值,设置会被每台LG获得,这样做的目的是为了避免在脚本执行的初始阶段LG系统资源的过度 利用.51Testing软件测试网V/l` mT6l7sr+[+e?
51Testing软件测试网7\rL5k1Cj A5) 修改系统目录下的wlrun7.ini限制测试运行时controller存储的错误数量,在[output]选项中,作如下修改
H-S]p5eC0'? gT2Z]zx] E0 FlagLimitOutputMessages=1
6IRA \B#y8A0 51Testing软件测试网 Uj P-RD U:b2[MaxNumberOfOutputMessages=<errors count> (默认为10000)
YZf ],n"W0X0 51Testing软件测试网Y;fi tOM'S e+}6) 在Controller通过Tools>Options>Monitors修改monitor的采样率,这将减小测试运行时Controller的CPU利用率,如下图所示:
_8d-o`w0 51Testing软件测试网1OQ-fs-z#HY-C(d7) 修改wlrun7.ini中的ExportMessagesToFile=1重定向输出信息到.txt文件而不是到MDB文件
ey:p u#hD c]3^L0!JWhn S+[Bs0 此外:关闭Controller和LG上的防病毒,防间谍软件,关于运行在以上电脑上不要的Windows服务;在Controller不要运行虚拟用户;不要频繁打开Error/Output窗口,因为这将增加额外Controller上额外的数据库连接数这些都是对进行成功的大负载测试的有益的建议。
XchW r0 51Testing软件测试网a?YW;ba8Y}EB第三步:修改脚本
r/MC:l0K0 51Testing软件测试网K"W)|v/Nt0U1) 在负载测试时,保证Controller和Generator的网络通信非常重要,大量的信息(error message,output message)大并发负载测试有着很大的负面影响
7uPZ2M)l$jt0 51Testing软件测试网%Lj"[A#owm:X?g如以下两例51Testing软件测试网 [U _O{:P
51Testing软件测试网*~A(GXq;h)e------------------示例1-----------------------51Testing软件测试网1I-t0C!e!hP
51Testing软件测试网?u/K!QH eE h#? TLlr_vuser_status_message("pIteration: %s -START Action", lr_eval_string("{pIteration}"));51Testing软件测试网8^hK,n w1UDX
51Testing软件测试网2T/W?O QSCV0~lr_output_message("pIteration: %s -START Action", lr_eval_string("{pIteration}"));
+SZ2H5}$f6{0 51Testing软件测试网u2j%F)G Agq^------------------示例2-------------------------51Testing软件测试网8v q(^,p-CX$e8z'?c
51Testing软件测试网1?u7L#J}"]bweb_reg_find("Text=Time on Server", "SaveCount=cErr", ..);
$[Ww8W M.N4CbZ5C2c0 51Testing软件测试网(};sR,b|!T;k7M&Uweb_url( some url …);51Testing软件测试网*k%b5y4X5O(Kj @(Gy
&~y6X(g:oPC0 if (atoi(lr_eval_string("{cErr}"))>0) {51Testing软件测试网8k0BV?dFs8`8w)sZv
51Testing软件测试网%@I#`S$x&@;Fj Qjlr_error_message(some message);
j| n`u0 51Testing软件测试网(tGq/_Y/vWlr_end_transaction("Request_Content_Page", LR_FAIL);51Testing软件测试网up3AamJk!_@U
51Testing软件测试网'w1x?^yq}
(N1aTphY*QFG4h0y? {V^X{b0 -----------------------------------------------------------------------------
-@;u'U Y4as^a9V5^0 51Testing软件测试网Ya8_ P(}?L这些语句都仅仅应该出现在脚本调试时而不应该出现在负载测试时的脚本中,在正式的负载测试前,注释掉这些语句。
G+M8a5R9R~)c9X0 51Testing软件测试网TnI \|Fu9r2) 把脚本中sleep()函数改为lr_think_time()函数,lr_think_time将控制权交还给LR,这意味着LR可以做其他事情。不要忽略lr_think_time,适用参数值以模拟更精确的负载同时也可减小LG的压力。
b3v*A3Jq:T4OM m0 51Testing软件测试网IO#z`?-_%B3) 在web_reg_save_param函数 添加 “Notfound=empty”51Testing软件测试网 }(Xb:bq`Ntb9g2O
51Testing软件测试网o"Qa&CV第四步:设置组策略51Testing软件测试网 O8c:N ?F#m0t8h
51Testing软件测试网6W_;L1I tG大负载测试时会有以下情况发生
+as"?3kX/^*F0d0M0C0P{^H0 ● 产生很多错误,数据量大于1GB
{Ftd~-S/U0 51Testing软件测试网W:Pp-?!br[sz5h-s● 假如每秒产生1000条左右错误的话,Controller的行为将很难预测
6s {-d A0e pM:A-HC0 51Testing软件测试网7D4c @E&E● 压力测试产生很多运行数据
"Z1k(o^5Mx"g#a e0 51Testing软件测试网+f9Q+g.V%p+y(SI这些问题可以通过设置一个合理的组策略避免,以下举一个例子说明
`d*n2N;b0H4R0z??x3egM2d!u7v0 场景为1000个虚拟用户,用一个Group运行
4WA{_ V6a9\4}02d,oz/K/I2pd v0 这时把这个Group分为两个Group:
&Zm@-o%P0:w2T_^%V ~|a9`0 G1-〉100 Vusers51Testing软件测试网D3d?\2S@g!I
51Testing软件测试网%M(Xp w:Vde_G2-〉900 Vusers51Testing软件测试网MN/U^y&R9UkE
ZIQTs;s4g*]0 在G2的设置中,添加以下命令行:
*ouM[,\-E/G#R0 51Testing软件测试网aq8^B UA–disable_data -disable_messages51Testing软件测试网hPB8D |-V'g!UH
4D,m _e"^{0 -disable_data – 指示Group不要发送和写入运行数据51Testing软件测试网}U#])Hhw/{
51Testing软件测试网F9M7c4^.Z1P-disable_messages – 指示Group不要发送任何信息(errors,logs)给Controller51Testing软件测试网d#S1I5``4F0@}XU_/p
51Testing软件测试网;c5rzc8T[6b.Ma结尾语:单从测试而言,SilkPerformer和QALoad以及其他开源工具皆可实现压力测试的目的,本文介绍的内容从方法上对于其他工具也适用,但实现细节会略有差别。祝大家成功!