LoadRunner常用函数解析

(1)lr_start_transaction(const char *transaction_name)/lr_end_transaction(const char * transaction_name,int status)

功能:事务开始/结束标记,需要统计某一段代码块执行所需要的时间,这两个函数需要成对使用。这两个函数只是标记函数,用于标记事务开始/结束,因此可以嵌套使用,即事务中还可以包含子事务。

参数说明:status有三个值:LR_PASS(通过)、LR_FAIL(失败)、LR_AUTO(自动)、 LR_STOP(暂停),可以在事务结束前通过lr_set_transaction_status进行修改。如果在lr_end_transaction中没有指定结束事物状态是LR_AUTO,而是明确制定为其它状态,则事务将以最后制定状态来结束。

举例:

1、工作流系统性能测试中有一个需求,300人在线,提交工单操作平均响应时间在3秒以内,则需要在提交工单请求步骤之前插入lr_start_transaction,提交工单请求步骤之后插入lr_end_transaction,最后Analysis中将会统计该事务内请求运行的平均响应时间。

lr_start_transaction("test1");

lr_end_transaction("test1",LR_AUTO);

2、对于自动结束状态的事务来说(LR_AUTO),只要服务器给用户返回了信息,就会认为事务是通过的。因此需要手工事务来进行判断。例:用户注册,已经注册过的用户通过LR_AUTO来进行判断,最后依然会显示事务成功,但实际登录不一定就是成功的,这时,可以用web_reg_find()函数来对登陆失败或者登陆成功以后页面进行文字的查找,对事务进行判断

