接口测试 Jmeter 中时间戳参数化获取的两种方式

小蜜蜂 · 2017年08月07日 · 最后由 小蜜蜂 回复于 2018年04月26日 · 7134 次阅读

问:我们在测试接口的时候,特别是需要用到时间戳的时候,我们是怎么处理的呢?
答:用时间戳工具转换。

很自然的我们都能想到用时间戳工具转换,把自己要设定的日期通过工具转换成时间戳,再放到 jmeter 里面调用。如果单独测试功能的时候这样做确实不错,但是如果是在接口自动化的时候呢?还可以这样操作吗?答案当然是不能了,顾名思义,自动化的时候我们人是不用怎么去干预它的运行的,因此我们要用另一个思路来解决这个问题。
这里我提供了两个方法来获取时间戳
1、就是 jmeter 自带的一个函数助手,里面有一个叫_time 的函数

我们要用时间戳时可以获取当前时间的时间戳,公式为:
${__time(,)} : 默认该公式精确到毫秒级别, 13 位数

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

如果参数需要为当前日期,那公式为:

${__time(yyyy-MM-dd,)}

${__time(YMDHMS,)}
执行结果如下:

2、利用 BeanShell,写 java 代码来获取
Java 代码如下:

package bluemoon.bee;

import java.sql.Date;

public class getTime {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    }

    static public long getPlanDate(){
        long date = System.currentTimeMillis();
        return date ;
    }
}

编写好 java 脚本后,到处为可执行 jar 包,然后把这个可执行 jar 包放到 Jmeter 中的 lib/ext 目录下
接着在 jmeter 中添加 BeanShell 组件


添加如下代码:

import bluemoon.bee.getTime;
long planDate = getTime.getPlanDate();

vars.put("planDate",planDate.toString());

然后就可以调用这个 planDate 获取到的时间戳参数了

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 10 条回复 时间 点赞

请问:时间戳精确到毫秒 ${__time(,)} 的那个请求,用的是什么取样器?

匿名 #2 · 2017年08月09日
kaige201314 回复

直接用这个函数就行 你可以在自定义变量里设置一个变量,然后把值设置为 ${__time(,)},这个变量的值自然就变成时间戳了

我想问的是,那个绿色的吸管是什么取样器?就是想知道什么取样器,能把时间函数名直接放到取样器的标题里面?

已经试验出来了,http 请求,谢谢

kaige201314 回复

直接一个 http 请求,然后标题写上这个参数就好

是的,这个函数是最方便的,但是当我们要对当前时间的时间戳进行改动就没那么方便了,比如我要获取一个月前某一天的时间戳,或两天前的时间戳,这个时候这个 time 函数就用不了了

您好,请问 java 代码中的这个 package bluemoon.bee; 是什么意思啊?我按照你的方法执行 bean sampler 报 500 错了呢。
Response code: 500
Response message: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: ``import bluemoon.bee.getTime; long planDate = getTime.getPlanDate(); vars.put("pl . . . '' : Typed variable declaration : Attempt to resolve method: getPlanDate() on undefined variable or class name: getTime

我有疑问:为什么你的目录一致。bluemoon/bee 这个是什么目录。java 代码中是 package bluemoon.bee; bean shell 中是 import bluemoon.bee.getTime; 但是却把 jar 包放入 Jmeter 中的 lib/ext 目录下,能不能介绍一下这些目录的

提莫 回复

这个就是我的 jar 包的包名啊

提莫 回复

为什么 beanshell 中要多一个 getTime 呢,是因为这个是我们要调用的方法啊

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册