51Testing软件测试论坛
标题:
LoadRunner常用函数之二--事务函数
[打印本页]
作者:
mmsw450
时间:
2013-1-7 14:37
标题:
LoadRunner常用函数之二--事务函数
上一篇 LoadRunner常用函数之一 --String函数
http://bbs.51testing.com/thread-886567-1-1.html
近日计划将LR中常用函数,进行归纳和总结,并写出一些简单的示例。虽然在LR帮助文档中,均有这些函数的用法及示例程序,但仍希望对想学LR编程的朋友提供些帮助。希望高手勿喷!
所有示例均在LR8.1下运行通过。
个人新建Q群:288793120
事务函数
/*
---------------------
int lr_start_transaction( const char *transaction_name );
标记一个事务的开始
参数 transaction_name:事务名称
int lr_end_transaction( const char *transaction_name, int status ) ;
标记一个事务的结束
参数 transaction_name:事务名称
status:事务结束的状态 ,有如下四种
LR_PASS
LR_FAIL
LR_AUTO //根据运行结果自动标记事务运行结束状态;录制产生的脚本,常以AUTO结束。
LR_STOP
示例程序:
---------------------
*/
Action()
{
int httpcode ;
lr_start_transaction("Baidu");
//访问baidu首页
web_url("Baidu",
"URL=HTTP://www.baidu.com",
LAST);
//获取上次HTTP请求返回状态码,如果为200,标记事务结束,且状态为通过,反之标记事务结束,状态为失败
httpcode = web_get_int_property(HTTP_INFO_RETURN_CODE);
if (httpcode == 200) {
lr_end_transaction("Baidu",LR_PASS); //标记事务结束,且状态为通过
}
else {
lr_end_transaction("Baidu",LR_FAIL); //标记事务结束,状态为失败
}
return 0;
}
/*
输出结果为:
---------------------
Notify: Transaction "Baidu" started.
Notify: Transaction "Baidu" ended with "Pass" status (Duration: 2.1206 Wasted Time: 1.5115).
---------------------
*/
// lr_stop_transaction and lr_resume_transaction
/*
---------------------
double lr_stop_transaction( const char *transaction_name);
暂时停止收集指定事务的报告;直到调用lr_resume_transaction ;事务的"get"函数将返回从事务开始的所有数据,包括暂停和恢复之间
的执行动作的报告。
void lr_resume_transaction( const char *transaction_name);
恢复由参数指定的事务(参数内容为要恢复的事务名称)
示例:
--------------------
*/
Action()
{
int httpcode ;
lr_start_transaction("Baidu");
//访问Baidu首页
web_url("Baidu",
"URL=HTTP://www.Baidu.com",
LAST);
lr_message("在调用stop之前事务所花费时间为 %f",lr_get_transaction_duration("Baidu"));
lr_stop_transaction("Baidu"); //暂停事务,并停止事务
web_url("Baidu2",
"URL=HTTP://www.Baidu.com",
LAST);
lr_message("在调用stop之后事务所花费时间为 %f",lr_get_transaction_duration("Baidu"));
lr_resume_transaction("Baidu");
lr_message("在调用resume之后事务所花费时间为 %f",lr_get_transaction_duration("Baidu"));
lr_end_transaction("Baidu",LR_AUTO);
return 0;
}
/*
输出结果为:
--------------------
Starting action Action.
Action.c(4): Notify: Transaction "Baidu" started.
...
Action.c(6): web_url("Baidu") was successful, 25019 body bytes, 2268 header bytes, 38 chunking overhead bytes [MsgId: MMSG-26385]
在调用stop之前事务所花费时间为 0.588503
Action.c(11): Notify: Transaction "Baidu" stopped.
...
Action.c(13): web_url("Baidu2") was successful, 4258 body bytes, 320 header bytes [MsgId: MMSG-26386]
在调用stop之后事务所花费时间为 0.647453
Action.c(19): Notify: Transaction "Baidu" resumed.
在调用resume之后事务所花费时间为 0.850922
Action.c(23): Notify: Transaction "Baidu" ended with "Pass" status (Duration: 0.8624 Wasted Time: 0.4233).
Ending action Action.
--------------------
*/
/*
---------------------
int lr_start_sub_transaction( const char *sub_transaction, const char *parent_transaction);
参数说明:
sub_transaction :子事务名称
parent_transaction:父事务名称
int lr_end_sub_transaction( const char *sub_transaction, int status );
参数说明:
sub_transaction :子事务名称
status:事务结束的状态
有如下四种
LR_PASS
LR_FAIL
LR_AUTO //根据运行结果自动标记事务运行结束状态;录制产生的脚本,常以AUTO结束。
LR_STOP
示例:
将名称为WEB的事务拆分成了两个子事务,一个为baidu,另一个为bing。
--------------------
*/
Action()
{
lr_start_transaction("WEB");
lr_start_sub_transaction("baidu","WEB");
web_url("Baidu",
"URL=HTTP://www.Baidu.com",
LAST);
lr_end_sub_transaction("baidu",LR_AUTO);
lr_start_sub_transaction("BING","WEB");
web_url("BING",
"URL=HTTP://www.bing.com",
LAST);
lr_end_sub_transaction("BING",LR_AUTO);
lr_end_transaction("WEB",LR_AUTO);
return 0;
}
/*
输出结果为:
--------------------
Starting action Action.
Action.c(3): Notify: Transaction "WEB" started.
Action.c(5): Notify: Transaction "baidu" started.
Action.c(7): Found resource "http://www.baidu.com/img/baidu_sylogo1.gif" in HTML "HTTP://www.Baidu.com" [MsgId: MMSG-26659]
...
Action.c(7): web_url("Baidu") was successful, 25019 body bytes, 2268 header bytes, 38 chunking overhead bytes [MsgId: MMSG-26385]
Action.c(10): Notify: Transaction "baidu" ended with "Pass" status (Duration: 0.6824 Wasted Time: 0.4469).
Action.c(13): Notify: Transaction "BING" started.
Action.c(14): Redirecting "HTTP://www.bing.com" (redirection depth is 0) [MsgId: MMSG-26694]
Action.c(14): To location "http://cn.bing.com/" [MsgId: MMSG-26693]
Action.c(14): web_url("BING") was successful, 15349 body bytes, 1329 header bytes, 13 chunking overhead bytes [MsgId: MMSG-26385]
Action.c(17): Notify: Transaction "BING" ended with "Pass" status (Duration: 1.4510 Wasted Time: 0.0037).
Action.c(20): Notify: Transaction "WEB" ended with "Pass" status (Duration: 2.2056 Wasted Time: 0.4506).
Ending action Action.
--------------------
*/
/*
---------------------
int lr_get_transaction_status( const char *transaction_name ) ;
参数 transaction_name:事务名称
返回指定名称事务的状态,如果函数发生错误,则返回负值
注意:该函数不能在事务结束后执行,即不能在执行lr_end_transaction()函数后执行。
示例:
--------------------
*/
Action()
{
lr_start_transaction("WEB");
web_url("Baidu",
"URL=HTTP://www.Baidu.com",
LAST);
//如果事务状态为pass,则结束事务并标记为LR_PASS,否则标记为失败,并结束事务
if (lr_get_transaction_status("WEB") == LR_PASS)
{
lr_message("打开百度成功 !");
lr_end_transaction("WEB",LR_PASS);
}
else
{
lr_end_transaction("WEB",LR_FAIL);
}
return 0;
}
/*
---------------------
double lr_get_transaction_duration( const char *transaction);
参数 transaction:事务名称
返回指定名称的事务所花费的时间,如果该函数运行失败则返回一个负值。
如果事务已经结束或指定事务的数据不可用,则返回0.
示例:将上面的示例稍微改造
--------------------
*/
Action()
{
lr_start_transaction("WEB");
web_url("Baidu",
"URL=HTTP://www.Baidu.com",
LAST);
//如果事务状态为pass,则结束事务并标记为LR_PASS,否则标记为失败,并结束事务
if (lr_get_transaction_status("WEB") == LR_PASS)
{
lr_message("打开百度成功 !");
// 输出到该行代码为止时,事务所花费的时间
lr_message("打开百度所用时间为: %f",lr_get_transaction_duration("WEB"));
lr_end_transaction("WEB",LR_PASS);
}
else
{
lr_end_transaction("WEB",LR_FAIL);
}
return 0;
}
/*
输出结果为:
--------------------
打开百度成功 !
打开百度所用时间为: 0.666801
--------------------
*/
/*
---------------------
double lr_get_transaction_think_time( const char *transaction);
参数 transaction:事务名称
返回指定名称的事务所包含的时间,如果该函数运行失败则返回一个负值。
如果事务已经结束或指定事务的数据不可用,则返回0.
PS:请在运行时设置中,将回放思考时间设置为启用
示例:将上面的示例稍微改造
--------------------
*/
Action()
{
lr_start_transaction("WEB");
//添加5秒思考时间
lr_think_time(5);
web_url("Baidu",
"URL=HTTP://www.Baidu.com",
LAST);
if (lr_get_transaction_status("WEB") == LR_PASS)
{
lr_message("打开百度成功 !");
//添加5秒思考时间
lr_think_time(5);
lr_message("打开百度所用时间为: %f",lr_get_transaction_duration("WEB"));
//获取事务总思考时间
lr_message("其中事务的思考时间为: %f",lr_get_transaction_think_time("WEB"));
lr_end_transaction("WEB",LR_AUTO);
}
else
{
lr_end_transaction("WEB",LR_FAIL);
}
return 0;
}
/*
输出结果为:
--------------------
打开百度成功 !
打开百度所用时间为: 10.697615
其中事务的思考时间为: 9.999169
--------------------
*/
/*
---------------------
double lr_get_transaction_wasted_time( const char *transaction);
参数 transaction:事务名称
返回指定名称的事务所浪费的时间,如果该函数运行失败则返回一个负值。
如果事务已经结束或指定事务的数据不可用,则返回0.
示例:将上面的示例稍微改造
--------------------
*/
Action()
{
lr_start_transaction("WEB");
lr_think_time(2);
web_url("Baidu",
"URL=HTTP://www.Baidu.com",
LAST);
if (lr_get_transaction_status("WEB") == LR_PASS)
{
lr_message("打开百度成功 !");
lr_think_time(2);
lr_message("打开百度所用时间为: %f",lr_get_transaction_duration("WEB"));
lr_message("事务的思考时间为: %f",lr_get_transaction_think_time("WEB"));
//获取事务浪费的时间
lr_message("事务浪费时间为: %f",lr_get_transaction_wasted_time("WEB"));
lr_end_transaction("WEB",LR_AUTO);
}
else
{
lr_end_transaction("WEB",LR_FAIL);
}
return 0;
}
/*
输出结果为:
--------------------
打开百度成功 !
打开百度所用时间为: 4.696390
事务的思考时间为: 3.999342
事务浪费时间为: 0.442646
--------------------
*/
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2