欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LoadRunner之VuGen事务

程序员文章站 2022-05-27 09:09:37
...

一、为什么学习事务?

需求:
    1. 统计订票网站登录业务需要的具体时间;
    2. 登录账户不是jojo,则登录业务失败;

问题:统计时间有很多办法可以做到,但如何把登录业务标记成功或失败呢?

二、什么是事务?

概念:事务(Transaction)是用户在应用软件上操作的一个业务或多种业务集合(actions)的统称;
作用:
    1. 通过事务可标记业务开始和结束,并且可统计相应业务的操作时间(事务时间)【重点】
    2. 通过事务状态机制,可判断相应业务执行的成功与失败;【了解】
    3. 通过事务来衡量服务器性能;

三、添加事务

说明:LR添加事务有两种方式:
    1). 录制脚本的时候添加【了解】
    2). 运行脚本的时候添加【推荐】

3.1 添加事务-录制时添加【了解】

LoadRunner之VuGen事务

 

3.2 添加事务-运行脚本时添加【重点】

 

LoadRunner之VuGen事务

提示:
    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 事务时间

 

LoadRunner之VuGen事务

说明:
    1). 一个事务的时间是指事务持续时间(Duration Time)从事务的开始到结束;
    2). 事务时间包含:
                    1). 响应时间
                    2). 浪费时间(Wasted Time)
                    3). 思考时间(Think Time)
                    4). 事务自身执行时间
    3). 在运行脚本后,运行日志内有事务时间、Wasted Time时间,单位为秒;

1) 响应时间

 

LoadRunner之VuGen事务

说明:
    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.

 

相关标签: 性能测试