Loadrunner 脚本优化-事务函数简介
脚本优化-事务函数简介
by:授客 QQ:1033553122
1.事务的开始和结束名称需要相同
lr_start_transaction(“transaction_name”);
…//事务处理
lr_end_transaction(“transaction_name”,LR_AUTO);
2.事务和子事务
在VuGen中可以通过事务来完成一组操作的响应时间监控,如果想监控某一个事务中某一步操作的响应时间,就要使用子事务来完成。当然也可以使用事务嵌套
lr_start_sub_transaction(“子事务名”, “父事务名”);
lr_end_sub_transaction(“子事务名”, 子事务状态);
注意:子事务和父事务很像,但是父事务支持的很多函数在子事务中都无法实现,所以应酌情考虑。
例:做一个登录的事务,同时把打开登录页面和登录操作都做成一个事务,这样就可以得到三个事务的时间:打开页面和登录操作及整个操作的时间。
Action()
{
//开始登录事务
lr_start_transaction("login");
//打开登录界面
lr_start_sub_transaction("loginpage", "login");
web_url("WebTours",
"URL=http://127.0.0.1:1080/WebTours/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t16.inf",
"Mode=HTML",
LAST);
lr_end_sub_transaction("loginpage", LR_AUTO);
lr_think_time(4);
//提交登录页面的表单
lr_start_sub_transaction("submit", "login");
web_submit_form("login.pl",
"Snapshot=t17.inf",
ITEMDATA,
"Name=username", "Value=jojo", ENDITEM,
"Name=password", "Value=bean", ENDITEM,
"Name=login.x", "Value=0", ENDITEM,
"Name=login.y", "Value=0", ENDITEM,
LAST);
lr_end_sub_transaction("submit", LR_AUTO);
lr_end_transaction("login", LR_AUTO);
}
运行结果:


3.事务状态
在默认情况下使用LR_AUTO来作为事务状态,对于一个事务有以下4个状态可以选择。
1)
LR_AUTO
指事务的状态由系统自动根据默认规则来判断,结果为PASS/FAIL/STOP
LR_AUTO也是根据服务器的返回状态信息来决定事务是以LR_PASS状态通过还是以LR_FAIL状态结束,只要服务器返回页面,那么事务就会认为请求成功发出去了,服务器看懂了请求也返回了内容,自然事务就是PASS状态。
这样由于事务的自动判断,导致虽然操作失败的,但是得到了一个响应时间,并且这个响应时间又没正确反映出做这件事情的真正时间,最终影响测试结果。添加检测函数有时候可以解决这个问题
例:判断是否登录成功(以lr自带web站点为例)


Action2()
{
lr_start_transaction("login");
//打开登录界面
web_url("WebTours",
"URL=http://127.0.0.1:1080/WebTours/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t16.inf",
"Mode=HTML",
LAST);
lr_think_time(4);
//注意函数的位置
// jojo1为要查找的文本(实际文本如上图,jojo,仅在登录后才出现,这里为了演示故意找不存在的文本)
web_reg_find("Search=Body", "SaveCount=login_times", "Text=jojo1",
LAST);
//提交登录页面的表单
web_submit_form("login.pl",
"Snapshot=t17.inf",
ITEMDATA,
"Name=username", "Value=jojo", ENDITEM,
"Name=password", "Value=bean", ENDITEM,
"Name=login.x", "Value=0", ENDITEM,
"Name=login.y", "Value=0", ENDITEM,
LAST);
lr_think_time(4);
if(atoi(lr_eval_string("{login_times}"))
>= 1) //找到“jojo”,说明登录成功
lr_end_transaction("login", LR_PASS);
else
//未找到,说明登录失败
lr_end_transaction("login", LR_FAIL);
return 0;
}
运行结果:


