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. Loadrunner 脚本优化-事务函数简介

    脚本优化-事务函数简介 by:授客 QQ:1033553122 1.事务的开始和结束名称需要相同 lr_start_transaction(“transaction_name”); …//事务处理 l ...

  2. Loadrunder脚本篇——web_custom_request函数介绍

    c语言版本: int web_custom_request(const char *RequestName, , [EXTRARES, ,] LAST ); 参数说明: RequestName     ...

  3. loadrunner之脚本篇——录制方式HTML-based和URL-based Script

    A.   HTML-based Script 针对 Web (HTTP/HTML)虚拟用户的缺省录制级别.它指示VuGen录制当前web页面上下文中的HTML action.录制会话期间并不录制所有资 ...

  4. loadrunner之脚本篇——代理录制

    版本:Loadruner 11.0 A.PC端录制Web应用程序 步骤1:根据实际情况,选择对应的协议 本例中选择Web(HTTP/HTML),如下 步骤2:找到代理设置界面 点击 Start Rec ...

  5. loadrunner之脚本篇——将内容保存为参数

    在VuGen中默认使用{}的字符串称为参数 注意:参数必须在双引号中才能用 将字符串保存为参数 lr_save_string("string you want to save", ...

  6. LoadRunner脚本编写之三(事务函数)

    LoadRunner脚本编写之三(事务函数) 关于脚本的这块,前两篇都在讲C语言,其实,要整理点实用的东西挺难,在应用中多对录制的脚本分析,但对于新手学脚本确实无从下手. 先贴一个脚本: 完整代码: ...

  7. LoadRunner脚本篇

    LoadRunner脚本篇     1概述 2脚本录制 3脚本编写 4脚本调试   关  键  词:LoadRunner 性能测试脚本 摘      要:编写一个准确无误的脚本对性能测试有至关重要的意 ...

  8. loadrunner 脚本开发- web_url函数详解

    脚本开发- web_url函数详解 by:授客 QQ:1033553122   加载指定url的web页面(GET请求) C语言函数 int web_url( const char *StepName ...

  9. Loadrunner 脚本开发-soap_request函数介绍及WebService接口测试

    脚本开发- soap_request函数介绍及WebService接口测试 by:授客 QQ:1033553122 函数介绍 soap_request 函数执行一个SOAP请求 函数原型 int so ...

随机推荐

  1. hive分桶 与保存数据的方式

    创建分桶的表 create table t_buck(id int ,name string) clustered by (id ) sorted by (id) into 4 buckets  ; ...

  2. 配置AutoMapper映射规则《转》

    配置AutoMapper映射规则 AutoMapper是基于约定的,因此在实用映射之前,我们需要先进行映射规则的配置. public class Source { public int SomeVal ...

  3. MFC 改变控件的大小和位置

    mfc 改变控件大小和位置用到的函数: ) void MoveWindow(int x, int y, int nWidth, int nHeight); ) void MoveWindow(LPCR ...

  4. 基于AR9331(MIPS架构)分析系统启动过程(uboot)

    前提: 1.AR9331是基于MIPS 24K CPU的一款WIFI1X1芯片,其SDK采用uboot作为引导.AR9331中定义的基地址是:0x9f00,0000 2.MIPS24K芯片,将固定的起 ...

  5. Java基础11 对象引用(转载)

    对象引用 我们沿用之前定义的Human类,并有一个Test类:  public class Test{    public static void main(String[] args){       ...

  6. TP view中跳转到某个控制器

    #直接用 __MODULE__/控制器名/方法名/参数名/参数 <a href="__MODULE__/Product/list_table/goods_id/<?php ech ...

  7. 【转】Monkey测试5-运行中停止monkey

    停止monkey自动测试步骤: 1.ps命令  查找uiautomator的进程 打开cmd命令行窗口 输入: adb shell ; ps | grep monkey; 返回来的第一个数字,即是mo ...

  8. 使用google地图API

    1.获取key 2.获取相应地方的坐标:https://support.google.com/maps/answer/18539?co=GENIE.Platform%3DDesktop&hl= ...

  9. 更改centos 7 的默认启动为命令界面

    vi /etc/inittab 可以看到这样两行: # To set a default target, run:# systemctl set-default TARGET.target 故: su ...

  10. -webkit-transition: all .2s ease-in-out;

    W3C标准中对CSS3的transition这是样描述的:CSS的transition允许CSS的属性值在一定的时间区间内平滑地过渡.这种效果可以在鼠标单击.获得焦点.被点击或对元素任何改变中触发,并 ...