JMeter中如何構造一個唯一ID(性能測試,持續集成羣:842104845 歡迎加入!!!)

在編寫JMeter測試腳本時我們經常會碰到構造一個唯一ID,下面我們說下常用的構造方法:

 

1.使用UUID,JMeter函數助手給大家提供了一個UUID()函數,UUID來生成一個附機字符串。

  __UUID()生成的格式類似8e9464d2-4561-453e-8005-ad0a44507640,貌似一些訂單ID好像使用UUID並不合適。

 

2.RandomString(),指定種子生成指定長期的字符串,如果迭代次數多的話可能會出現重複現象,單獨這個函數不能滿足要求。

有些工程師就用__RandonString()與__time()組合起來,只要TPS足夠大還是可能會有重複現象的。

 

3.使用多個函數組合:{group}+{thread number}+{迭代計數}

   group:由於JMeter支持多個Group,所以要考慮多個Group的情況,於是我們把線程組編號也納入組合中

   thread number:線程Number,組中的線程Number是唯一 的,group+thread number能夠保證線程號唯一

   迭代計數:每個線程都有一個迭代計數量,記錄腳本運行了多少次

  {group}+{thread number}+{迭代計數} 就可以保證生成一個唯一號,如果覺得不夠長可以加上time({time}+{group}+{thread number}+{迭代計數} )。

   group獲取:JMeter的線程組可以通過ctx來獲取,線程組是類似這樣的格式:線程組 1-1

   使用BeanShell來截取,${__BeanShell(((ctx.getThread().getThreadName().toString()).split(" ")[1]).split("-")[0],group)},並把線程組的Id放到了group中

   thread number獲取:可以通過__threadNum獲取

   time獲取:通過__time(hhmmss,)獲取,可以指定輸出格式,這裏只輸出時分秒

   迭代計數器獲取:通過__counter獲取

  合在一起:${__time(hhmmss,)}${group}${__threadNum}${__counter(,)}  名稱中直接用了BeanShell函數,在此可以觸發截取group。

 

 這種方法有個弊端,就是每次運行Sampler時都會取一次group,這樣多少影響效率,有沒有一勞永逸的辦法呢,當然有,我們可以用BeanShell Sampler,

並且把BeanShell Sampler放在僅一次控制器中,這樣就只截取一次(Group在運行過程中是不變的),於是就是這樣:

 

 

   

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章