查看: 4737|回复: 2

[转载] 在Loadrunner中如何在指定时间范围内暂停脚本运行?

[复制链接]
认证徽章
论坛徽章:
1054
紫蜘蛛
日期:2015-09-22 15:53:22紫蜘蛛
日期:2015-10-15 13:48:52紫蜘蛛
日期:2015-10-15 14:45:48紫蜘蛛
日期:2015-10-15 14:47:47紫蜘蛛
日期:2015-10-15 14:48:45九尾狐狸
日期:2015-09-22 15:53:22九尾狐狸
日期:2015-10-15 13:50:37九尾狐狸
日期:2015-10-15 14:45:48九尾狐狸
日期:2015-10-15 14:47:47九尾狐狸
日期:2015-10-15 14:48:45
发表于 2010-4-20 17:35 | 显示全部楼层 |阅读模式
在大型的性能测试项目(如银行系统)中,往往需要很长的时间运行脚本,而且经常跨过午夜。在这漫长的时间区域内,由于业务的要求,需要在某个时间段停止脚本运行,而这个时间段恰好是在零点到2点,那么就需要辛苦某位了。

本文正是为了解决实际中出现的上述情况,让脚本在指定时间范围内暂停运行后,无需人工干预而自动继续运行。

解决思路一提便知:利用Loadrunner中的思考时间(thinktime)特性,结合时间判断便可迎刃而解。

具体先写出一个检查暂停时间区域的函数(CheckPauseTime()),然后放入其它脚本之前,其余部分照旧。
  1. Action()
  2. {
  3. CheckPauseTime();
  4. //其它脚本
  5. return 0;
  6. }
复制代码
CheckPauseTime()函数:
  1. char *Day;
  2. char *Hour;
  3. char *Minute;
  4. int  iHour;
  5. int  iMinute;
  6. int  iExcStaDay;
  7. int  iExcStaMin;
  8. int  iExcStaHou;
  9. int  iExcEndDay;
  10. int  iExcEndHou;
  11. int  iExcEndMin;
  12. int  iExcSta;
  13. int  iExcEnd;
  14. int  iPauseTime;
  15. int  TotalMinutes=0;
  16. void CheckPauseTime()
  17. {
  18. lr_save_datetime("%A", DATE_NOW, "Day");
  19. lr_save_datetime("%H", TIME_NOW, "Hour");
  20. lr_save_datetime("%M", TIME_NOW, "Minute");
  21. //lr_output_message ( "Today is %s", lr_eval_string ( "{Day}" ) );
  22. lr_output_message ( "The time is %s:%s", lr_eval_string ( "{Hour}" ),  lr_eval_string ( "{Minute}" ) );
  23. //Convert time to No of minutes since the start of the week.
  24. //Assume that week starts at 00:00 on Monday
  25. Day=lr_eval_string ("{Day}");
  26. Hour=lr_eval_string ("{Hour}");
  27. Minute=lr_eval_string ("{Minute}");
  28. if (strcmp(Day,"Monday")==0)
  29.   {lr_output_message ( "Day 1 of the week");
  30.   TotalMinutes=TotalMinutes+0;}
  31.   else
  32.   if (strcmp(Day,"Tuesday")==0)
  33.    {lr_output_message ( "Day 2 of the week");
  34.    TotalMinutes=TotalMinutes+1440;}
  35.    else
  36.    if (strcmp(Day,"Wednesday")==0)
  37.     {lr_output_message ( "Day 3 of the week");
  38.     TotalMinutes=TotalMinutes+2880;}
  39.     else
  40.      if (strcmp(Day,"Thursday")==0)
  41.      {lr_output_message ( "Day 4 of the week");
  42.      TotalMinutes=TotalMinutes+4320;}
  43.       else
  44.        if (strcmp(Day,"Friday")==0)
  45.        {lr_output_message ( "Day 5 of the week");
  46.        TotalMinutes=TotalMinutes+5760;}
  47.         else
  48.          if (strcmp(Day,"Saturday")==0)
  49.          {lr_output_message ( "Day 6 of the week");
  50.          TotalMinutes=TotalMinutes+7200;}
  51.           else
  52.            if (strcmp(Day,"Sunday")==0)
  53.            {lr_output_message ( "Day 7 of the week");
  54.            TotalMinutes=TotalMinutes+8640;}
  55.   //Convert Hour and Minute into iHour and iMinute (integers)
  56.   //Convert Hours into Minutes
  57.   iHour = atoi(Hour);
  58.   iHour = iHour * 60;
  59.   iMinute = atoi(Minute);
  60.   iPauseTime = 0;
  61.   //Calculate the number of minutes since 00:00 on Monday
  62.   TotalMinutes=TotalMinutes+iHour+iMinute;
  63.   lr_output_message ( "%d minutes have passed since 00:00 on Monday",TotalMinutes );
  64.   iExcStaDay=iExcStaDay-1;
  65.   iExcEndDay=iExcEndDay-1;
  66.   iExcSta = (iExcStaDay*1440)+(iExcStaHou*60)+iExcStaMin;
  67.   iExcEnd = (iExcEndDay*1440)+(iExcEndHou*60)+iExcEndMin;
  68.   if(TotalMinutes>iExcSta)
  69.    {
  70.    //Check if iExcEnd has passed
  71.    if(TotalMinutes<iExcEnd)
  72.    {
  73.     iPauseTime=(iExcEnd-TotalMinutes);
  74.     lr_output_message("Script needs to wait for %d minutes",iPauseTime);
  75.     iPauseTime=iPauseTime*60;
  76.     lr_output_message("Script paused for %d seconds",iPauseTime);
  77.     lr_think_time(iPauseTime);
  78.    }
  79.     lr_output_message("Script Running");
  80.    }
  81. }
