资源描述
LR中的事务(transaction)
1. 关于事务(Transaction)
中文理解如下:事务(Transaction)是这样一个点,我们为了衡量某个action的性能,需要在action的开始和结束位置插入这样一个范围,这就定义了一个transaction。
事务的作用:LoadRunner 运行到该事务的开始点时,LoadRunner 就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在LoadRunner的运行结果中会有反映。通俗的讲LoadRunner中的事务就是一个计时标识,LoadRunner在运行过程中一旦发现事务的开始标识,就开始计时,一旦发现事务的结束表示,则计时结束,这个过程中得到的时间即为一个事务时间。通常事务时间所反映的是一个操作过程的响应时间。
下面我们说说为什么在LoadRunner中使用事务。为什么使用事务的原因是多种多样的,总结下来如下五点所示:
1、事务是 LoadRunner 度量系统性能指标的唯一手段;(没有事务则没有办法衡量系统的响应时间,也许有人说LoadRunner可以通过编程来计时得到,不错如果你编程能力够强是能够实现的,但肯定不如LoadRunner中的事务用的简单而且方便)
2、事务能够用于度量高风险业务流程的性能指标;
3、事务能够度量在一组操作中每一步的性能指标;
4、通过事务计时实现了不同压力负载下的性能指标对比;
5、通过事务计时可以帮助定位性能瓶颈;
从性能测试的角度出发,我们需要知道不同的操作所花费的时间,这样我们就可以衡量不同的操作对被测系统所造成的影响,那么我们如何知道不同的操作所花费的时间,这就用到了事务,我们在操作之前插入一个事务开始标识,在操作完成后插入一个事务结束表示,这样我们就知道了这个操作所花费的时间。
接着我们说说如何使用事务,以及事务应该应用在什么地方。
使用事务有如下几种方法:
1、方法一:脚本生成后,手动插入事务;方法:在LoadRunner脚本中点击鼠标:右键,选择“Insert”→“Start Transaction”弹出一个对话框,输入一个事务名字(注:事务名字可以为中文、可以为英文,也可以中英文混合,但推荐的做法是起一个容易理解的名称,例如想知道登录所花费的时间,则插入事务可以命名为login或登录);“Start Transaction”插入完成后,还需要插入一个“End Transaction”,用以标识事务结束;注:Start Transaction和End Transaction需要成对出现,如果仅插入Start Transaction则脚本编译会提示错误;此外,还可以通过LoadRunner vugen中的“Insert”菜单插入Start Transaction和End Transaction;
2、方法二:在脚本录制过程中插入Start Transaction和End Transaction;在脚本录制过程中,通过录制工具条上的Start Transaction和End 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” 可以很方便的度量每一步的性能指标。
2. 将事务插入到 Vuser 脚本
可以定义事务以度量服务器的性能。每个事务度量服务器响应指定 Vuser 请求所
用的时间。这些请求可以是简单任务(如等待对单个查询的响应),也可以是复
杂任务(如提交多个查询和生成报告)。
要度量事务,需要插入 Vuser 函数以标记任务的开始和结束。在脚本内,可以标
记的事务不受数量限制,每个事务的名称都不同。
对于 LoadRunner 和优化模块,Controller 或控制台将度量执行每个事务所用的
时间。运行测试后,可使用 Analysis 的图形和报告来分析各个事务的服务器性
能。
可以在录制期间或录制之后创建事务。要在录制后添加事务,请使用事务编辑器
以用图形标记事务的步骤,“事务”(通过 VuGen 的事务编辑器,可以在脚本的缩略图视图中直接添加和管理事务。)。或者,使用“插入”菜
单添加“开始事务”和“结束事务”标记。
以下部分描述如何在录制期间创建事务。
要标记事务的开始,请执行下列操作:
1 在录制 Vuser 脚本时,单击“录制”工具栏上的“开始事务”按钮。将打开
“开始事务”对话框。
2 在“事务名”框中键入事务的名称。事务名必须以字母或数字开始,可以包含字
母、数字或者下列字符:!、$、%、&、'、-、[、^、_、`、<、>、{、}、| 或 ~。
请勿使用句号 (.)。
单击“确定”接受该事务名称。VuGen 将把 lr_start_transaction 语句插入到
Vuser 脚本。例如,以下函数指示了 trans1 事务的开始:
lr_start_transaction("trans1");
标记事务的结束
可通过结束事务语句来标记业务流程的结束。
要标记事务的结束,请执行下列操作:
1 在录制脚本时,单击“录制”工具栏上的“结束事务”按钮。将打开“结束事
务”对话框。
2 单击箭头获得打开事务的列表。选择要关闭的事务。
单击“确定”接受该事务名称。VuGen 将把 lr_end_transaction 语句插入到
Vuser 脚本。例如,以下函数指示了 trans1 事务的结束:
lr_end_transaction("trans1", LR_AUTO);
展开阅读全文