• 测试技术
  • 博客
  • 视频
  • 开源
  • 论坛
  • 沙龙
  • 下载
  • 杂志
  • 招聘

字号: | 推荐给好友 上一篇 | 下一篇

LoadRunner中的事务--好友冰岩友情原创

发布: 2008-7-30 22:02 | 作者: 阳光 | 来源: 本站原创 | 查看: 178次 | 进入软件测试时代论坛讨论

软件测试时代

事务又称为Transaction,在LoadRunner中的定义如下:An end-to-end(browser-to-browser) measurement of one or more user actions within action file。中文理解如下:事务(Transaction)是这样一个点,我们为了衡量某个action性能,需要在action的开始和结束位置插入这样一个范围,这就定义了一个transaction

事务的作用:LoadRunner运行到该事务的开始点时,LoadRunner就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在LoadRunner的运行结果中会有反映。通俗的讲LoadRunner中的事务就是一个计时标识,LoadRunner在运行过程中一旦发现事务的开始标识,就开始计时,一旦发现事务的结束表示,则计时结束,这个过程中得到的时间即为一个事务时间。通常事务时间所反映的是一个操作过程的响应时间。

下面我们说说为什么在LoadRunner中使用事务。为什么使用事务的原因是多种多样的,总结下来如下五点所示:

1事务是LoadRunner度量系统性能指标的唯一手段;(没有事务则没有办法衡量系统的响应时间,也许有人说LoadRunner可以通过编程来计时得到,不错如果你编程能力够强是能够实现的,但肯定不如LoadRunner中的事务用的简单而且方便)

2、事务能够用于度量高风险业务流程的性能指标;

3、事务能够度量在一组操作中每一步的性能指标;

4、通过事务计时实现了不同压力负载下的性能指标对比;

5、通过事务计时可以帮助定位性能瓶颈;

性能测试的角度出发,我们需要知道不同的操作所花费的时间,这样我们就可以衡量不同的操作对被测系统所造成的影响,那么我们如何知道不同的操作所花费的时间,这就用到了事务,我们在操作之前插入一个事务开始标识,在操作完成后插入一个事务结束表示,这样我们就知道了这个操作所花费的时间。

接着我们说说如何使用事务,以及事务应该应用在什么地方。

使用事务有如下几种方法:

1、方法一:脚本生成后,手动插入事务;方法:在LoadRunner脚本中点击鼠标:右键,选择“InsertStart Transaction”弹出一个对话框,输入一个事务名字(注:事务名字可以为中文、可以为英文,也可以中英文混合,但推荐的做法是起一个容易理解的名称,例如想知道登录所花费的时间,则插入事务可以命名为login或登录);“Start Transaction”插入完成后,还需要插入一个“End Transaction”,用以标识事务结束;注:Start TransactionEnd Transaction需要成对出现,如果仅插入Start Transaction则脚本编译会提示错误;此外,还可以通过LoadRunner vugen中的“Insert”菜单插入Start TransactionEnd Transaction

2、方法二:在脚本录制过程中插入Start TransactionEnd Transaction;在脚本录制过程中,通过录制工具条上的Start TransactionEnd Transaction图标插入事务,如下图所示:

3、方法三:通过Run-time Settings中的Automatic Transactions自动生成事务,如下图所示:

注:该种方法插入的事务仅能在LoadRunner Controller中的图表和报告中看到在脚本的log中看不到。

以上为事务的插入方法,无论是那种方法,插入事务后,我们都可以在脚本中看到如下两个函数:lr_start_transaction("事务") lr_end_transaction("事务", LR_AUTO),前一个为事务开始函数,后一个为事务结束函数,括号中引号中的内容为事务名称。

事务举例:如下为一个LoadRunner所生成的脚本。

   web_url("Folder.jsp_4",

             "URL=http://172.17.16.5/xpc71/jsp/com/folder/Folder.jsp",

             "Resource=0",

             "RecContentType=text/html",

             "Referer=http://172.17.16.5/xpc71/LoginAction.do",

             "Snapshot=t10.inf",

             "Mode=HTML",

             LAST);

      web_url("TemplateAdminAction.do",

             "URL=http://172.17.16.5/xpc71/TemplateAdminAction.do?forwardID=1",

             "Resource=0",

             "RecContentType=text/html",

             "Referer=http://172.17.16.5/xpc71/LoginAction.do",

             "Snapshot=t11.inf",

             "Mode=HTML",

             LAST);

 

      web_submit_form("ScheduleCreationAction.do",

             "Snapshot=t12.inf",

             ITEMDATA,

             "Name=PTName", "Value=test", ENDITEM,

             "Name=headerTempID", "Value=ttte", ENDITEM,

             "Name=selectHeader", "Value=1", ENDITEM,

             "Name=schTempID", "Value=preProductionDetailTemplate", ENDITEM,

             LAST);

 

