LoadRunner性能测试系统学习教程:脚本编写之检查点函数(2)

上期讲到LoadRunner性能测试脚本编写,这期我们来讲讲检查点函数。一起学习吧!

检查点函数

常用的检查点函数有web_find()和web_reg_find()J ? . [ G J ~ ? k两个。

web_find()函数
该函数作用~ D j & ( 6 % m 4是在页面中查找相应的内容。常用参数的含义如下:
web_- f Y 3 n u ?find("Text Check", //检查点步骤名称
"RightOf=Go to", //定义查找字符串右边界
"LeftOf=page", //定义查找字符串左边界
"Wl J k [ Q ? K H ihat=Home", //定义检查字符串内容
LA| 2 0 MST);
使用该函数时要注意以下几个问题:
1.该函数只能对基于HTML模式录制的脚本查找。
2.该函数必须在页面内容显示出来以后才能进查找,所以该函数必须写在查找内容所在页面的后面。
3.必须启用内容检查选项,在Run-time Settings→Preferences里面,把Enable Image and text check复选框选中,否则不执行该查找函数,如图所示。

4.在VB和Java语法中不支持该函数。
该函数存在下面两个缺点:
1.执行效率较低。
2.不返回查找结果情况。例如,要查看有多少个虚拟x R % w用户登录成功的情况,这个函数无法做到,必须进一步操作才能实现。

web_reg_find()函数

该函数是在缓存中查找相应的z v & / o内容,是t 2 P一个注册函数,常用参数及P 7 g G ( v [含义如下:

web_reg_find("Text=Welcome", //定义要查找的内容
"SaveCount=Welcome_Count", //定义查找计数变量名
"Se^ | l Iarch=Body", //定义查找范围
LAST);o T n 7 ] d G
该函l _ % 1数必须写在要查找内容的请求之前,一般情况下都会写在如下六个函数之前:Web_custom_request()、web_image()、web_linE v | N R .k()、web_submit_dT x = e 0ata()、webV . 9 | A S_submit_form()、web_url()。
SaC i - 7 - w LveCount参数用来记录在缓存中内容被查找到的次数,因此在实际应用中经常会使用这个参数来统计查找成功的次数,进而来判断欲查找的内容是否真的被查找到。
下面是一个实例。
web_reg_find("Text=Welcome",
"SaveCounJ ; i 0t=Welcome_Count",
LAST);
web_suH P [ lbmit_form("login.pl",
"Snapshot=t2n x _ z.inf",
Ip 2 M vTEMDATA,
"Name=usern~ ] n ; 1 + /ame", "ValB 0 X w _ue=jojo", ENDITEM,
"Name=password", "Value=bean", ENDITEM,
"Name=login.x", "Value=35", ENDITEM,
"Name=login.y", "Value=14", ENDITEM,
LAST);
if (atoi(lr_eval_string("{Welcome_Count}")) > 0){
lr_output_mess( + Q n U E |age("Log on successful.");
} //判断如果计数变量Welcome_Coun# O 6 ) m 4 1 @t值大于0,则在日志中输出登y ] i ? |录成功
else{
lr_error_message(". 0 !Log on failed"); //反之则在日志中输出登录失败
return(0);
}
web_find()和web_reg_find()虽然都是检查点函数,但两个函数还是有区别的,主要区别有以下几点:
1.两个函数类型3 o p v q同,web_find只是一个普通函数,而web_reg_fE 8 w n V ?ind是一个注册函数。
2.web_find函数使用时必须开启内容检查选项,而web_reg_find函数没有此限制。
3.web_find函数录制时只能基于HTML模式录制的脚本中,而web_reg_find函数没有此限制。
4.we4 . h i w Hb_find函数是在返回的页面中进行内容查找,web_reQ U ( _ ag_find函数是在缓存中进行查找。
5.web_reg_find函数在执行效率上要比web_f8 w @ pind函数高。

t Y O , i Z b 7过检查点判断事务结束状态
前面介绍了检查点的目的是验证业务是否成功,那么如何使用检查点来验证业务成功与否呢?需要验证业务是否成功即是需要通过检查点来确定事务结束状态。
下面是检查点函数的参数格式:
web_reg_find("Text=Welcome", //定义要查找的; % h X W B内容
"SaveCount=Welcome_Count", //定义查找计数变量名
"Search=Body", //定义查找范围
LAST);
其函数中有一个很重要的参数SaveCouy [ y 4 8nt,这个参数是用于统计待检查数据被查找到的次数,如果需要确定业务是否成功,那么则待检查的数据至少要被查找到1次,这样才能保证业务被正确的处理。如飞机订票系统的Z M a / Y 6 B E登录功能,需要确定登录成功,那么至少需要在登录成功页面中能查找d f d |到登录的用户名(至少需要查找到一次),这样才能保证登录的业务是成功的。
以上面的飞机订票系统的登录功能为例,首先插入检查点o Q + # } f O 5 x,插入检查点的脚本如下:
web_reg_find("Searchf M }=Body",
"SaveCount=no", //将检查到的内容(test1)的次数保存在变量no中
"Text=test1", //需要检查的内容为test1
LAST);
接下来需要判断变量no的值是否大于或等于1,如果大于或等于1,那么将登录事务的结束状态设置为L6 n t d y [ 3 F R_PASS,反之将结束状态置为LR_FAn 8 E ? G I 6IL,修改后的代码如下:
//通过lr_eval_string函数读取变量no的值,由于lr_eval_string函数//读取的值为字符型,x k 3 x 4 _所以需要将它转换为整型,这样才能进行比较 if (0 z _ 6 H V 7 Jatoi(lr_eval_string("{no}"))N A ] o |>=1) { lr_end_transaction("Login", LR_PASS); }N K B 6 ) : else{ lr_end_transaction("Login", LR_FAIL); }
其中变量no的值为大于或等于1,因为在有些情况下,可能查找到的值不只一个,所以一般情况下判断其是否大于或等于1。
修改后完整的代码如下:
web_submit_data("logiQ } J # , 1 e v qn.pl",
"Action=http://127.+ l = K0.0.1:1080/WebTours/login.pl",
"Method=POST",
"RecCon$ 8 V .tentType=text/htP W o rml",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Sn_ L m :apshot=t9.inf",
"Mode=HTTP",
ITEMDATA,O & 9 k e O n U
"Name=userSession", "Value={WCS5 e ` fParam2}", ENDITEM,: / : S [ S R
"Name=username", "VT M J & 0alue=test1", ENDITEM,
"Name=password",2 o u ~ "Value=1", ENDITEM: c F,
"Name=JSFV y m e 8 2ormSubmi| x t ; l m Q c wt", "Value=off"4 y y W 7 O g ?, ENDITEM,
"Name=loginH P o K + T.x", "Value=46", ENDITEM,J u 2 [ o * N l i
"Name=login.y", "Value=6", ENDITEM,
LAST);
web_concurrent_start(NULL);
web_url9 i y("nav.pl_2"0 X : ^ X # {,
7 # $ B _"URL=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/W) 1 _ _ v | ] QebTours/loX ` d 5 } D M j &gin.pl",
"Snapshot=t10.inf",
"Mode=HTTP",
LAST);
web_reg_find("SearchB B ,=Body",
"SaveCount=no",
"Text=test1",
LAST);
web_url("login.pl_2",
"URLe 3 V=B V $ 7 * | 1hc & O + + vttp://127.0.0.1:1- s ( + b q {080/WebTours/login.pl?intro=tr_ ` $ue",
"Resource=0",
"RecCc p x / bontentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/login.pl",
"Snapshot=t11.inf",
"Mode=HTTP",
LAST);
web_concurrent_end(NULL);
web_concurrent_start(NULL);
web_url("flights.gif",
"URL= ) O N :http://127.0.0.1:1080/WebTours% & ~/images/flights.gif",
"Resource=1",
"RecContentT3 0 o ^ype=imagF : de/gif",
"Referer=htto 1 { : m ; Zp://127.0.0.1:1080/Wev f # T 9bTours/nav.pl?page=menu&in=home",
"b r TSnapshot=t12.inf",
LAST);
web_url("itinerary.gif",
"URL=http://127.0.0.1:1080/WebTours/images/itineraP : ^ %ry.gif",
"Resource=1",
"RecContentType=image/gif",
! t . ` 1 N X"Referer=httR ! j pp://127.0.0.1:1080/WebTour5 ] Rs/nav.pl?page=me: z [ y d - qnu&in=home",
"Snapshot( , | B Y `=t13.inf",
LAST);
web_url("in_home.gif",
"URL=http://127.0.0.1:1080/WebTours/images/in_home.gifz 2 | L v o ;",l ; o ! r
"Resource=1"@ B a z , G * M G,
"Rect 8 @ 1 _ & A )ContentType=image/gif",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home",
"Snapshot=t14.inf",
LAST);
web_url("signoff.gif4 t 9 k ! 3 : 0",
"URL=http://127.0.0.1:1080/W^ G e U BebTours/images/signoff.gif",
"Resource=1",
"RecContentType=image/gif",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home",
"Snapshot=t15.inf",
LAST);
web_concurrent_end(NULL);
if (atoi(lr_eval_string("{no}"))>=l 2 / w 8 w t x1) {
lr_end_transaction("Login", LR_PASS);
}
else{
lr_end_transaction("Login", LR_FAIL);
}
web_url("SignOff Button",% e l g I a
"URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOf_ B 3 $ gf=1",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.l = E g b1:1080/WebTours/nav.pl?page=menu&in=home",
"Snapshot=t16.inf"Y h M . = 4,
"Mode=HTTPZ l S x",
LAST);