Jmeter使用過程中的坑之用戶定義的變數配置元件+__time函數
場景說明:腳本如下
每次請求ID不一樣,出於個人習慣,我一般喜歡用當前時間+一個計數器,這樣可以保證每次請求的ID唯一且在DB中可以一眼看出是什麼時候的請求,格式如下:
20160912154722100001(2016-09-12 15:47:22,計數器1000001-999999)
然後,上圖A01介面請求ID1,A02介面需要A01返回的報文的ID2+ID1,對之前的A01落庫數據做操作,所以我使用了一個正則提取器(到這裡沒什麼問題。)
一開始,我的操作時A01中一個${__time(yyyyMMddHHmmss,)},A02中一個${__time(yyyyMMddHHmmss,)},這樣會出現一個問題,比如跨秒的時候,A01請求的ID1和A02請求ID1就不一樣,導致請求的數據不存在,處理失敗。
為了保證獲取的時間是一致的,所以,我使用了配置元件-用戶定義的變數,如上圖,這樣A01A02請求中的ID1,我都使用已經定義好的no,這樣就可以保證一致了!就有了上圖的腳本設計!
出現問題:以上腳本設計,看似沒有問題,你壓測一般場景也沒什麼問題,但在我實際測試中,在進行8小時穩定性壓測過程中,時間在過6個小時之後的,發現事務全部失敗。
查看日誌原因,是因為ID不存在問題,仔細查看,本來ID生成的時間應該是和報錯時間一樣的(我腳本設計就是這樣的),但看到實際請求ID卻是腳本壓測開始的那個時間!也就是說,在用戶變數配置元件中time函數獲取出現問題或者配置元件本身的穩定,導致壓測在執行6個小時之後,參數出現了問題,或time函數出差,或本身這個配置元件出現問題。
重現問題:
1、我簡化流程,刪除A02腳本,只用這個元件+A01介面,壓測到6個小時還是出了問題;
2、刪除這個元件後,直接在A01中使用time函數壓測8小時卻是正常。
確認問題:用戶定義的變數配置元件+time函數使用,在長時間運行中,存在問題,請各位慎用!
筆者寄語:當前版本的JMeter存在這個問題,後面的版本是否存在這個問題,請各位驗證。JMeter是一款很不錯的性能工具,但由於元件很多,會存在很多潛在的bug,就拿這次遇到的問題來說,平常壓測十幾分鐘你是不會出現問題的,但進行穩定性壓測的時候,就出現問題了~
推薦閱讀:
※雲智慧壓測實戰分享之JMeter工具使用初探
※JMeter-常用函數介紹
※珊yo大戰-----日邢一珊VS妖yoyo,你到底支持誰?