LoadRunner中获取当前时间的函数

上一篇 / 下一篇  2008-05-26 15:42:44 / 个人分类:LoadRunner性能测试工具

  最近有一个webservice的性能测试,在录制脚本的时候发现需要获取本机的UTC时间(与GMT时间是一样的)以及比当前UTC推迟5分钟的时间,格式为2008-05-23T10:05:05Z。

  1. 查看帮助后发现有这么几个有用的函数:                                  

    time
    用法:time( time_t *t)
    功能:此函数返回从公元1970年1月1日的UTC时间从0时0分0秒算起到现在所经过的秒数。如果t并非空指针,此函数也会将返回值存到t指针所指的内存。
    返回值:成功,返回秒数,失败则返回((time_t)-1)值,错误原因存于errno中。

     

    gmtime
    定义函数  struct tm*gmtime(const time_t*timep);
    函数说明  gmtime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。结构tm的定义为
    #ifndef _TM_DEFINED
    struct tm
    {
            int tm_sec;     /* 秒 – 取值区间为[0,59] */
            int tm_min;     /* 分 - 取值区间为[0,59] */
            int tm_hour;    /* 时 - 取值区间为[0,23] */
            int tm_mday;    /* 一个月中的日期 - 取值区间为[1,31] */
            int tm_mon;     /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
            int tm_year;    /* 年份,其值等于实际年份减去1900 */
            int tm_wday;    /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,       以此类推 */
            int tm_yday;    /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
            int tm_isdst;   /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/
    };
    #define _TM_DEFINED
    #endif

     

  2. 为了得到上面说到的2个时间,用以上函数获取的时间格式只能为2008-5-23T10:5:5Z。可以看到和需要的时间在格式上稍有出入(个位数的时间需要显示为0x),在loadrunner脚本中加入以下代码可以得到需要的时间格式:

typedef long time_t;
struct tm {

       int tm_sec; /* seconds after the minute - [0,59] */

       int tm_min; /* minutes after the hour - [0,59] */

       int tm_hour; /* hours since midnight - [0,23] */

       int tm_mday; /* day of the month - [1,31] */

       int tm_mon; /* months since January - [0,11] */

       int tm_year; /* years since 1900 */

       int tm_wday; /* days since Sunday - [0,6] */

       int tm_yday; /* days since January 1 - [0,365] */

       int tm_isdst; /* daylight savings time flag */

#ifdef LINUX

       int tm_gmtoff;

       const char *tm_zone;

#endif

};

vuser_init()
{
  char time_a[21],time_b[21];
  char ql_mon[3],ql_mon_b[3],ql_day[3],ql_day_b[3],ql_hour[3],ql_hour_b[3],ql_min[3],ql_min_b[3],ql_sec[3],ql_sec_b[3];
   time_t t,l;
   struct tm *p;
   struct tm *q;
   tzset(); //UNIX时间兼容函数
   time(&t);

   p=(struct tm*)gmtime(&t);

  if((1+p->tm_mon) < 10){
   sprintf(ql_mon,"0%d",(1+p->tm_mon));
  }
  else{
   sprintf(ql_mon,"%d",(1+p->tm_mon));
  }
  if(p->tm_mday < 10){
   sprintf(ql_day,"0%d",p->tm_mday);
  }
  else{
   sprintf(ql_day,"%d",p->tm_mday);
  }
  if(p->tm_hour < 10){
   sprintf(ql_hour,"0%d",p->tm_hour);
  }
  else{
   sprintf(ql_hour,"%d",p->tm_hour);
  }
  if(p->tm_min < 10){
   sprintf(ql_min,"0%d",p->tm_min);
  }
  else{
   sprintf(ql_min,"%d",p->tm_min);
  }
  if(p->tm_sec < 10){
   sprintf(ql_sec,"0%d",p->tm_sec);
  }
  else{
   sprintf(ql_sec,"%d",p->tm_sec);
  }

  sprintf(time_a,"%d-%s-%sT%s:%s:%sZ",(1900+p->tm_year),ql_mon,ql_day,ql_hour,ql_min,ql_sec);

  lr_message("%s",time_a);


  l=t+300;

  q=(struct tm*)gmtime(&l);

  if((1+q->tm_mon) < 10){
   sprintf(ql_mon_b,"0%d",(1+q->tm_mon));
  }
  else{
   sprintf(ql_mon_b,"%d",(1+q->tm_mon));
  }
  if(q->tm_mday < 10){
   sprintf(ql_day_b,"0%d",q->tm_mday);
  }
  else{
   sprintf(ql_day_b,"%d",q->tm_mday);
  }
  if(q->tm_hour < 10){
   sprintf(ql_hour_b,"0%d",q->tm_hour);
  }
  else{
   sprintf(ql_hour_b,"%d",q->tm_hour);
  }
  if(q->tm_min < 10){
   sprintf(ql_min_b,"0%d",q->tm_min);
  }
  else{
   sprintf(ql_min_b,"%d",q->tm_min);
  }
  if(q->tm_sec < 10){
   sprintf(ql_sec_b,"0%d",q->tm_sec);
  }
  else{
   sprintf(ql_sec_b,"%d",q->tm_sec);
  }


  sprintf(time_b,"%d-%s-%sT%s:%s:%sZ",(1900+q->tm_year),ql_mon_b,ql_day_b,ql_hour_b,ql_min_b,ql_sec_b);

  lr_message("%s",time_b);
 return 0;
}

  这样,当前UTC时间和推迟5分钟的时间分别存储在time_a和time_b这2个字符串中,在脚本的其它地方可以调用。

 


TAG: loadrunner 时间函数

 

评分:0

我来说两句

日历

« 2024-04-30  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 5878
  • 日志数: 3
  • 建立时间: 2008-04-24
  • 更新时间: 2008-05-27

RSS订阅

Open Toolbar