复制代码
代码中主要用到了【lr_save_datetime】函数,借此机会重点说明一下其定义和用法:   

【lr_save_datetime】
  void lr_save_datetime(const char *format, int offset, const char *name);
中文解释:
lr_save_datetime将当前日期和时间,或具有指定偏移的日期和时间保存在参数中。
如果达到MAX_DATETIME_LEN个字符,结果字符串将被截断。
参数说明:
1、const char *format
   格式化信息
   例如:"the time is %s"
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(明天)
   那么,我们就可以使用如下表示得到前天的日期
     那么,我们就可以使用如下表示得到前天的日期
     lr_save_datetime("%Y-%B-%d",DATE_NOW-2*(ONE_DAY),"BeforeYesterday");
     lr_save_datetime("%Y-%B-%d",DATE_NOW-2*24*(ONE_HOUR),"BeforeYesterday");
     lr_save_datetime("%Y-%B-%d",DATE_NOW-2*24*60*(ONE_MIN),"BeforeYesterday");
   当然,我们也可以使用如下表示2个小时后的时间
     lr_save_datetime("%H:%M:%S",TIME_NOW+2*(ONE_HOUR),"AfterTwoHour");   
     lr_save_datetime("%H:%M:%S",TIME_NOW+2*60*(ONE_MIN),"AfterTwoHour");
  
3、const char *name
   参数保存的参数名;使用时用lr_eval_string("{参数名}") 形式。
示例如下:
===========================================
Action()
{
    lr_save_datetime("%y-%b-%d",DATE_NOW-2*24*(ONE_HOUR),"BeforeYesterday");
     //保存前天的日期到参数BeforeYesterday中
    lr_message("the day before yesterday is:%s",lr_eval_string("{BeforeYesterday}"));
     //输出BeforeYesterday的值
    lr_save_datetime("%H:%M:%S",TIME_NOW+2*(ONE_HOUR),"AfterTwoHour");
     //保存2个小时后的时间到参数AfterTwoHour中
    lr_message("the time after two hour is:%s",lr_eval_string("{AfterTwoHour}"));
     //输出AfterTwoHour的值
    return 0;
}
执行结果如下:
the day before yesterday is:09-八月-18
the time after two hour is:21:23:31
===========================================
附:《lr_save_datetime格式参数表》
%a 星期几的简写
%A 星期几的全称
%b 月份的简写
%B 月份的全称
%c 标准的日期的时间串
%C 年份的后两位数字
%d 十进制表示的每月的第几天
%D 月/天/年
%e 在两字符域中,十进制表示的每月的第几天
%F 年-月-日
%g 年份的后两位数字,使用基于周的年
%G 年分,使用基于周的年
%h 简写的月份名
%H 24小时制的小时
%I 12小时制的小时
%j 十进制表示的每年的第几天
%m 十进制表示的月份
%M 十时制表示的分钟数
%n 新行符
%p 本地的AM或PM的等价显示
%r 12小时的时间
%R 显示小时和分钟:hh:mm
%S 十进制的秒数
%t 水平制表符
%T 显示时分秒:hh:mm:ss
%u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)
%U 第年的第几周,把星期日做为第一天(值从0到53)
%V 每年的第几周,使用基于周的年
%w 十进制表示的星期几(值从0到6,星期天为0)
%W 每年的第几周,把星期一做为第一天(值从0到53)
%x 标准的日期串
%X 标准的时间串
%y 不带世纪的十进制年份(值从0到99)
%Y 带世纪部分的十制年份
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。
%% 百分号

注:红色表示在此处用到的参数。

本文来自: 天天测试交流(http://www.365testing.com/bbs/) 详细文章参考:http://www.365testing.com/bbs/thread-20772-1-4.html
论坛徽章:
129
2015年新春福章
日期:2015-03-06 11:57:31ITPUB9周年纪念徽章
日期:2010-10-08 09:32:26ITPUB9周年纪念徽章
日期:2010-10-08 09:32:26ITPUB9周年纪念徽章
日期:2010-10-08 09:32:26ITPUB9周年纪念徽章
日期:2010-10-08 09:32:262010世博会纪念徽章
日期:2010-10-05 15:55:362010广州亚运会纪念徽章:手球
日期:2010-09-15 22:46:19设计板块每日发贴之星
日期:2010-07-23 01:01:01行业板块每日发贴之星
日期:2010-07-22 01:01:04开发板块每日发贴之星
日期:2010-07-22 01:01:04
发表于 2010-7-13 23:48 | 显示全部楼层
多谢分享

使用道具 举报

回复
论坛徽章:
30
2010新春纪念徽章
日期:2010-03-01 11:08:34喜羊羊
日期:2015-03-16 11:00:26秀才
日期:2015-10-26 09:55:08秀才
日期:2015-11-23 10:17:19秀才
日期:2015-11-30 09:13:06秀才
日期:2015-12-14 15:02:13秀才
日期:2015-12-14 15:09:38秀才
日期:2015-12-25 15:31:10秀才
日期:2016-01-05 09:35:58秀才
日期:2016-01-25 15:02:04
发表于 2010-8-23 10:45 | 显示全部楼层
学习了……

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表