• Loadrunner之脚本篇——事务函数


    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);

    }

    运行结果:

    Loadrunner <wbr>脚本优化-事务函数简介

    3.事务状态

    在默认情况下使用LR_AUTO来作为事务状态,对于一个事务有以下4个状态可以选择。

    1) LR_AUTO

    指事务的状态由系统自动根据默认规则来判断,结果为PASS/FAIL/STOP

    LR_AUTO也是根据服务器的返回状态信息来决定事务是以LR_PASS状态通过还是以LR_FAIL状态结束,只要服务器返回页面,那么事务就会认为请求成功发出去了,服务器看懂了请求也返回了内容,自然事务就是PASS状态。

    这样由于事务的自动判断,导致虽然操作失败的,但是得到了一个响应时间,并且这个响应时间又没正确反映出做这件事情的真正时间,最终影响测试结果。添加检测函数有时候可以解决这个问题

     

    例:判断是否登录成功(以lr自带web站点为例)

    Loadrunner <wbr>脚本优化-事务函数简介

    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;

    }

    运行结果:

    Loadrunner <wbr>脚本优化-事务函数简介
     

    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;

    }

    Loadrunner <wbr>脚本优化-事务函数简介

     

    注意:通过代码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下载工具,所以很少考虑具体下载文件操作对网络和服务器读写操作的影响。

  • 相关阅读:
    2018年左其盛读过评过的书(持续更新中)
    2星|《用场景营销引爆你的生意》:总共4个推荐案例,3个已经失败
    2018左其盛经管新书差评榜(持续更新中)
    3星|《十大全球CEO亲授企业高速成长的关键战略》:作为CEO,我也非常坦率地表明过家庭优先于工作
    2018左其盛好书榜(持续更新中)
    3星|《你的品牌需要一个讲故事的人》:有理论没案例
    《思考快与慢》前传,两位天才犹太心理学家的传奇人生与学术故事:4星|《思维的发现》
    C#如何在派生类中不显示父类的一些属性以及TypeDescriptor使用
    在XML里的XSD和DTD以及standalone的使用
    数据库操作之简单带参操作
  • 原文地址:https://www.cnblogs.com/langhuagungun/p/8342096.html
Copyright © 2020-2023  润新知