【Jmeter】时间变量参数

来源:互联网 发布:谷歌娘语音软件 编辑:程序博客网 时间:2024/06/03 18:00

在使用Jmeter编写接口测试脚本参数化时,不可避免的使用时间变量,比如时间戳,比如当前时刻点,比如当前日期等等,现在将项目中遇到的一些情况列举一下

__time函数

时间变量,最简单易用的就是Jmeter自带的__time函数

调出函数助手,生成一个__time 函数

这里写图片描述

调用时间戳参数变量

13位时间戳

${__time(,)}  //默认该公式精确到毫秒级别, 13位数

10位时间戳

${__time(/1000,)}  //该公式精确到秒级别, 10位数

xx秒后10位时间戳

${__intSum(${__time(/1000,)},6000,)}

调用日期格式参数变量

调用yyyy-MM-dd格式日期

${__time(yyyy-MM-dd,)} //2017-06-28

调用YMDHMS格式日期

${__time(YMDHMS,)}  //2017-06-28-211532

The following shorthand aliases are provided

  • YMD = yyyyMMdd
  • HMS = HHmmss
  • YMDHMS = yyyyMMdd-HHmmss
  • USER1 = whatever is in the Jmeter property time.USER1
  • USER2 = whatever is in the Jmeter property time.USER2

JavaScript实现

除了Jmeter提供的时间函数,也可以使用 JavaScript实现一些时间变量

获取当前日期

${__javaScript((new Date()).getFullYear()+'-'+ ((new Date()).getMonth()+1) + '-' + (new Date()).getDate(),)}

这里写图片描述

Java实现

现在要实现一个时间变量,时间格式为HH:MM的UTC时间

Jmeter 提供日期函数,功能太弱;JavaScript也许可以,但不熟练;现在用JAVA在BeanShell PreProcessor 中实现

在使用前,了解什么是BeanShell

  1. 一个小型嵌入式Java源代码解释器,能够动态地执行标准JAVA语法,并利用在JavaScript和Perl中常见的的松散类型、命令、闭包等通用脚本来对其进行拓展
  2. 通过运行其内部的脚本来处理Java应用程序,还可以在运行过程中动态执行java应用程序执行java代码
  3. 使用语言JAVA,运行在同一个虚拟机的应用程序,可以自由地引用对象脚本并返回结果

现在我们使用的是BeanShell PreProcessor ,即前置处理器,在执行某个接口时,会先执行前置处理器

这里写图片描述

代码实现

好,现在在BeanShell编译器中进行代码编写

取得本地时间

StringBuffer UTCTimeBuffer = new StringBuffer();    Calendar cal = Calendar.getInstance() ;  

取得时间偏移量

int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET);

取得夏令时差

int dstOffset = cal.get(java.util.Calendar.DST_OFFSET);  

取得UTC时间(从本地时间里扣除这些差量)

cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));

获取具体的时间信息

int year = cal.get(Calendar.YEAR);  int month = cal.get(Calendar.MONTH)+1;  int day = cal.get(Calendar.DAY_OF_MONTH);  int hour = cal.get(Calendar.HOUR_OF_DAY);  int minute = cal.get(Calendar.MINUTE);  

修改时间格式

因为若hour为0~9时,为1位数,但是接口需要传的时间格式为xx:xx(如:09:20),故需要修改时间格式

在弄这个的时候,开始想着是否可以加一个if 判断,若为1位数的时候(首先看看是否有函数判断int类型的位数,然后想着判断小于10),就在前面拼接一个0,但是这种方式太low了
后面发现原生函数就即可实现字位数不够,高位补0

import java.text.DecimalFormat;//如果数字1是字符串,如下处理:String str1="1";DecimalFormat df=new DecimalFormat("0000");String str2=df.format(Integer.parseInt(str1));System.out.println(str2);//如果数字1是整型,如下处理:int str1=1;DecimalFormat df=new DecimalFormat("0000");String str2=df.format(str1);System.out.println(str2);

现在即可实现我们需要完成的时间格式

DecimalFormat df=new DecimalFormat("00");String HH=df.format(hour);String MM=df.format(minute);

拼接时间段

UTCTimeBuffer.append(HH).append(":").append(MM); String timer = UTCTimeBuffer.toString();

将时间变量赋值给全局变量

首先定义一个全局变量utcNowTimer

这里写图片描述

赋值给该全局变量

vars.put("utcNowTimer",timer);String timeStr = vars.get("utcNowTimer");log.info(timeStr);

OK,搞定

原创粉丝点击