LoadRunner中Web_reg_save_param如何使用

上一篇 / 下一篇  2007-09-20 00:02:52

J&O,cuSOj0这次项目遇到一个关联的问题,杀死大量脑细胞。。很郁闷。从别处找来点相关的资料,希望以后遇到类似问题不再头疼,有相关问题的朋友也可以一起共享一下。51Testing软件测试网(@/EE l;Q`H!Q

%pI&h:R6F!P$_?0应用范围51Testing软件测试网1pr/RQWV.VU

51Testing软件测试网6Y"Ip$tB

在使用Loadrunner进行性能测试时,经常遇到一种情况,需要通过web页面修改某事务的状态。于是需要首先读出当前的事务的状态,再进行修改,此时便可以使用到web_reg_save_param了。可以通过它先将事务的状态读出写入一个自定义的变量中,根据变量的值来决定下一步的动作。

J&v%]PV+f(e051Testing软件测试网3~&Uan7Z*E){IC

简要说明

k1sLGD;u5N0

*`^{I.m@J8r`d0语法:51Testing软件测试网Y0|+znf8])Py

51Testing软件测试网 g1J eZc6F\ `b

int web_reg_save_param(const char *ParamName, <list of Attributes>, LAST);51Testing软件测试网;pW'LR!\@{y(Q

X#cRIU Z4?0参数说明:51Testing软件测试网e L h/J"C f{ m

  • ParamName: 存放得到的动态内容的参数名称
  • list of Attributes: 其它属性,包括:Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, SaveLen。属性值不分大小写
    • Notfound: 当在返回信息中找不到要找的内容时应该怎么处理
    • Notfound=error: 当在返回信息中找不到要找的内容时,发出一个错误讯息。这是缺省值。
    • Notfound=warning: 当在返回信息中找不到要找的内容时,只发出警告,脚本也会继续执行下去不会中断。
    • LB( Left Boundary ) : 返回信息的左边界字串。该属性必须有,并且区分大小写。
    • RB( Right Boundary ): 返回信息的右边界字串。该属性必须有,并且区分大小写。
    • RelFrameID: 相对于URL而言,欲查找的网页的Frame。此属性质可以是All或是数字,该属性可有可无。
    • Search : 返回信息的查找范围。可以是Headers,Body,Noresource,All(缺省)。该属性质可有可无。
    • ORD : 说明第几次出现的左边界子串的匹配项才是需要的内容。该属性可有可无,缺省值是1。如为All,则将所有找到的内容储存起来。
    • SaveOffset : 当找到匹配项后,从第几个字元开始存储到参数中。该属性不能为负数,缺省值为0。
    • SaveLen :当找到匹配项后,偏移量之后的几个字元存储到参数中。缺省值是-1,表示一直到结尾的整个字串都存入参数。
    • Convert : 可取的值有以下两种:

nv9_v1E-Uh)R0HTML_TO_URL : 将 HTML-encoded 资料转成 URL-encoded 资料格式

2h&P*xA6tb5I0

yS"D[f0HTML_TO_TEXT : 将 HTML-encoded 资料转成纯文字资料格式51Testing软件测试网tm*oVZ

  • 实例讲解

+P?-xjB @9Hc2v0目的:取得页面中的商品状态,如果状态是正常态就改为注销态,否则改为正常态。

'AJ P D1~6TL:H1cV051Testing软件测试网/L8x4D2k/D/U

录制脚本使用的是URL based scrīpt

@@,J q0uIT8hN.V.YyI051Testing软件测试网I.zY)FFFl*Z#I Z

6_]`q3\n0

Xe om7Lg7z0将返回的数据记录到日志51Testing软件测试网lfz%k x$J-x

c y4YB8mv K]\ z051Testing软件测试网1Ij$`6pO/cc

51Testing软件测试网Uy+dWAo R

直接手工访问页面,检查URL

7X3m @ [~*l051Testing软件测试网UOF V!~%]6?

51Testing软件测试网Tr0~5J3^svP*d

51Testing软件测试网U,BO9tgx

该页面上点击右键,选择属性