2)
LR_PASS
指事务是以PASS状态通过的,说明改事务正确地完成了,并且记录下对应的时间,这个时间就是指做这件事情所需要消耗的时间。
3)
LR_FAIL
LR_FAIL是指事务以FAIL状态结束,该事务是一个失败的事务,没有完成事务中脚本应该达到的效果,得到的时间不是正确操作的时间,这个时间在后期的统计中将被独立统计。
4)
LR_STOP
LR_STOP将事务以STOP状态停止。
说明:
事务的PASS和FAIL状态会在场景的对应计数器中记录,包括通过的次数和事务的响应时间,方便后期分析改事务的吞吐量以及响应时间的变化情况
4.事务相关的函数
//获得对应事务达到该函数运行位置时持续的时间,返回double类型
lr_get_transaction_duration(“事务名”);
//获得对应事务达到该函数运行位置时的wasted时间,返回double类型。
lr_get_transaction_wasted_time(“事务名”);
//为一个事务添加wasted时间,无返回值
lr_wasted_time(毫秒)
//将一个事务暂停,该函数后的操作都不会被记录事务时间
lr_stop_transaction(“事务名”);
Action2()
{
double duration = 0;
double wastedtime = 0;
lr_start_transaction("login");
//打开登录界面
web_url("WebTours",
"URL=http://127.0.0.1:1080/WebTours/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t16.inf",
"Mode=HTML",
LAST);
lr_think_time(4);
//事务达到该函数运行位置时持续的时间
duration = lr_get_transaction_duration("login");
lr_output_message("duration %f", duration);
//事务达到该函数运行位置时浪费的时间
wastedtime = lr_get_transaction_wasted_time("login");
lr_output_message("wastedtime %f", wastedtime);
//为事务添加一个浪费时间
5s//该浪费时间无法直接通过lr_get_transaction_wasted_time获得
lr_wasted_time(5);
wastedtime = lr_get_transaction_wasted_time("login");
lr_output_message("wastedtime %f", wastedtime);
//暂停事务
lr_stop_transaction("login");
//注意函数的位置
web_reg_find("Search=Body", "SaveCount=login_times", "Text=jojo",
LAST);
//提交登录页面的表单
web_submit_form("login.pl",
"Snapshot=t17.inf",
ITEMDATA,
"Name=username", "Value=jojo", ENDITEM,
"Name=password", "Value=bean", ENDITEM,
"Name=login.x", "Value=0", ENDITEM,
"Name=login.y", "Value=0", ENDITEM,
LAST);
lr_think_time(4);
//事务达到该函数运行位置时浪费的时间
wastedtime = lr_get_transaction_wasted_time("login");
lr_output_message("wastedtime %f", wastedtime);
if(atoi(lr_eval_string("{login_times}")) >= 1)
lr_end_transaction("login", LR_PASS);
else
lr_end_transaction("login", LR_FAIL);
return 0;
}
注意:通过代码stop事务后可以重新通过lr_start_transaction函数恢复被暂停的事务
5.包含“资源下载”的事务处理
一般情况都可以十分简单地获得请求的响应时间,但是对于下载操作来说就并不是那么方便了,这个时候需要利用一个web_get_int_property()函数来解决。
Action()
{
int
i;
lr_start_transaction(“download”);
web_url(“LoadRunner”,”RUL=http://127.0.0.1/loadrunner.iso”,LAST);
//下载操作请求
i=web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);
if(i>5000)
//当下载的文件大小大于5000个字节时认为下载成功,否则失败。
lr_end_transaction(“download”,LR_PASS);
else
lr_end_transaction(“download”,LR_FAIL);
}
一般来说,对于下载操作的性能测试集中在需要多少时间弹出下载对话框,而后面的内容其实属于网络带宽的问题了,另一个方面现在很少使用IE进行直接下载,而采用迅雷一类的p2p下载工具,所以很少考虑具体下载文件操作对网络和服务器读写操作的影响。
Loadrunner 脚本优化-事务函数简介的更多相关文章
- loadrunner 脚本优化-事务时间简介
脚本优化-事务时间简介 by:授客 QQ:1033553122 事务概念 事务是指用户在客户端做一种或多种业务所需要的操作集(actions),通过事务开始和结束函数可以标记完成该业务所需要的操作内容 ...
- loadrunner 脚本优化-参数化之Parameter List参数同行取值
脚本优化-参数化之Parameter List参数同行取值 by:授客 QQ:1033553122 select next row 记录选择方式 Same line as,这个选项只有当参数多余一个时 ...
- loadrunner 脚本优化-关联函数web_reg_save_param()函数详解
脚本优化-关联函数web_reg_save_param()函数详解 by:授客 QQ:1033553122 Insert->New Step,打开Add Step对话框 选择函数web_re ...
- loadrunner 脚本优化-参数化方法
脚本优化-参数化方法 by:授客 QQ:1033553122 方法一 1.确定需要参数化的内容 2.选中需要参数化的内容 3.右键选中的内容->Replace with a Parameter- ...
- LoadRunner脚本优化之—参数化迭代介
在LoadRunner的脚本优化时,有时发送给服务器的请求参数化时,服务器返回的内容也会和参数化的内容相对应,例如发送的请求带有查询key=123,则服务器也会返回含有123相关的内容.这时我们在使用 ...
- loadrunner 脚本优化-检查点设置
脚本优化-检查点设置 by:授客 QQ:1033553122 VuGen判断脚本是否执行成功是根据服务器返回的状态来确定的,如果服务器返回的是HTTP状态为200 OK,那么VuGen就认为脚本正确地 ...
- loadrunner 脚本优化-集合点设置
脚本优化-集合点设置 by:授客 QQ:1033553122 添加集合点(Insert->Rendezvous) 当一个集合点被插入,VuGen往Vuser脚本中插入一个lr_rendezvou ...
- loadrunner 脚本优化-参数化之Parameter List参数取值
脚本优化-参数化之Parameter List参数取值 by:授客 QQ:1033553122 参数取值选项 Select next row Update value on 以上两个选项是改变参数化取 ...
- loadrunner 脚本优化-加密与解密
脚本优化-加密与解密 by:授客 QQ:1033553122 密码加密 可以给密码加密,意在把结果字符串作为脚本的参数或者参数值.例如,完整可能有一个用户密码填写的表单,你想测试网站针对不同密码的 ...
随机推荐
- DCT(离散余弦变换)算法原理和源码(python)
原理: 离散余弦变换(DCT for Discrete Cosine Transform)是与傅里叶变换相关的一种变换,它类似于离散傅里叶变换(DFT for Discrete Fourier Tra ...
- ”危险“的restrict与GCC的编译优化
restrict是C99标准中新添加的关键字,对于从C89标准开始起步学习C语言的同学来说(包括我),第一次看到restrict还是相当陌生的.Wikipedia给出的解释如下: In the C p ...
- java的四种内部类详解
引言 内部类,嵌套在另一个类的里面,所以也称为:嵌套类; 内部类分为以下四种: 静态内部类 成员内部类 局部内部类 匿名内部类 一.静态内部类 静态内部类: 一般也称"静态嵌套类" ...
- python高级-面向对象特性(12)
一.继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产,在程序中,继承描述的是事物之间的所属关系,例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物:同理,波斯猫和巴厘猫都继承自猫,而沙 ...
- [linux]解析crontab
linux提供了一个非常强大而且又比较好用的命令 [crontab] crontab是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行, ...
- mysql 开发进阶篇系列 54 权限与安全(账号管理的各种权限操作 下)
1. 查看权限 -- 如果host值不是%, 就要加上host值,下面查看bkpuser用户权限(6个权限, 限本地连接) SHOW GRANTS FOR bkpuser@localhost; -- ...
- mysql 开发基础系列3 日期数据类型
日期类型 如果要用来表示年月日,通常用DATE 来表示. 如果要用来表示年月日时分秒,通常用DATETIME 表示. 如果只用来表示时分秒,通常用TIME 来表示. TIMESTAMP表示格式 :YY ...
- Nacos系列:Nacos的Java SDK使用
Maven依赖 Nacos提供完整的Java SDK,便于配置管理和服务发现及管理,以 Nacos-0.8.0 版本为例 添加Maven依赖: <dependency> <group ...
- 记录学习新框架yii
最近打算提升自己的解决问题能力,于是打算从学习其他框架下手,让我们先去了解yii框架是如何运作的吧! https://www.yiichina.com/访问yii中文网站 让我们先把框架下载下来 点击 ...
- html引用外部js和css
html引用外部js和css css:<link rel="stylesheet" type="text/css" href="xx.css&q ...