LoadRunner 之三“检查点和关联”
判断脚本是否执行成功是根据服务器返回的状态来确定的,如果服务器返回的HTTP状态为200 ,那么VuGen 就认为脚本正确地运行了,并且是运行通过的。在绝大多数系统出错时会返回错误页面码? 不会一般系统都会返回一个消息提示框,来提升用户感受。例如,“网站繁忙,请稍后”。其实这个时候网站已经无法正确响应用户请求了,但是VuGen 脚本无法识别,会错误地认为网站还能正确访问,导致分析错误。所以这时需要一种检查点函数帮助验证请求发送出去后,服务器的返回是不是期望的内容,如果不是,那么就说明服务器返回无法提供正常的服务了。
还是以WebTours为例,录制登录的脚本。
1. 在录制之间需要打开菜单Vuser ---> run-time setting ,选择运行时设置选项,勾选“启动图像和文本检查”选项。如果不勾选此项,将不会执行打找函数。
2.选择“树”,右键登录事务,选择文本检查,点击确定。
3.填写搜索参数。
脚本如下:
Action() { web_url("WebTours", "URL=http://127.0.0.1:1080/WebTours/", "TargetFrame=", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t1.inf", "Mode=HTML", LAST); lr_think_time(37); lr_rendezvous("集合点"); //添加集合点 lr_start_transaction("login"); //开始登录事务 web_submit_data("login.pl", "Action=http://127.0.0.1:1080/WebTours/login.pl", "Method=POST", "TargetFrame=body", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home", "Snapshot=t3.inf", "Mode=HTML", ITEMDATA, "Name=userSession", "Value=125397.629566626ztfAVtApfHAiDDDDDiHAApitDtcf", ENDITEM, "Name=username", "Value=xueli", ENDITEM, "Name=password", "Value=123456", ENDITEM, "Name=JSFormSubmit", "Value=off", ENDITEM, "Name=login.x", "Value=68", ENDITEM, "Name=login.y", "Value=3", ENDITEM, LAST); lr_end_transaction("login", LR_AUTO);//结束登录事务 web_find("web_find",//插入检查点 "What=Welcome", LAST); lr_think_time(18); web_url("IE9CompatViewList.xml", "URL=http://ie9cvlist.ie.microsoft.com/IE9CompatViewList.xml", "TargetFrame=", "Resource=0", "RecContentType=text/xml", "Referer=", "Snapshot=t5.inf", "Mode=HTML", LAST); return 0; }
注:最好把检查点放在事务的外面,以免影响响应时间。
4.运行脚本,结果登录失败。
Action.c(29): 通知: 事务 "login" 已启动。
Action.c(32): web_submit_data("login.pl") 已成功,795 个正文字节,225 个标头字节 [MsgId: MMSG-26386]
Action.c(50): web_submit_data("login.pl_2") 已成功,795 个正文字节,225 个标头字节 [MsgId: MMSG-26386]
Action.c(67): 通知: 事务 "login" 以 "Pass" 状态结束 (持续时间: 0.5177 浪费的时间: 0.0049)。
Action.c(69): 错误 -27195: “web_find”失败。找到“Welcome”的 0 处出现(RightOf=“”,LeftOf=“”) [MsgId: MERR-27195]
Action.c(69): web_find 最高严重级别为“ERROR” [MsgId: MMSG-26391]
登录失败是因为脚本中的userSession(临时身份证)值每次登录的值不一样,回放登录时,userSession值和录制时脚本的值不同,所以登录失败,这时就需要进行关联。
关联有两种方式:自动关联和手动关联,一般采用手动关联。
5.在userSession值出现之前进行关联,右键选择在登陆之前插入函数web_reg_save_param函数,点击确定,取一个参数名SessionID即可。
返回脚本,发现多了几行。
web_reg_save_param("SessionID", "LB=", "RB=", LAST);
6.查看http请求正文,看到userSession只右边存在参数值。
7.补全web_reg_save_param的参数值,再把web_submit_data中的userSession值改为{参数名}。
web_reg_save_param("SessionID", "LB=userSession value=", "RB=", LAST); ... web_submit_data("login.pl", "Action=http://127.0.0.1:1080/WebTours/login.pl", "Method=POST", "TargetFrame=body", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home", "Snapshot=t3.inf", "Mode=HTML", ITEMDATA, "Name=userSession", "Value={SessionID}", ENDITEM, "Name=username", "Value=xueli", ENDITEM, "Name=password", "Value=123456", ENDITEM, "Name=JSFormSubmit", "Value=off", ENDITEM, "Name=login.x", "Value=68", ENDITEM, "Name=login.y", "Value=3", ENDITEM, LAST);
注:这里右边有值,但是要填写在LB这个参数后边,这里是相反的(镜像原理)。
8.运行脚本,登录成功。
Action.c(24): web_submit_data("login.pl") 已成功,5694 个正文字节,1483 个标头字节 [MsgId: MMSG-26386] Action.c(41): 通知: 事务 "login" 以 "Pass" 状态结束 (持续时间: 0.5262 浪费的时间: 0.0042)。 Action.c(44): “web_find”成功。找到“Welcome”的 2 处出现(RightOf=“”,LeftOf=“”) [MsgId: MMSG-27196] Action.c(44): web_find 已成功 [MsgId: MMSG-26392] Action.c(50): web_url("IE9CompatViewList.xml") 已成功,13764 个正文字节,467 个标头字节 [MsgId: MMSG-26386]
补充:
图片检查点用int web_image_check函数。
int web_image_check( const char *CheckName, <List of Attributes>, <"Alt=alt"|| "Src=src">, LAST );
Web_reg_find( “image1”, // 函数标题 “src=...”||"alt=..." // 图片说明 LAST);
---转载请标明,并添加原文链接---