web_reg_find("Search=Body","SaveCount=regst","Text=登陆成功',LAST);

lr_start_transaction("login");

//登陆相关代码(已省略)

if(aton(lr_eval_string("{regst}"))>=1)

  lr_end_transaction("login",LR_PASS);

else

  lr_end_transaction("login",LR_FAIL);

 

(2)lr_think_time(double thinkTime)

功能:模拟思考时间,即等待时间,单位:秒。

举例:lr_think_time(2); //等待2秒

 

(3)lr_rendezvous(const char *transaction_name)

功能:在Vuser脚本中设置集合点,在并发测试中运用较多

举例:集合点的意思是等到特定的用户数后再一起执行某个操作,比如说某个促销品的是8点开抢,就可能出现在8点时很多人一起提交的场景(注意:集合点应该放在事务外(事务开始之前),如果事务内存在集合点,那么虚拟用户在集合点等待的过程也会被算入事务时间,导致早进入集合点的用户的响应时间有误。)

 

(4)web_reg_save_param(const char *ParamName, <list of Attributes>, LAST);

功能:在服务器返回的文本中查找一个或者多个字符串,并将搜索到的字符串值保存在参数中。

参数说明:

举例:博客系统,需要用户先登录,再提交博文,提交博文时需要用到用户的sessionid或者token等登录凭证,才可以提交。此时需要将token在登录的步骤中抓取并保存为参数,在提交博文时,带上这个参数即可成功提交。

web_reg_save_param("userToken",
        "LB=Set-Cookie: atlassian.xsrf.token=BGSM-QFG5-7X9K-YWKD|",
        "RB=|lin;",
        "NotFound=ERROR",
        "Search=Headers",
        LAST);
    
     web_submit_data("testLoginSubmit",
         "Action=http://jira.intra.inzwc.com/login.jsp",
         "Method=POST",
         "RecContentType=text/html",
         "Mode=HTML",
         ITEMDATA,
          "Name=os_username","Value={name}",ENDITEM,
         "Name=os_password","Value={pwd}",ENDITEM,
         "Name=os_destination","Value=",ENDITEM,
         "Name=atl_token","Value=",ENDITEM,
         "Name=login","Value='登录'",ENDITEM,
          LAST);

     lr_output_message("userToken is %s",lr_eval_string("{userToken}"));

        //提交博文代码参数带上userToken(已省略)

 

(5)lr_save_string( const char *param_value, const char *param_name) /lr_save_int

功能:将某一字符串/整型变量保存为参数。有些变量的值通过C语言算法生成,之后在测试脚本中要使用这些变量,则需要先将它存储为参数。

举例:某后台的增加员工工号和姓名功能,工号和姓名使用C语言函数生成。工号和姓名分别保存在staff_no和staff_name变量中,则在脚本中可以使用lr_save_int(staff_no,"staffno"),lr_save_string(staff_name, "stafffname")将工号和姓名参数化。

 

(6)lr_eval_string(const char *instring)

功能:将某一字符串中包含的所有参数替换为真实值,并返回替换后的字符串。欲查看某一参数的值,可使用该函数

举例:lr_output_message("Cookie is %s",lr_eval_string("{userSession}"));

 

(7)lr_save_datetime(const char *format, int offset, const char *name)

功能:将当前日期和时间,或具有指定偏移的日期和时间保存在参数中

参数说明:
1、const char *format:格式化信息,例如:"%y-%m-%d"

2、int offset:时间的偏移量
     DATE_NOW(现在的日期)
     TIME_NOW(现在的时间)
     ONE_DAY(一天的时间)
     ONE_HOUR(一小时的时间)
     ONE_MIN(一分钟的时间)

    时间的偏移量可以使用公式,例如:DATE_NOW+ONE_DAY,这样,我们就可以取得昨天、明天的日期了
     DATE_NOW-ONE_DAY(昨天)
     DATE_NOW+ONE_DAY(明天)

举例:

Action()
{
    lr_save_datetime("%y-%b-%d",DATE_NOW-2*24*(ONE_HOUR),"abc");
     //保存前天的日期到参数abc中
    lr_message("the day before yesterday is:%Y-%m-%d %H:%M:%S",lr_eval_string("{abc}"));
     //输出abc的值
    lr_save_datetime("%H:%M:%S",TIME_NOW+2*(ONE_HOUR),"ab");
     //保存2个小时后的时间到参数ab中
    lr_message("the time after two hour is:%s",lr_eval_string("{ab}"));
     //输入ab的值
    return 0;
}
执行结果如下:
the day before yesterday 2019-01-07 11:25:30
the time after two hour is:15:33:41

 

(8)web_save_timestamp_param(const char *tmstampParam, string LAST)

功能:将当前时间戳保存为参数

举例:web_save_timestamp_param("stamp1",LAST);

 

(9)web_reg_find(const char* attribute_list, string LAST)

功能:在HTML文档中查找指定的字符串。该函数是检查点函数,在脚本中需要插入检查点的地方使用。

参数说明:

举例:

1、提交博文后,需要验证是否提交成功。则可根据页面提示“提交成功”进行验证。在提交博文步骤前插入:web_reg_find("Text=提交成功",LAST); 如果该字符串未被查找到,则函数检查失败,脚本停止执行。

2、根据请求的返回的Header头信息带的“LoginReason:OK”信息,加上SaveCount,将找到的字符串的长度保存到参数中,使用ifelse语句判断该参数长度是否大于0,依此来判断是否登录成功:

 web_reg_find("Text=LoginReason: OK","Search=Headers","SaveCount=isOk",LAST); 

//登录请求(已省略)

lr_output_message("the length of the string is: %s",lr_eval_string("{isOk}"));
if (atoi(lr_eval_string("{isOk}"))>0) //验证是否找到了页面上的要检查的字符串
      lr_output_message("we find the string!");
else
      lr_output_message("sorry,don't find the string!");

执行结果如下:
the length of the string is: 23
we find the string!

注:该函数为注册型参数,需要在请求服务器数据步骤之前插入该函数,和web_reg_save_param类似,web_reg_find,的SaveCount是存储字符串长度,而web_reg_save_param可以保存整个字符串的内容。

 

(10)web_image_check(const char * CheckName,<Listof Attributes>,<“Alt = alt”||“Src =src”>,LAST);

功能:判断某一个图片是否存在HTML页面中。同web_reg_find函数一样,该函数也是检查点函数。

举例:考试系统并发测试,50个人同时打开试卷,为了验证打开试卷成功,根据试卷中的图片public/images/onexam.gif进行验证:

web_image_check("web_image_check","Src=public/images/onexam.gif",LAST);

注:要使该函数生效,需要在runtime-seting中将打开。与web_reg_find不一样的是,该函数不是注册型函数,因此需要在请求之后插入该函数。LoadRunner只能识别文本,因此web_image_check函数其本质仍然是文本验证,完全可以用web_reg_find替代,而且强烈推荐使用web_reg_find作为检查点函数。

 

(11)lr_output_message(const char * format,string exp1,string exp2,string ... expn.);

功能:将VUser的消息打印到日志文件和输出窗口中,打印的消息带有脚本行信息(类似“Action.c(22):OK”的信息,要将消息发送到Vuser执行日志或应用程序管理网站,用lr_log_message,其输出结果不带脚本信息仅输出内容“OK”)。

举例:lr_output_message("we find the string!");

lr_output_message("LoginStatus is %s",lr_eval_string("{LoginStatus}"));

 

(12)lr_vuser_status_message(const char * format);

功能:将VUser的消息输出到场景运行的VUser状态窗口。

举例: lr_vuser_status_message函数向LoadRunner控制器或应用程序管理中心发送一条消息,显示当前的迭代次数。

lr_vuser_status_message( "We are on iteration #%s", lr_eval_string( "{iteration}" ) );

 

(13)lr_get_vuser_ip()

功能:获得VUser的IP地址。在使用IP欺骗时,为了验证IP欺骗是否成功,可以使用该函数。为了使IP欺骗成功,使用IP欺骗向导设置好IP后,还要打开才可。

需要使用ip欺骗的原因:
1、当某个IP的访问过于频繁,或者访问量过大时,服务器会拒绝访问请求,这时候通过IP欺骗可以增加访问频率和访问量,以达到压力测试的效果。
2、某些服务器配置了负载均衡,使用同一个IP不能测出系统的实际性能。LR中的IP欺骗通过调用不同的IP,可很大程度上的模拟实际使用中多IP访问和并测试服务器均衡处理的能力。
3、有一些网站会限制同一个用户同一个IP的登陆。为了更加真实的模拟实际情况,LoadRunner允许运行的虚拟用户使用不同的IP访问同一网站。

举例:在场景运行过程中,将每一个VUser的IP在VUser运行状态窗口中显示出来。

char *ip;

ip = lr_get_vuser_ip();

if (ip)

{

  lr_vuser_status_message("The IP addressis %s", ip);

}
 

转载于:https://my.oschina.net/outcat/blog/2998419

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值