一、为什么学习事务?
需求:
1. 统计订票网站登录业务需要的具体时间;
2. 登录账户不是jojo,则登录业务失败;
问题:统计时间有很多办法可以做到,但如何把登录业务标记成功或失败呢?
二、什么是事务?
概念:事务(Transaction)是用户在应用软件上操作的一个业务或多种业务集合(actions)的统称;
作用:
1. 通过事务可标记业务开始和结束,并且可统计相应业务的操作时间(事务时间)【重点】
2. 通过事务状态机制,可判断相应业务执行的成功与失败;【了解】
3. 通过事务来衡量服务器性能;
三、添加事务
说明:LR添加事务有两种方式:
1). 录制脚本的时候添加【了解】
2). 运行脚本的时候添加【推荐】
3.1 添加事务-录制时添加【了解】
3.2 添加事务-运行脚本时添加【重点】
提示:
1. 插入事务开始 lr_start_transaction("Name")
1. 插入方式:
1). Ctrl+T
2). 鼠标右键Insert->Start Transaction
3). 工具栏菜单(Insert)->Start Transaction
2. 参数
Name:事务名称
2. 插入事务结束 lr_end_transaction("Name", "status")
1. 插入方式:参考插入事务开始
2. 参数
Name:事务名称和开始事务名相同;
status:标志事务状态
1). LR_AUTO: 自动-由LR判断 【推荐】
2). LR_PASS:通过
3). LR_FAIL: 失败
4). LR_STOP: 停止
注意:
1. 插入事务时,不要包含lr_think_time()函数
2. 事务名称(中文、英文),建议英文;
3. 事务名称开始和结束必须相同 如:登录(Login)
4. 事务必须成对出现 lr_start_transaction("登录"); ... lr_end_transaction("登录", LR_AUTO);
事务的添加我们就了解这里,接下来我们了解下事务响应时间
3.3 事务时间
说明:
1). 一个事务的时间是指事务持续时间(Duration Time)从事务的开始到结束;
2). 事务时间包含:
1). 响应时间
2). 浪费时间(Wasted Time)
3). 思考时间(Think Time)
4). 事务自身执行时间
3). 在运行脚本后,运行日志内有事务时间、Wasted Time时间,单位为秒;
1) 响应时间
说明:
1. 响应时间=T1+T2+T3+T4+T5+T6+T7
2. 客户端浏览器解析渲染响应数据不算响应时间
2) Wasted Time(浪费时间)
说明:LR自动会把一些函数执行的时间统计为浪费时间,比如(关联、检查点)等函数
3) Think Time(思考时间)
说明:lr_think_time()函数
4) 事务自身执行时间
说明:lr_start_transaction("")和lr_end_transaction("", LR_FAIL)这两句代码执行的时间;
3.4 事务时间 汇总
1. 站在代码角度,事务的开始与结束,其实就是指定一段代码为一个事务;
2. 而代码段内可以包含思考时间、业务代码、事务函数,所以说事务时间包含响应(业务)
时间、思考时间、事务自身、其他函数(浪费时间)
3. 事务时间=响应时间+浪费时间+思考时间+事务自身执行时间
四、需求解决方案分析
1. 在登录函数之前插入开始事务
2. 获取登录后的用户名
3. 判断登录用户名是否为jojo,如果是
插入结束事务并且事务状态为:LR_PASS,
否则
插入结束事务,事务状态为:LR_FAIL;
问题:如何判断登录名是否为jojo?
4.1 strcmp函数
说明:比较两个字符串(匹配大小写)是否相等,并返回int型数值;
用法:result = strcmp( string1, string2);
result:
1). <0 string1小于string2;
2). 0 string等于string2;
3). >0 strring大于string2;
提示:如果要忽略大小写请使用 stricmp函数,用法参考strcmp
4.2 需求解决代码
Action()
{
//定义结果变量
int result;
//处理动态session
web_reg_save_param("Session",
"LB=name=userSession value=",
"RB=>",
LAST);
//打开webTours首页
web_url("首页","URL=http://127.0.0.1:1080/WebTours/",LAST);
//开启事务
lr_start_transaction("登录");
//使用关联函数获取登录用户名
web_reg_save_param("username",
"LB=Welcome, <b>",
"RB=</b>,",
LAST);
//登录操作
web_submit_data("登录",
"Action=http://127.0.0.1:1080/WebTours//login.pl",
"Method=POST",
"TargetFrame=",
"Referer=",
"Mode=HTML",
ITEMDATA,
"Name=userSession", "Value={Session}", ENDITEM,
"Name=username", "Value=jojo", ENDITEM,
"Name=password", "Value=bean", ENDITEM,
LAST);
result=strcmp(lr_eval_string("{username}"),"jojo");
//判断对比结果是否相等
if(result==0){
//用户名相等时,插入LR_PASS事务状态
lr_output_message("登录的用户为:%s 通过!",lr_eval_string("{username}"));
lr_end_transaction("登录", LR_PASS);
}else{
//用户名不相等时,插入LR_FALL事务状态
lr_output_message("登录的用户为:%s 不通过!",lr_eval_string("{username}"));
lr_end_transaction("登录", LR_FAIL);
}
return 0;
}
运行结果:
Action.c(43): 登录的用户为:jojo 通过!
Vuser Terminated.
来源:CSDN
作者:一醉南柯
链接:https://blog.csdn.net/dpl12/article/details/104089010