LoadRunner去除事物中的程序的执行时间

大家在性能测试过程中,经常会用到程序处理或组织数据,以达到一定的测试目的,但是程序本身执行会消耗一些时间,这部分消耗的时间是包含在响应时间里面,此时,响应时间=正常响应时间+程序执行消耗时间。那么如何来保证响应最接近真实,LoadRunner提供了一组函数,减去程序消耗时间,达到测试目的。函数(绿色标注)如下:

 double time_elapsed = 0.00, duration = 0.00, waste = 0.00,trans_time = 0.00,waste_time = 0.00; 

 merc_timer_handle_t timer; 

         timer = lr_start_timer(); //timer开始

         if(strlen(lr_eval_string("{P_Bal}")) > 0)

         {

           for(i=0;i < strlen(lr_eval_string("{P_Bal}"));i++)

                   {

                            //lr_error_message("%d",i);

                            lr_save_var(lr_eval_string("{P_Bal}")+i,1,0,"P_Value");

                            #define temp = 0;

                            //lr_error_message("%s",lr_eval_string("{P_Value}"));

                            if(atoi(lr_eval_string("{P_Value}")) != 0)

                           {

                                     if(strcmp(lr_eval_string("{P_Value}"),",") != 0 && strcmp(lr_eval_string("{P_Value}"),".") != 0)

                                     {

                                               break;

                                     }

                            }

                   }

         }

         time_elapsed = lr_end_timer(timer);//停止timer

         lr_output_message("%lf",time_elapsed);

waste = time_elapsed * 1000; //毫秒转成秒

         if(lr_get_transaction_status("XXX") == 1 || atoi(lr_eval_string("{P_Value}")) <= 0)

         {

lr_wasted_time(waste);//响应时间减去纯语句消耗的时间

         lr_end_transaction("XXX", LR_FAIL);

                    lr_output_message("XXX失败 %s %s",lr_eval_string("{UserName}"),lr_eval_string("{P_AccountId}"));

         goto exit;

         }
关于时间的几个函数:
lr_get_transaction_duration得到transaction运行到当前位置的duration,包含事务的响应时间和wasted time,单位是s;

着重理解下wasted time:
 wasted time包括事务中函数自身执行所消耗的时间,这个时间是loadrunner自动会计的,计在lr_get_transaction_wasted_time里面,还有比如C语言等外部接口进行处理的时间这个loadrunner不会自动计,但是我们可以通过lr_start_timer(单位是s)、lr_end_timer(单位是s)、lr_wasted_time(这个函数的形参中wasted time的单位是毫秒,所以通过timer计的时间需要乘上1000)等函数手动计入lr_get_transaction_wasted_time里面

 下面来验证下:
