LoadRunner之VuGen事务

耗尽温柔 提交于 2020-01-26 21:11:55

一、为什么学习事务?

需求:
    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.

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!