Jmeter生成8位不重复的随机数

时间:2024-03-01 10:47:57

jmeter的time函数
${__time(,)}  :  默认该公式精确到毫秒级别, 13位数

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

${__time(yyyy-MM-dd,)}    如果参数需要为当前日期,那公式为:

${__time(YMDHMS,)}

 

 

Jmeter取一个8位不重复的随机数
要求:对注册接口进行100000次压测,手机号已126开头,后面的8位数不限

  前言:在进行测试中,我们需要对注册接口进行压测100000次,那么就要求手机号码每次填写的不一致,否则手机号使用一次后会出现该手机号码已注册的情况,为了避免这种情况的发生,我们对手机号码的填写通常有2种方式,1、使用random函数随机生成,2、手动在excel表中写100个号码,通过添加配置元件CSV data set config来获取。显然我们会选择第一种实现方式较为方便。以下我们来看如何实现。

第一种方法:直接引用函数,采用函数时间戳+函数随机数的方法,如下

  直接使用函数助手,利用__random函数来生成8位数。可能存在的问题:生成的数可能会出现重复

  

  

 

jmeter自带的函数__random()是会重复的,为了避免此情况,采用时间戳+随机数的方法,如下:

long phone=${__time(/1000,)} + ${__Random(1,100000,)};
System.out.println(phone);

  

 


这里,前半是取一个10位的时间戳,后面是取1个[1,100000]的随机数字,可重复,这个随机范围越大,最后生成的随机数越不容易重复,当大并发时,随机数取的很快,所以还是有极低可能重复的。因此在许可范围内,尽量拉大随机数范围。 
${__time(,)}则是去当前毫秒时间,13位的数字,也可以用来取更精确的时间戳


 

第二种方法:BeanShell 里面,采用时间戳+随机数的方法来避免重复,并且生成不重复的8位数

  1、添加采样器 BeanShell Sampler,并在中填写对应的操作,重点部分

//为了避免手机号后8位出现重复,因此采用时间戳+随机数

phone=${__time(/100000,)} + ${__Random(1,100000,)};

String a = String.valueOf(phone); //将phone转为字符串,因为手机号的要求类型为char

vars.put("phone",a); //将字符串a设置为变量

vars.get("phone"); //在debug sample中查看phone的取值

log.info("8888888888888哈哈哈:"+a); //在logview中打印查看取值

  


  

或者这样

long s = ${__time(/100000,)};
long y = ${__Random(1,100000,)};
long z = s+y;
vars.put("XXX_id",z.toString()); //类型转换成String

  


  这里,前半是取一个10位的时间戳,后面是取1个[1,100000]的随机数字,可重复,这个随机范围越大,最后生成的随机数越不容易重复,当大并发时,随机数取的很快,所以还是有极低可能重复的。因此在许可范围内,尽量拉大随机数范围。 
  ${__time(,)}则是去当前毫秒时间,13位的数字,也可以用来取更精确的时间戳 

 

  2、将设置的变量添加到请求中

  3、添加“查看结果树”来查看运行结果,和添加“Bebug Sampler”来查看phone的取值