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