51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1506|回复: 0
打印 上一主题 下一主题

[求助] LoadRunner常用函数之二--事务函数

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2013-1-7 14:37:26 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
上一篇  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
--------------------
*/
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-23 08:17 , Processed in 0.071484 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表