Action()
 {
     int i, baseIter = 200;
     char dude[200];
     double wasteTime;
     merc_timer_handle_t timer; 

     lr_start_transaction("baidu");

     web_add_cookie("BAIDUID=63CCB143FE1734437DBED1D457D18E3E:FG=1; DOMAIN=www.baidu.com");

     web_add_cookie("BAIDUID=63CCB143FE1734437DBED1D457D18E3E:FG=1; DOMAIN=passport.baidu.com");

     web_add_cookie("BAIDUID=63CCB143FE1734437DBED1D457D18E3E:FG=1; DOMAIN=suggestion.baidu.com");

 web_url("www.baidu.com",
 "URL=http://www.baidu.com/",
 "Resource=0",
 "RecContentType=text/html",
 "Referer=",
 "Snapshot=t1.inf",
 "Mode=HTML",
 EXTRARES,
 "Url=http://s1.bdstatic.com/r/www/cache/static/global/img/icons_37d13939.png", ENDITEM,
 "Url=http://s1.bdstatic.com/r/www/cache/static/sug/js/bdsug_31b8d653.js", ENDITEM,
 "Url=/favicon.ico", "Referer=", ENDITEM,
 "Url=http://passport.baidu.com/passApi/js/uni_login_wrapper.js?cdnversion=1400118095796&_=1400118095656", ENDITEM,
 "Url=http://suggestion.baidu.com/su?
 wd=&zxmode=1&json=1&p=3&sid=4948_6429_1450_5223_6505_4760_6017_6462_6428_6456_6454&cb=jQuery110208749060739643981_1400118095657&_=1400118095658", ENDITEM, LAST);

 //在脚本中间位置,记录此时事务自身函数消耗的时间,这个是loadrunner自动计的
    lr_output_message("User created waste time to this point calculated by loadrunner = %lf", lr_get_transaction_wasted_time("baidu")); 

 //使用一个测试语句手动记录消耗的时间
    timer = lr_start_timer(); 

     for (i=0; i< (5 * baseIter); ++i)
             sprintf(dude, "This is the way we waste time in a script = %d", i); 

     wasteTime = lr_end_timer(timer);

     lr_output_message("User created waste time calculated by timer = %lf", wasteTime); 

     wasteTime *= 1000; 

 //通过lr_wasted_time函数将wasteTime标记为wasted time
     lr_wasted_time(wasteTime); 

 //通过lr_get_transaction_wasted_time函数会汇总手工记录的消耗时间和loadrunner自动记录的消耗时间
    lr_output_message("Total User created waste time = %lf", lr_get_transaction_wasted_time("baidu")); 

     lr_output_message("Transaction duration = %lf", lr_get_transaction_duration("baidu")); 

     lr_end_transaction("baidu", LR_AUTO);

     return 0;
 }

运行日志如下:
Virtual User Script started at : 2014-05-15 09:58:45
 Starting action vuser_init.
 Web Turbo Replay of LoadRunner 11.0.0 for WINXP; build 8859 (Aug 18 2010 20:14:31)   [MsgId: MMSG-27143]
 Run Mode: HTML   [MsgId: MMSG-26000]
 Run-Time Settings file: "F:\LR\baidu_open\\default.cfg"   [MsgId: MMSG-27141]
 Ending action vuser_init.
 Running Vuser...
 Starting iteration 1.
 Starting action Action.
 Action.c(12): Notify: Transaction "baidu" started.
 Action.c(14): web_add_cookie was successful   [MsgId: MMSG-26392]
 Action.c(16): web_add_cookie was successful   [MsgId: MMSG-26392]
 Action.c(18): web_add_cookie was successful   [MsgId: MMSG-26392]
 Action.c(20): Downloading resource "http://s1.bdstatic.com/r/www/cache/static/global/img/icons_37d13939.png" (specified by argument number 9)   [MsgId: MMSG-26577]
 Action.c(20): Downloading resource "http://s1.bdstatic.com/r/www/cache/static/sug/js/bdsug_31b8d653.js" (specified by argument number 11)
 [MsgId: MMSG-26577]
 Action.c(20): Downloading resource "http://www.baidu.com/favicon.ico" (specified by argument number 13)   [MsgId: MMSG-26577]
 Action.c(20): Downloading resource "http://passport.baidu.com/passApi/js/uni_login_wrapper.js?cdnversion=1400118095796&_=1400118095656" (specified by argument number 16)   [MsgId: MMSG-26577]
 Action.c(20): Downloading resource "http://suggestion.baidu.com/su?wd=&zxmode=1&json=1&p=3&sid=4948_6429_1450_5223_6505_4760_6017_6462_6428_6456_6454&cb=jQuery110208749060739643981_1400118095657&_=1400118095658" (specified by argument number 18)   [MsgId: MMSG-26577]
 Action.c(20): Found resource "http://www.baidu.com/img/baidu_jgylogo3.gif" in HTML "http://www.baidu.com/"   [MsgId: MMSG-26659]
 Action.c(20): Found resource "http://www.baidu.com/img/bdlogo.gif" in HTML "http://www.baidu.com/"   [MsgId: MMSG-26659]
 Action.c(20): Found resource "http://www.baidu.com/cache/global/img/gs-2.0.gif" in HTML "http://www.baidu.com/"   [MsgId: MMSG-26659]
 Action.c(20): Found resource "http://s1.bdstatic.com/r/www/cache/static/jquery/jquery-1.10.2.min_f2fb5194.js" in HTML "http://www.baidu.com/"   [MsgId: MMSG-26659]
 Action.c(20): Found resource "http://s1.bdstatic.com/r/www/cache/static/global/js/all_async_f712ea4c.js" in HTML "http://www.baidu.com/"   [MsgId: MMSG-26659]
 Action.c(20): Found resource "http://s1.bdstatic.com/r/www/cache/static/global/js/imsg_45172630.js" in HTML "http://www.baidu.com/"   [MsgId: MMSG-26659]
 Action.c(20): web_url("www.baidu.com") was successful, 106231 body bytes, 4084 header bytes, 59 chunking overhead bytes   [MsgId: MMSG-26385]
 Action.c(35): User created waste time to this point calculated by loadrunner = 0.758138
 Action.c(45): User created waste time calculated by timer = 7.646098
 Action.c(52): Total User created waste time = 8.404138
 Action.c(53): Transaction duration = 8.745259
 Action.c(55): Notify: Transaction "baidu" ended with "Pass" status (Duration: 8.7524 Wasted Time: 8.4041).
 Ending action Action.
 Ending iteration 1.
 Ending Vuser...
 Starting action vuser_end.
 Ending action vuser_end.
 Vuser Terminated.
运行的结果也证明了我之前的理解

 注:在最开始的时候,使用oracle两层协议录制脚本,一直不能演示出自身函数消耗的时间,lr_get_transaction_wasted_time的值都为0,后来使用http协议可以演示出来
时间: 2024-08-25 15:02:09

LoadRunner去除事物中的程序的执行时间的相关文章

去除源文件中的重复行的程序流程及其C代码实现

(本文正在参加2015博客之星评选,诚邀你来投票,谢谢:http://vote.blog.csdn.net/blogstar2015/candidate?username=zhouzxi) 一.需求描述 要求对一个包含若干行记录且某几条记录相同的文件(源文件)实现去重操作,并将去重之后的记录写入到另外一个文件(目的文件)中.也即最后生成的文件中没有内容相同的两行记录.如果源文件中两条记录之间有空行,则在目的文件中一并将其去掉. 两条记录相同的标准是: 1) 字符个数及内容完全相同. 2) 去除空

DSP 程序的执行时间

在访问TSCL寄存器前要定义 cregister volatile unsigned int TSCL; TSCL/TSCH,它们与CPU同频,共同表示一个64-bit数,CPU运行一个cycle,该寄存器就加1,因此可以用它们来准确的测量cpu在某个执行段中消耗的cycles.一般我们只会用到TSCL这个寄存器,而TSCH是高32位,除非测试整个工程,一般用不到它. DSP 程序的执行时间,布布扣,bubuko.com

Java批量去除文件名中的广告字段

最近下了淘宝到的极客学院视频,但是发现附带了好多广告文件并且所有文件都加了广告后缀(如图).我没有强迫症但也觉得实在不爽. 首先我通过windows自带的搜索功能删除了所有的广告文件,这很简单,就不说了. 然后我通过查找资料,写了一个Java程序删掉了所有文件的广告字段,下面是代码: import java.io.File; /** *自动扫描文件夹下的所有文件并去除文件名中的广告字段 */ public class Main2 { //在此输入要删去的广告内容 public static fi

LNMP一键安装包+Thinkphp搭建基于pathinfo模式的路由(可以去除url中的.php)

LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RadHat/Fedora.Debian/Ubuntu/Raspbian/Deepin VPS或独立主机安装LNMP(Nginx/MySQL/PHP).LNMPA(Nginx/MySQL/PHP/Apache).LAMP(Apache/MySQL/PHP)生产环境的Shell程序.同时提供一些实用的辅助工具如:虚拟主机管理.FTP用户管理.Nginx.MySQL/MariaDB.PHP的升级.常用缓存组件Redis.Xca

LoadRunner录制过程中,打不开IE浏览器,如何解决?

新手上路,问题连连啊,安装完LoadRunner 11后,发现LoadRunner录制过程中,打不开IE浏览器,于是我又开始一顿百度搜索原因: 大致的搜索结果如下,供各位看官浏览: 1,可能安装了多个浏览器,解决方法打开IE选项---高级--去掉"启用第三方浏览器扩展(需要重启动)"的勾选后,重启IE 2,点击我的电脑->属性->高级->性能下的设置按钮->数据执行保护-> 选中"仅为基本 Windows程序和服务启用DEP(T)"单选

Python关于去除字符串中空格的方法

Python关于去除字符串中空格的方法 在编写程序时我们经常会遇到需要将字符串中的空格去掉的情况,通常我们可以使用下面几种解决方法: 1.strip()方法:该方法只能把字符串头和尾的空格去掉,但是不能将字符串中间的空格去掉. s=' This is a demo ' print(s.strip()) lstrip():该方法只能把字符串最左边的空格去掉. s=' ! This is a demo ' l='!' print(s.lstrip()+l) rstrip():该方法只能把字符串最右边

自己动手去除app中谷歌广告

最近想去研究一下去除app中的谷歌广告,由于换了手机,且使用安卓6.0系统,暂时不能root安装辅助软件. 前言: 查看了很多网络文章,一般都是两种方法:把显示广告大小的参数改为0,或是修改广告访问的连接为无效连接,前一种比较通用且简单,后一种比较费功夫,但是更节省流量和系统资源 ,然后发现网络上的文章大多是转载的,且转载文章的人没有检测实际效果和实验环境,没有备注实验时间,这样很多转载的文章只是提供一个思路,但已经达不到效果了,所以只好重新研究一下,因为我没有系统学习java语言,只能看到什么

python_如何去除字符串中不想要的字符?

案例: 过滤用户输入中前后多余的空白字符 '    ++++abc123---    ' 过滤某windows下编辑文本中的'\r': 'hello world \r\n' 去掉文本中unicode组合字符,音调 "Zhào Qián Sūn Lǐ Zhōu Wú Zhèng Wáng" 如何解决以上问题? 去掉两端字符串: strip(), rstrip(),lstrip() #!/usr/bin/python3 s = ' -----abc123++++ ' # 删除两边空字符 p

C#中的程序集和命名空间

C#中的程序集和命名空间 如果说命名空间是类库的逻辑组织形式,那么程序集就是类库的物理组织形式.只有同时指定类型所在的命名空间及实现该类型的程序集,才能完全限定该类型.<精通.NET核心技术--原理与架构> 程序集和命名空间不存在必然联系,一个程序集可以包含多个命名空间,同一个命名空间也可以分放在几个程序集. 程序集是应用程序的部署单元..NET应用程序包含一个或多个程序集.通常扩展名是EXE或DLL 的.NET可执行程序称为程序集..NET程序集包含元数据,这些元数据描述了程序集中定义的所有