l)U b`,SU9i3DZ;pQ051Testing软件测试网SF6B2xL0EoTr

Z8{/C)q u0

T&[a_ \'fa{0Re0看到URL,对照录制下的脚本中有:51Testing软件测试网%Z&W,\q Y,k1U
web_url("modifyOfferingStatePage.do",51Testing软件测试网%` YI(f/ay5A9s6o
"URL={url}/web/businessAccept/order/modifyOfferingStatePage.do?offeringId=51Testing软件测试网/v]6z6QW:T
282172&offeringSpecId=1&offeringSpecName=普通宽带(ADSL/LAN)&customerName=51Testing软件测试网7Jsa-ZC/e lU
{clientname}&nodeId=260000&pos1=定购管理&pos2=修改商品状态",

1c"?oZA^j.C#w3u051Testing软件测试网,gNa0uI1AK

G`G*?NWk0

@G tn.Tz%u0"Resource=0",51Testing软件测试网pm/c4OB
"RecContentType=text/html",
2PP"K&z#LH*p+S0"Referer={url}/web/businessAccept/order/orderMenu.do",51Testing软件测试网)w1yAw!m5e H ?1`H
"Snapshot=t23.inf",
+y })yR5@1e*c8L0"Mode=HTTP",51Testing软件测试网\)bzEt&iT#E
LAST);51Testing软件测试网L ~0dDIg v
于是在这段代码前添加注册函数:51Testing软件测试网RY#X?"u
web_reg_save_param("oldstate",51Testing软件测试网7GQ/|*o'XR3^
"LB/IC=原有商品状态:</td>",51Testing软件测试网N| Y,J lP!S7f*q
"RB/IC=</td>",51Testing软件测试网I%C/Zu5Ou
"Search=body",51Testing软件测试网Wap[6r(u/l
"Ord=1",51Testing软件测试网\2n$D$L0IV
"RelFrameId=1",
%]Iz d h7S H,q/I0"SaveOffset=57",
m;A%Nv~0"SaveLen=4",51Testing软件测试网!U"~7g+J@:u|
LAST);
l4\&Lt k0web_url("modifyOfferingStatePage.do",51Testing软件测试网5qQR%N#J,t;Kr
"URL={url}/web/businessAccept/order/modifyOfferingStatePage.do?offeringId=51Testing软件测试网'of8KR | i%mv
282172&offeringSpecId=1&offeringSpecName=51Testing软件测试网:rI:{,?'gr#P6bP
普通宽带(ADSL/LAN)&customerName={clientname}&nodeId=51Testing软件测试网g%?+R6R*k`8h's#Xa K
260000&pos1=定购管理&pos2=修改商品状态",51Testing软件测试网^-u\V%h c

5I'gx;k)J0"Resource=0",
v`h NG%F0"RecContentType=text/html",
`3o$}$lI^,_0"Referer={url}/web/businessAccept/order/orderMenu.do",51Testing软件测试网|a4]0e\
"Snapshot=t23.inf",
6z:ipgLsD+U0"Mode=HTTP",
M/CDkC] b&O0LAST);
(\a|oG o,H0...............51Testing软件测试网NYe Do}3`4Ij
//将得到的内容存入日志用于检查51Testing软件测试网d&^uUY
lr_log_message("getvalue : %s",lr_eval_string ("{oldstate}"));51Testing软件测试网vSf_/Yk,K:p

!jwA%Kt(Yq8[D \0if ( lr_eval_string ("{oldstate}") == "正常"){51Testing软件测试网q-_5NzR_/o
web_submit_data("modifyOfferingState.do",51Testing软件测试网s `5n^5^S X8xb
"Action={url}/web/businessAccept/order/modifyOfferingState.do",51Testing软件测试网OrZ_Q~,B*t Y
"Method=POST",
xs ?:`N0C0"RecContentType=text/html",51Testing软件测试网:{` }%jE4i(D
"Referer={url}/web/businessAccept/order/modifyOfferingStatePage.do?offeringId=51Testing软件测试网3[)NgL7tW!oT"?
282172&offeringSpecId=1&offeringSpecName=普通宽带(ADSL/LAN)&customerName=
`&a"P&S)p0{clientname}&nodeId=260000&pos1=定购管理&pos2=修改商品状态",51Testing软件测试网5V+IpO h9z A6`

51Testing软件测试网 {J3yvX

"Snapshot=t24.inf",
i@/l9H3cgC0"Mode=HTTP",
$S6|gZ([(_ hu_0ITEMDATA,
n:f2n@+r4b&@*P+D1c0"Name=offering.state", "Value=1", ENDITEM,
#i0tEu aW0"Name=offering.recentModifyReason", "Value=修改原因", ENDITEM,
;?(Y{_@;[0"Name=offering.customerId", "Value=281218", ENDITEM,51Testing软件测试网 O EJe8x-xg5W
"Name=offering.offeringId", "Value=282172", ENDITEM,
#C(d1eb*T(T(\S*v0"Name=offering.offeringSpecId", "Value=1", ENDITEM,
K s m$[P C]8a6v2O0"Name=offering.recentMender", "Value=root", ENDITEM,
E;Yy X"ul7ip0"Name=offering.recentModifyDatetime", "Value=2005-01-16", ENDITEM,
|2N3M/y~0xE+z0"Name=nodeId", "Value=260000", ENDITEM,
*k:@~5@#L:?#Y0"Name=customerName", "Value={clientname}", ENDITEM,
Y&H,T7m#} U!c^i b`0"Name=offeringSpecName", "Value=普通宽带(ADSL/LAN)", ENDITEM,51Testing软件测试网"c,l!c)X1J+D
"Name=submit.x", "Value=33", ENDITEM,51Testing软件测试网yPedam{*}.H
"Name=submit.y", "Value=13", ENDITEM,
O g`,x|0LAST);51Testing软件测试网6c4x$O6j3h+c9C
}51Testing软件测试网.U1o9~,iH(H A:w9m9S"mZ
Else51Testing软件测试网4lO.R?a t
{
:hs#S N1R g0web_submit_data("modifyOfferingState.do",51Testing软件测试网P9\Z(nm G
"Action={url}/web/businessAccept/order/modifyOfferingState.do",
z"@6B(MK.`l0"Method=POST",51Testing软件测试网,R7?,J K5y
"RecContentType=text/html",
4z5K+zkC!q;xl7v0"Referer={url}/web/businessAccept/order/modifyOfferingStatePage.do?offeringId=51Testing软件测试网0X%z0yA+Zdk
282172&offeringSpecId=1&offeringSpecName=普通宽带(ADSL/LAN)&customerName=51Testing软件测试网vF/Dr!{ \
{clientname}&nodeId=260000&pos1=定购管理&pos2=修改商品状态",51Testing软件测试网a4eY3o a$e

51Testing软件测试网D Ir2s f F

"Snapshot=t24.inf",51Testing软件测试网8M2d(t@C:L7d,pH
"Mode=HTTP",51Testing软件测试网'].?g [7}5r$B4s
ITEMDATA,51Testing软件测试网 ]qJa1[9s.w ]u
"Name=offering.state", "Value=0", ENDITEM,51Testing软件测试网%m7C6~GZ'Vw}aK
"Name=offering.recentModifyReason", "Value=修改原因", ENDITEM,
7|l(A t"ad`.[6G0"Name=offering.customerId", "Value=281218", ENDITEM,
q"Q%{S Z0"Name=offering.offeringId", "Value=282172", ENDITEM,
7p3b~$Z`u0"Name=offering.offeringSpecId", "Value=1", ENDITEM,51Testing软件测试网qwIGv$|8gG;@ Y
"Name=offering.recentMender", "Value=root", ENDITEM,51Testing软件测试网[ }d8f5}?v2B3^
"Name=offering.recentModifyDatetime", "Value=2005-01-16", ENDITEM,51Testing软件测试网']jBNC@
"Name=nodeId", "Value=260000", ENDITEM,51Testing软件测试网J w8P%cM B }#I
"Name=customerName", "Value={clientname}", ENDITEM,
4s(AvMX0"Name=offeringSpecName", "Value=普通宽带(ADSL/LAN)", ENDITEM,51Testing软件测试网'eE Fe r5l1ZyW(r[
"Name=submit.x", "Value=33", ENDITEM,51Testing软件测试网(Gb.a"]$Z;SC
"Name=submit.y", "Value=13", ENDITEM,51Testing软件测试网"pUl`.Isg@
LAST);51Testing软件测试网Y;m:Qkf|AJ
}
$ra9B7n_!p)V,`0从日志中截取的真实的返回内容为:51Testing软件测试网1U{S*b Z$K#ZM:B
vuser_init.c(689): <tr bgcolor="#F6F6F6">\r\n51Testing软件测试网,I x)ob4P^^8U^Q
vuser_init.c(689): <td width="30%" height="23" align="right">\r\n
2r U,^ x%CM6H [0vuser_init.c(689): 原有商品状态:</td>\r\n51Testing软件测试网4F,PdD\S
vuser_init.c(689): <td width="70%" height="23"> 正常 </td>\r\n
;rr8Q/qiRJ"z0vuser_init.c(689): </tr>\r\n
lO5is'~"kB0vuser_init.c(689): <tr bgcolor="#F4FBFE">\r\n
`?3qc[ H0vuser_init.c(689): <td width="30%" height="23" align="right">\r\n
MD-z0sG]p3o0vuser_init.c(689): 修改后的状态:</td>\r\n
^.O k^9I0vuser_init.c(689): <td width="70%" height="23">\r\n51Testing软件测试网LiV/EGh%@6?
vuser_init.c(689): \r\n51Testing软件测试网)U;uu*GYq/m%dyv
vuser_init.c(689): \r\n51Testing软件测试网;]uh'q,r$Pd_7|%jd(YH
vuser_init.c(689): \r\n
2gH.q"^ Yn7T${0vuser_init.c(689): <input type="radio" name='offering.state' value='4' checked>51Testing软件测试网{(q.r4Cv%s&K
可以看到左边界是:原有商品状态:</td>,
u6sz&U#G(`+m;{0右边界是:</td>,偏移量为:57(包括了空格),
,W;cD.p.Jl4@P;f3g0长度为:4(因为一个汉字长度为2),最后存入变量的值是:正常

4Zkz I7{ m0

(f}+S2Mpf04.经验总结51Testing软件测试网 I@*h3D$q3Ou:u
1)为了便于脚本的调试,将返回的数据都写入日志是个好办法;51Testing软件测试网kke`m'E7s
2)为了验证取得的数据是否是自己期望的,可以将取得的数据写入日志中进行验证,51Testing软件测试网'Xs2L5S-z0\Q_8z~s
例:lr_log_message("getvalue : %s",lr_eval_string ("{oldstate}"));
ca$dU/x$f8N@5X03)因为它是一个注册函数,必须在返回信息前使用,所以注册的位置必须正确,否则很可能得到类似如下错误:51Testing软件测试网%Y$J?mWE8L*M
4)vuser_init.c(734): Error -27190: No match found for the requested parameter "oldstate".
t%]|l k+G#F;H0Check whether the requested boundaries exist in the response data. Also,
5jX*VpWP0if the data you want to save exceeds 1024 bytes,
4g.ef:Z RXh,l0use web_set_max_html_param_len to increase the parameter size [MsgId: MERR-27190]51Testing软件测试网@C3rk9j"Q
5)vuser_init.c(734): Error -27187: The above "not found"
se S3m\0error(s) may be explained by header and body byte counts being 0 and 0,
/s1GX5Hg9jE;tl0respectively. [MsgId: MERR-27187]
NlY,Uq V%]7hf%e06)vuser_init.c(734):51Testing软件测试网3g l&QI6]V6R
web_concurrent_end highest severity level was "ERROR" [MsgId: MMSG-27181]51Testing软件测试网P/d u%Ab,K7C t
7)所以使用手工方法,右键页面确定在代码中哪个位置之前注册函数至关重要
y8S"Wo'm_G_ O08)如果脚本中中文为乱码,可能是因为源文件的字符集和操作系统字符集不匹配。试试:

i?K m2I$U7CqY051Testing软件测试网*P1Gd2vUO0X\

6Apg#yEw0

TAG:

 

评分:0

我来说两句

日历

« 2024-01-31  
 123456
78910111213
14151617181920
21222324252627
28293031   

数据统计

  • 访问量: 6629
  • 日志数: 10
  • 图片数: 4
  • 文件数: 1
  • 书签数: 2
  • 建立时间: 2007-06-01
  • 更新时间: 2007-09-20

RSS订阅

Open Toolbar