检查点原理:
1.插入检查点的原因
1.1 先看一个不插入检查点的案例 登录订票网站,用户名、密码正确,事务状态为PASS
Action()
{
web_set_max_html_param_len("1024");
/* Registering parameter(s) from source task id 71
// {WCSParam2} = "124811.216605913ztVQQHzpQftVzzzHDifVQpizVHcf"
// */
web_reg_save_param("WCSParam2",
"LB/IC=userSession value=",
"RB/IC=>",
"Ord=1",
"Search=Body",
"RelFrameId=1.2.1",
LAST);
web_url("WebTours",
"URL=http://127.0.0.1:1080/WebTours/",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t8.inf",
"Mode=HTML",
LAST);
lr_think_time(5);
lr_start_transaction("login");
web_submit_data("login.pl",
"Action=http://127.0.0.1:1080/WebTours/login.pl",
"Method=POST",
"TargetFrame=",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Snapshot=t9.inf",
"Mode=HTML",
ITEMDATA,
"Name=userSession", "Value={WCSParam2}", ENDITEM,
"Name=username", "Value=jojo", ENDITEM,
"Name=password", "Value=bean", ENDITEM,
"Name=JSFormSubmit", "Value=on", ENDITEM,
"Name=login.x", "Value=40", ENDITEM,
"Name=login.y", "Value=9", ENDITEM,
LAST);
lr_think_time(5);
lr_end_transaction("login",LR_AUTO);
web_url("welcome.pl",
"URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=1",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=flights",
"Snapshot=t14.inf",
"Mode=HTML",
LAST);
return 0;
}
如下图所示,事务状态为Pass
:
1.2 如果用不存在的用户名和密码登录呢?,按照正常理解应该是登录失败的,事务应该也是Fail的,具体看下执行情况吧
web_submit_data("login.pl",
"Action=http://127.0.0.1:1080/WebTours/login.pl",
"Method=POST",
"TargetFrame=",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Snapshot=t9.inf",
"Mode=HTML",
ITEMDATA,
"Name=userSession", "Value={WCSParam2}", ENDITEM,
"Name=username", "Value=jojo11", ENDITEM, //不存在的用户
"Name=password", "Value=bean11", ENDITEM, //不正确的密码
"Name=JSFormSubmit", "Value=on", ENDITEM,
"Name=login.x", "Value=40", ENDITEM,
"Name=login.y", "Value=9", ENDITEM,
LAST);
看下执行之后的结果,竟然事务的状态还是Pass
从上面的例子可以看出,事务结束状态成功,事务不一定成功的
问:LR如何确定事务结束状态为PASS的呢?
LR中本身无法实际去判断事务是否成功,其判断事务是否成的依据是结束事务函数(lr_end_transaction)是否被执行,如果结束事务函数执行成,那么LR就会将事务的结束状态设置为PASS
从上面例子,可以看出事务是否成功,首先应该判段业务是否执行成功,如上面登录是否成功,只有登录是成功的才能确定事务是成功的,那么,
设置检查点的目的是为了验证测试过程中的步骤是否成功的执行,也可以理解为事务是否被成功执行,只有这样才能保证后续数据分析是准确的,后续的性能测试的执行和分析才是有意义的
。
2.如何插入检查点
- 插入文本检查点
- 在tree_view中插入
web_find
web_find("login_check",
"RightOf=<blockquote>a",
"LeftOf=, to the Web Tours reservation pages.",
"What=Welcome, <b>jojo</b>",
LAST);
- 在tree_view中插入
web_reg_find
web_reg_find("Fail=NotFound",
"Search=Body",
"SaveCount=login",
"Text=Welcome, <b>jojo</b>",
LAST);
3.检查点函数
- web_find()
web_find("login_check", //检查点步骤名称
"RightOf=<blockquote>a",//查询字符串内容右边界
"LeftOf=, to the Web Tours reservation pages.",//查询字符串内容左边界
"What=Welcome, <b>jojo</b>",//查询字符串内容
LAST);
- 注册函数web_reg_find()
web_reg_find(
"Fail=NotFound",
"Search=Body",
"SaveCount=login_count",
"Text=Welcome, <b>jojo</b>",
LAST);
web_find()和web_reg_find()的区别
- 两个函数类型不同,
web_find
只是一个普通函数,而web_reg_find
是一个注册函数 web_find
函数使用时必须开启内容检查选项,而web_reg_find
函数没有此限制web_find
函数只能基于HTML模式录制的脚本中,而web_reg_find
没有此限制web_find
函数是在返回的页面中进行内容查找,而web_reg_find
是在缓存中进行查找web_reg_find
函数在执行效率上要比web_find
函数高
4.通过检查点判断事务是否成功
通过检查点获取到login_count
参数的值,并进行比较如果查找到的login_count
的值>=1则,登录是成功的,事务的状态设置为LR_PASS,否则,设置为LR_FAIL
4.1 用户名密码正确,登录成功时,事务
Action()
{
web_set_max_html_param_len("1024");
/* Registering parameter(s) from source task id 71
// {WCSParam2} = "124811.216605913ztVQQHzpQftVzzzHDifVQpizVHcf"
// */
web_reg_save_param("WCSParam2",
"LB/IC=userSession value=",
"RB/IC=>",
"Ord=1",
"RelFrameId=1.2.1",
"Search=Body",
LAST);
web_url("WebTours",
"URL=http://127.0.0.1:1080/WebTours/",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t8.inf",
"Mode=HTML",
LAST);
lr_think_time(5);
lr_start_transaction("login");
web_reg_find(
"Fail=NotFound",
"Search=Body",
"SaveCount=login_count",
"Text=Welcome, <b>jojo</b>",
LAST);
web_submit_data("login.pl",
"Action=http://127.0.0.1:1080/WebTours/login.pl",
"Method=POST",
"TargetFrame=",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home",
"Snapshot=t9.inf",
"Mode=HTML",
ITEMDATA,
"Name=userSession", "Value={WCSParam2}", ENDITEM,
"Name=username", "Value=jojo", ENDITEM,//正确的用户名、密码
"Name=password", "Value=bean", ENDITEM,//正确的密码
"Name=JSFormSubmit", "Value=on", ENDITEM,
"Name=login.x", "Value=40", ENDITEM,
"Name=login.y", "Value=9", ENDITEM,
LAST);
lr_think_time(5);
if(atoi(lr_eval_string("{login_count}"))>=1){ // 判断参数login_count的值是否>=1
lr_end_transaction("login", LR_PASS);
}else{
lr_end_transaction("login", LR_FAIL);
exit(-1);
}
return 0;
}
4.1 用户名密码错误,登录失败,此时可以看到事务状态是LR_FAIL的