loadrunner 脚本优化-事务时间简介
脚本优化-事务时间简介
by:授客 QQ:1033553122
事务概念
事务是指用户在客户端做一种或多种业务所需要的操作集(actions),通过事务开始和结束函数可以标记完成该业务所需要的操作内容(脚本section)。定义事务来衡量服务器的性能,例如,你可以定义一个事务来衡量服务器处理查看账户余额和显示信息于ATM的请求时间。
事务时间
一个事务的时间是指持续时间,从开始到结束。对于一个事务时间来说,一般由4个部分组成:
响应时间
Wasted Time
Think Time
事务自身时间
a) 响应时间
这个是事务的目的,响应时间是通过记录用户请求的开始时间和服务器返回内容到用户的时间差值来计算用户操作响应时间的。
注:这里不包含客户端GUI时间,例如浏览器解释页面所耗费的时间
对软件来说,通过事务得到的系统响应时间也是由非常多的部分组成的,一般来说,响应时间由网络时间、服务器处理时间、网络延迟三大部分组成。先来看看当一个客户端发出请求到服务器返回需要经历那些路径
1.网络时间
客户端发出请求后首先通过网络来到Web Server上(消耗时间为N1);
然后Web Server将处理后的请求发给App Server(消耗时间为N2);
App Server将操作数据指令发送给Database(消耗时间为N3);
Database服务器将查询结果数据发送回App Server(消耗时间为N4);
App Server将处理后的页面发给Web Server(消耗时间为N5);
最后Web Server将HTML转发到客户端(消耗时间为N6)。
2.服务器处理时间
各个服务器处理所需要的时间WT、AT、DT。
3.网络延迟
最终响应时间=网络延迟时间+WT+AT+DT+(N1+N2+N3)+(N4+N5+N6)+WT+AT+DT
影响网络的因素一般包括以下内容:
1.前端Network
*DNS Lookup
*Time to connect
*Time to first buffer
*Network Time
*Download Time
*SSL handshake
*FTP authentication
*Client Time
*网络延迟
2 后端服务
*Web Server
--Servlet Time
--Method Time
--静、动态压缩
*App Server
--EJB Time
--Method Time
--JNID Lookup
*Database Server
--JDBC Time
--Connect Time
--Execute Time
注意:通过事务可以获得每个操作所消耗的准确时间,例如查询、登录、删除操作。但是对于性能分析来说,这个时间还是太长了,无法有效解帮助我们定位性能瓶颈!lr目前也只能对自己发出的请求和服务返回的内容进行网络级别的分析,也就是说lr能够分析的时间为客户端到www web服务器的时间N1和web服务器返回到客户端的时间N6。这个时间和网络速度有关,可以用lr的专用词Web Page Breakdown来解释。也就是说VuGen可以分析的时间至有客户端到Web Server之间的部分,后面从Web Server到App Server,再到Database Server的时间只能得到一个总和。
b) 事务自身时间
事务中哪怕没有操作,也是需要时间的,不过这个时间一般是在0.01秒左右,所以可以忽略。
lr_start_transaction(“thinktime”);
lr_end_transaction(“thinktime”,LR_AUTO);
运行脚本后,控制台输出如下:
Action.c(3): Notify: Transaction "thinktime" started.
Action.c(4): Notify: Transaction "thinktime" ended with "Pass" status (Duration: 0.0095).
c) 思考时间
Think Time是LoadRunner提供的一种模拟用户等待的方式,通过lr_think_time()函数实现。在函数内写入对应的时间(单位是秒),当脚本在Controller中运行到该函数时就会等待相应的时间。注意在VuGen中,回放Think Time默认关闭。
Think Time在进行性能测试时需要打开,只有这样每个虚拟用户才真正按照用户的操作速度来完成请求,才能得到真实情况下的系统数据。如果不打开Think Time,测试获得的数据是在全负载下的一些理论峰值数据。
那么Think Time在事务中如何影响事务时间呢?
lr_start_transaction(“thinktime”);
lr_think_time(5);
lr_end_transaction(“thinktime”,LR_AUTO);
在Run-time Settings中设置Think Time,启用Replay Think Time功能,运行之后可以看到以下结果:
Action.c(3): Notify: Transaction "thinktime" started.
Action.c(4): lr_think_time: 5.00 seconds.
Action.c(5): Notify: Transaction "thinktime" ended with "Pass" status (Duration: 5.0181 Think Time: 4.9993).
所以Think Time会被算在事务的时间内,不过在Analysis中可以设置过滤规则将其扣除,另外我们建议尽量不要在事务内使用lr_think_time()函数。
d) 浪费时间(Wasted Time)
在使用事务的时候,经常会看到在事务日志中有Wasted Time,Wasted Time是指事务中应该扣除的由于其他原因导致的时间浪费。如下:
Action()
{
lr_start_transaction("mainpage");
web_url("51testing","URL=http://bbs.51testing.com",LAST);
lr_end_transaction("mainpage", LR_AUTO);
return 0;
}
运行结果:
运行结果说明事务(打开51testing页面)所花费的时间为Duration=1.2395秒和事务结束的状态(Pass)。
在默认情况下,LoadRunner会将自身脚本运行浪费的时间自动记录Wasted Time,例如执行关联,检查点等函数的时间。
除了脚本自身浪费的时间,某些时候使用C语言等外部接口进行处理所消耗的时间也会影响事务的时间,这个时间LoadRunner无法处理。这种情况lr无法处理,需要人为地计算第三方时间开销,并且将这个开销的时间记入Wasted Time中,例如:
Action()
{
int i;
int num=1000; //循环迭代次数
char dude[1000];
double time_elapsed; //处理循环的时间
double wasteTime; //浪费时间
double transaction_time; //事务自身时间
double totalWasteTime; //总的浪费时间
double test;
merc_timer_handle_t timer; //定时器
//开始事务
lr_start_transaction("Demo");
timer=lr_start_timer(); //开启计时器
for(i=0;i<=num;i++)
{
sprintf(dude,"This is the way we waste time in a script=%d",i);
}
//获取处理循环的时间(以秒为单位)
time_elapsed =lr_end_timer(timer);
//换算为毫秒
wasteTime= time_elapsed * 1000;
//获取事务自身时间,以毫秒为单位//注意,该语句必须放在事务中间,即事务结束之前
transaction_time = lr_get_transaction_wasted_time("Demo") * 1000;
//获取事务的持续时间并输出,以秒为单位
//test=lr_get_transaction_duration("Demo");
//lr_output_message("�", test);
lr_end_transaction("Demo", LR_AUTO);
totalWasteTime = transaction_time + wasteTime;
lr_wasted_time(totalWasteTime);
return 0;
}
其中lr_start_timer()是一个LoadRunner自带的时间计数器,它和lr_end_timer()相对应,能够返回这两个函数间的时间差。
为了确保响应时间的正确,需要扣除在运行脚本时自身的时间消耗,事务中尽量避免出现非请求的处理内容,如果无法避免请,使用lr_wasted_time()函数将多余的时间开销扣除。
注意:在计算Wasted Time时不要直接使用lr_wasted_time()覆盖,而忘了加上脚本中LoadRunner函数的自身时间。通过lr_get_transaction_wasted_time()函数可获得事务自身的Wasted Time,将这个时间累加上第三方统计的Wasted Time,再通过lr_wasted_time()函数覆盖。
阅读下篇:
Loadrunner 脚本优化-事务函数简介
转载于:https://www.cnblogs.com/shouke/p/10158356.html
loadrunner 脚本优化-事务时间简介相关推荐
- Loadrunner脚本优化-参数化之关联MySQL数据库获取数据
脚本优化-参数化之关联MySQL数据库获取数据 by:授客 QQ:1033553122 测试环境: Loadrunner 11 Win7 64位 实操: 1. 安装MySQL ODBC驱动程序 O ...
- loadrunner脚本练习
loadrunner脚本练习 #include "web_api.h" Action() { char* abort="aborting..."; ...
- LoadRunner脚本篇
LoadRunner脚本篇 1概述 2脚本录制 3脚本编写 4脚本调试 关 键 词:LoadRunner 性能测试脚本 摘 要:编写一个准确无误的脚本对性能测试有至关重要的意义.本文介绍 ...
- 转:如何在 LoadRunner 脚本中做关联 (Correlation)
如何在 LoadRunner 脚本中做关联 (Correlation) 当录制脚本时,VuGen会拦截client端(浏览器)与server端(网站服务器)之间的对话,并且通通记录下来,产生脚本.在V ...
- Jmeter(七)Jmeter脚本优化(数据与脚本分离)
午休时间再来记一记,嗯..回顾着使用Jmeter的历程,想着日常都会用到的一些功能.一些组件:敲定了本篇的主题----------是的.脚本优化. 说起脚本优化,为什么要优化?又怎么优化?是个永恒的话 ...
- Loadrunner脚本编程(4)-数据类型操作和字符串操作
http://www.360doc.com/content/10/0806/13/1698198_44078277.shtml 一,数据类型转换 没有使用过C编程的LoadRunner脚本编写者会发现 ...
- 性能测试初学_对loadrunner脚本的理解
例子:loadrunner自带的飞机订票系统 录制登陆操作脚本 对照F1帮助及火狐抓包的理解,整理loadrunner脚本与抓包的关联.此为个人理解,有些未证实,权当记录. Action() { we ...
- 性能测试:Loadrunner 脚本录制、设置事务、添加检查点、参数化以及添加关联
Loadrunner 脚本录制.设置事务.添加检查点.参数化以及添加关联 说明:本文使用loadrunner自带的HP Web Tours Application,录制web脚本没有概念性的解释,直接 ...
- loadrunner脚本编写(转载至虫师博客)
性能测试工程师要懂代码么?答案是必须的.好多测试员认为在loadrunner中编写脚本很难很牛X ,主要是大多测试人员并未做过开发工作,大学的那点程序基础也忘记的差不多了.还有非计算机专业出身的测试员 ...
最新文章
- 关于按键消抖以及LED灯控制的一个实例
- flask urllib上传图片
- hive建表映射到hbase
- PHP类的静态(static)方法和静态(static)变量使用介绍
- java递归遍历删除文件
- floatmap 二维数组_Golang学习笔记(四):array、slice、map
- Android开发笔记(五十)定时器AlarmManager
- 我们每个人都想在事业上获得成功,但做到的人往往凤毛麟角
- Servlet中将JavaBean对象传递到JSP页
- v-ray 5.0 渲染器参数说明
- STM32标准库(固件库)分析
- Cocos2D场景编辑器
- 方便好用的论文管理软件EndNote X9 + PDF阅读编辑器Adobe Acrobat DC(2)
- RequestResponse
- 2019033期3d计算机开机号,3D历史120期开奖
- python前戏之量
- [渗透教程]-006-渗透测试-Metasploit以及实战教程
- 05- 线性回归算法 (LinearRegression) (算法)
- Mybatis-1.Mybatis概述
- 【Skill】从 WPS 步入Office 365
热门文章
- opengl 高级技巧
- H3C三层交换机划分VLAN示例
- 【java】java ssh 远程执行命令 并且获取执行的结果
- 【ElasticSearch】Es 源码之 UsageService 源码解读
- 【kafka】kafka 错误代码解释
- 【ES】ES 运用search_after来进行深度分页
- 【MySQL】mysql The server time zone value “乱码” 错误
- notepad: 怎么在notepad里面,将字符串替换成换行
- VM : linux虚拟机上挂在U盘
- 【Flink】Flink自定义UDF以及为函数启用别名