我们插入事务之后如下所示:

 

   lr_start_transaction("事务");

   lr_start_transaction("事务1");

   lr_start_transaction("事务2");

 

   web_url("Folder.jsp_4",

             "URL=http://172.17.16.5/xpc71/jsp/com/folder/Folder.jsp",

             "Resource=0",

             "RecContentType=text/html",

             "Referer=http://172.17.16.5/xpc71/LoginAction.do",

             "Snapshot=t10.inf",

             "Mode=HTML",

             LAST);

      lr_end_transaction("事务", LR_AUTO);

      web_url("TemplateAdminAction.do",

             "URL=http://172.17.16.5/xpc71/TemplateAdminAction.do?forwardID=1",

             "Resource=0",

             "RecContentType=text/html",

             "Referer=http://172.17.16.5/xpc71/LoginAction.do",

             "Snapshot=t11.inf",

             "Mode=HTML",

             LAST);

      lr_end_transaction("事务1", LR_AUTO);

 

      web_submit_form("ScheduleCreationAction.do",

             "Snapshot=t12.inf",

             ITEMDATA,

             "Name=PTName", "Value=test", ENDITEM,

             "Name=headerTempID", "Value=ttte", ENDITEM,

             "Name=selectHeader", "Value=1", ENDITEM,

             "Name=schTempID", "Value=preProductionDetailTemplate", ENDITEM,

             LAST);

      lr_end_transaction("事务2", LR_AUTO);

解释:

Ø       “事务”统计的时间为

web_url("Folder.jsp_4",

                   "URL=http://172.17.16.5/xpc71/jsp/com/folder/Folder.jsp",

                   "Resource=0",

                   "RecContentType=text/html",

                   "Referer=http://172.17.16.5/xpc71/LoginAction.do",

                   "Snapshot=t10.inf",

                   "Mode=HTML",

                   LAST);

所执行的时间;

Ø       “事务1”统计的时间为:

      web_url("Folder.jsp_4",

             "URL=http://172.17.16.5/xpc71/jsp/com/folder/Folder.jsp",

             "Resource=0",

             "RecContentType=text/html",

             "Referer=http://172.17.16.5/xpc71/LoginAction.do",

             "Snapshot=t10.inf",

             "Mode=HTML",

             LAST);

      web_url("TemplateAdminAction.do",

             "URL=http://172.17.16.5/xpc71/TemplateAdminAction.do?forwardID=1",

             "Resource=0",

             "RecContentType=text/html",

             "Referer=http://172.17.16.5/xpc71/LoginAction.do",

             "Snapshot=t11.inf",

             "Mode=HTML",

             LAST);

所执行的时间;

Ø       “事务2”统计的时间为:

      web_url("Folder.jsp_4",

             "URL=http://172.17.16.5/xpc71/jsp/com/folder/Folder.jsp",

             "Resource=0",

             "RecContentType=text/html",

             "Referer=http://172.17.16.5/xpc71/LoginAction.do",

             "Snapshot=t10.inf",

             "Mode=HTML",

             LAST);

web_url("TemplateAdminAction.do",      

"URL=http://172.17.16.5/xpc71/TemplateAdminAction.do?

forwardID=1",

             "Resource=0",

             "RecContentType=text/html",

             "Referer=http://172.17.16.5/xpc71/LoginAction.do",

             "Snapshot=t11.inf",

             "Mode=HTML",

             LAST);

 

      web_submit_form("ScheduleCreationAction.do",

             "Snapshot=t12.inf",

             ITEMDATA,

             "Name=PTName", "Value=test", ENDITEM,

             "Name=headerTempID", "Value=ttte", ENDITEM,

             "Name=selectHeader", "Value=1", ENDITEM,

"Name=schTempID", "Value=preProductionDetailTemplate", ENDITEM,

             LAST);

所执行的时间;

从上文我们可以看出事务之间可以嵌套使用,相互之间没有影响,事务计时仅仅以事务名称为标识。

总结:

       使用LoadRunner transactions可以度量:

   业务流程中每一步所花费的时间

   整个业务流程所花费的时间

   业务流程中每一步的性能指标可以自动度量

       可以在录制过程中和录制完成后增加LoadRunner transactions

       利用“automatic LoadRunner transactions”可以很方便的度量每一步的性能指标。

文章来源于软件测试时代 http://www.testage.net/

TAG: loadrunner LoadRunner Loadrunner 事务 原创 好友 友情


软件测试时代开课信息
Google
关于我们 | 合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2007 TestAge(测试时代) 北京慧灵科技有限公司 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备05002925号
技术支持和业务联系:info@testage.com.cn 电话:010-51297073