mmsw450 发表于 2013-1-7 14:37:26

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       
在调用stop之前事务所花费时间为 0.588503
Action.c(11): Notify: Transaction "Baidu" stopped.
...
Action.c(13): web_url("Baidu2") was successful, 4258 body bytes, 320 header bytes       
在调用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"       
...
Action.c(7): web_url("Baidu") was successful, 25019 body bytes, 2268 header bytes, 38 chunking overhead bytes       
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)       
Action.c(14): To location "http://cn.bing.com/"       
Action.c(14): web_url("BING") was successful, 15349 body bytes, 1329 header bytes, 13 chunking overhead bytes       
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
--------------------
*/
页: [1]
查看完整版本: LoadRunner常用函数之二--事务函数