jmeter 常用函数介绍

  jmeter 自带的函数有很多,功能一般都能满足工作需要,如果需要自定义函数,也可进行二次开发,这个后面会介绍,今天主要介绍我在工作中经常使用到的函数,仅供大家参考。

  时间函数,这个主要用在接口请求中,一种是请求头中的时间戳,还有就是时间入参,对应的就是 time 函数,使用场景如下:

  • ${__time(,)},它是13位的 Unix时间戳,毫秒级,如:1709444056235,有些接口入参用的是这种形式;

  • ${__time(/1000,)},10位的Unix时间戳,秒级,如:1709444246;

  • ${__time(yyyyMMddHHmmss,)},按照指定格式生成日期,这种格式打印出来就是20240303134022,如果你想好看点,也可以自己改,如yyyy-MM-dd HH:mm:ss,打印出来就是2024-03-03 13:41:26;

  time获取的是当前日期,有些情况下,造数据时,需要改变日期,比如往前改或往后改,那就需要借助 intSum 函数联合使用,如下:

${__intSum(${time(yyyy,)},-1,)},当前年份-1;
${__intSum(${time(MM,)},-1,)},当前月份-1;
${__intSum(${time(dd,)},-1,)},日-1;
${__intSum(${time(HH,)},-1,)},当前小时-1;
${__intSum(${time(mm,)},-1,)},当前分钟-1;
${__intSum(${time(ss,)},-1,)},当前秒-1

  上面的时间往后加也是一样的操作,但是要注意,当天为当月最后一天时,不适用;但是,我们要的格式通常是“年-月-日 时:分:秒”,只是将小时往后加几个小时,上面的方法就不适用了,如果硬性拼接,比较麻烦,而且格式不对,这种情况,需要 timeshift 函数,格式如下:${__timeshift(DateTimeFormatter, Date to shift,Amount of seconds/minutes/hours/days to add, Locale to use for format,)}

DateTimeFormatter日期格式,参考time函数,不指定就是Unix时间戳;
Date to shift要转换的日期,默认是当前日期;
Amount of seconds/minutes/hours/days to add对日期进行加减操作,+/-,时间单位:S/M/H/D,对应秒、分、时、天;加减天的格式:P?D;加减时分秒格式:PT?H?M?S;同时加减天时分秒格式:P?DT?H?M?S;
Locale to use for format语言环境的字符串格式,如:zh_CN、en_US;
  • ${__timeShift(yyyy-MM-dd HH:mm:ss,P1DT1H10m0s,)},当前日期加1天、1小时、10分钟;

  唯一标识符,有时接口请求参数可能用到,使用 UUID 函数,但是,有些参数要求的连续的,没有中间的’-',需要单独处理,具体看使用场景;

  • ${__UUID},生成唯一标识符,如:d004e8ff-75c9-495d-bc3c-3b75ad8f6c80;
  • 如果需要去掉中间的"-",需要借助 BeanShell 脚本,如下:
import  java.util.UUID;
UUID uuid1 = UUID.randomUUID();
vars.put("uid",(uuid1.toString()).toUpperCase().replaceAll("-",""));

  取随机数 random,在给定的范围内取值;格式如下:${__Random(min,max,)}

min随机数范围的最小值
max随机数范围的最大值
  • ${__Random(0000,1111,)}

  生成随机字符串 RandomString,它从给定的字符中选择指定个数字符生成字符串,格式如下:${__RandomString(len,var,)}

len字符串长度
var用于生成字符串的字符
  • ${__RandomString(4,qwerty123456,)}

  执行变量表达式的 V 函数,这个太重要了,也经常使用,你一定遇到过这种需求,通过变量表达式取值,然后再放到另一个变量表达式中取执行,一般情况,直接嵌套是没法执行的,因为 jmeter 本身是不支持嵌套函数的,想要执行嵌套函数就要使用 ${__V()}函数,如下:

${__V(R_bagtId_${index})},这个函数会先执行括号内的表达式,此时,先获取到index这个变量的值,如:6,然后 __V 返回括号内的值,如:R_bagtId_6,最后执行 ${R_bagtId_6},这就是该函数执行过程;

  获取属性值的函数,常用有2个,Pproperty,你肯定遇到这种情况:接口请求通过正则表达式取到值了,但是,再另一个线程组中无法使用;这是因为,变量没法跨线程组使用,所以,你要把取到的值保存到jmeter属性中,然后通过 P/property 取值;

  • ${__P(var,)}
  • ${__property(var,defaultValue)}

  设置属性值 setProperty,这个就是配合上面的函数的,格式如下:setProperty(属性名称,属性值,),当然,实际中,保存、取值都可以通过脚本完成,看实际需要了;

  加密函数digest,以前做接口测试时,老版本的jmeter没有这个函数,那时候需要加密的参数值,只能通过写jar包形式完成;后来,新版本就有了该功能,具体使用要结合公司情况,如:加密方式(是否二次开发)、加盐等;格式如下:${__digest(var1,var2,salt,true,)}

var1加密算法;MD2、MD5、SHA-1、SHA-224、SHA-256、SHA-384、SHA-512
var2加密内容
salt加盐
true是否大写,默认时false-小写

  从参数列表中选择一个随机值 chooseRandom,这个用的少,格式如下:${__chooseRandom(参数1,参数2,参数3,…,var)}

  计算浮点值的和 doubleSum,小数点位数不好控制,所以用的少,一般写脚本处理多,格式如下:${__doubleSum(参数1,参数2,var)}

  Base64 编码 base64Encode,格式如下:${__base64Encode(encode_sring,var)}

  Base64解码,base64Decode,格式如下:${__base64Decode(encode_sring,var)},这个两个我用的都少,以前公司用的都是二次开发的,里面有订制东西;

  截取子字符串 substring,格式如下:${__substring(str,start_index,end_index,var)},注意:截取内容不包括结束索引;

  面就是常用的函数,大部分都能满足使用,只有少部分需要定制开发,后面有时间也会开一篇函数的二次开发,谢谢大家关注。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值