Jmeter生成8位不重復的隨機數


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的取值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM