http://www.360doc.com/content/15/1204/10/29391160_517809898.shtml

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事务与子事务函数简介相关推荐

  1. postgresql 子查询_PostgreSQL子事务及性能分析

    作者介绍Laurenz Albe:Cybertec的高级顾问和支持工程师.自2006年以来,一直与PostgreSQL合作并为其做出贡献. 译者简介陈雁飞:开源PostgreSQL爱好者,一直从事Po ...

  2. 本地事务与分布式事务

    文章目录 一.本地事务 1.事务的基本性质 2.事务的隔离级别 3.spring事务的传播行为 4.SpringBoot事务关键点 4.1.事务的自动配置 4.2.事务的坑 5.本地事务问题 二.分布 ...

  3. 事务嵌套 、事务挂起、事务传播特性

    事务嵌套 .事务挂起.事务传播特性 即多个事务方法嵌套调用时 父子方法的事务如何嵌套.合并.管理 场景 方法啊调用方法b 方法b是事务方法 方法a不确定时(a可能有事务注解) 具体七种 propaga ...

  4. 【Spring学习34】Spring事务(4):事务属性之7种传播行为

    事务传播行为 什么叫事务传播行为?听起来挺高端的,其实很简单. 即然是传播,那么至少有两个东西,才可以发生传播.单体不存在传播这个行为. 事务传播行为(propagation behavior)指的就 ...

  5. loadrunner脚本设计:事务函数的使用

    脚本增强的目的和方式 ps:检查点也叫断言. 事务:局部操作的汇总,是tps的基础. 集合点:虚拟用户集合在一起,实现并发操作. 参数化和检查点: 参数化就是脚本中的常量用变量去代替. runtime ...

  6. 视图、触发器、事务、存储过程、函数,流程控制

    视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时 ...

  7. mysql七:视图、触发器、事务、存储过程、函数

    阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名 ...

  8. MySQL数据库(四):多表查询、视图、事务、索引、函数、Go连接MySQL

    MySQL数据库:视图.事务.索引.函数.Go连接MySQL 1.1 目录 文章目录 1.1 目录 1.2 多表查询分类 1.2.1 内连接[inner join] 1.2.2 左外连接[left j ...

  9. 5月14日 python学习总结 视图、触发器、事务、存储过程、函数、流程控制、索引...

    一.视图 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的直接使用即可 2.为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view t ...

  10. 数据库事务、存储过程、函数以及触发器之间的区别和联系

    一.[事务概念] 事务(Transaction)是指构成单一逻辑工作单元的操作集合,要么完整地执行,要么完全不执行. 1,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前 ...

最新文章

  1. vs编译报错C1020: 意外的 #endif
  2. 如何锻炼自己的抗干扰能力
  3. 高手教你PHP上传多张图片
  4. python测试用例管理工具_三款开源测试管理工具推荐
  5. 海外 谷歌 app api_Google App Engine Java功能和命名空间API
  6. oracle 管道通信,oracle管道化表函数
  7. 25 岁的老 Delphi,还值得程序员入手吗?
  8. phoenixframe自动化测试平台对Firefox和chrome支持的说明
  9. 解决IIShalders错误,解决IISmodules错误
  10. 时间序列(数据分析)
  11. C语言学习(一)C语言能干什么?为什么要学习C语言?
  12. 【王道考研】信号量机制
  13. pop3邮箱怎么设置收发服务器端口,常用邮箱的服务器(Smtp/POP3)地址和端口总结
  14. luogu 4234 最小差值生成树 LCT
  15. 6轴串联关节机器人的奇异点
  16. java 如何转化成机器指令_Java代码到底是如何编译成机器指令的
  17. 解决docker启动错误 error creating overlay mount to /var/lib/docker/overlay2
  18. Mysql语句优化的原则——让你写sql更加顺手
  19. ecg信号越界_精确心电图ECG信号处理介绍
  20. ckplayer html播放本地,本地化DPLAYER和CKPLAYER播放器自动下一集

热门文章

  1. iOS 面向切面编程与typhoon框架
  2. 【聚沙成塔系列】之《UML九种图
  3. 关于IT程序员一些面试技巧
  4. 认知升级 - 第一性原理
  5. 计算机硬盘hs申报要素,实例手把手教你填报HS编码和申报要素
  6. 科思创为全新概念车丰田LQ提供可持续解决方案
  7. AI 程序员码说摄影图像基础
  8. Android:日志系统
  9. 2019年系统架构设计师考试总结
  10. Linux 查询系统日志