好久沒用jmeter了,此次趁着項目穩定後,用jmeter寫了一些建立測試數據的腳本,由於手動建立數據太麻煩了正則表達式
本次編寫腳本,一方面是經過查看後臺請求,手動錄入腳本,另外一方面用到了一些自帶的函數來生成時間戳、生成隨機數瀏覽器
因此本篇主要說一下此次寫腳本的思路以及如何解決遇到的問題dom
1.總體思路
- 要想構造數據,首先必須登陸獲取token,後續操做都依賴這個生成的token;
- 本次須要構造3種類型的數據,每種數據填寫的字段不一樣,因此編寫腳本時,利用【事務控制器】,把不一樣做用的腳本進行分類,例如登陸操做、構造A類型數據、構造B類型數據,這樣腳本運行時,結果看起來一目瞭然;
- 不一樣請求須要的headers可能不一樣,因此把【HTTP信息頭管理器】添加在各個【事務控制器】下,只對其下的請求生效(或者再細分添加某個具體請求下);
- 根據參數實際狀況選用【HTTP請求默認值】以及【JSON提取器】、【正則表達式提取器】以及【函數助手】等,幫助實現參數化
2.編寫過程當中的關鍵點
(1)響應結果中的中文字符顯示成了「???」函數
編寫好第一個腳本後,執行後查看結果,發現中文字符沒有正常顯示,以下測試
解決方法:在請求中,加上內容編碼:utf-8編碼
(2)添加時間戳 timestampspa
有些請求攜帶的參數中包含時間戳,能夠是放在headers中,也能夠是放在請求參數中翻譯
在jmeter中,可以經過函數助手來生成時間戳3d
- 生成當前時間
依次點擊【選項】-【函數助手對話框】,打開函數助手blog
而後選擇【__time】函數,它能夠生成各類形式的當前時間,展現以下
點擊【幫助】會默認打開瀏覽器顯示該函數的說明文檔,谷歌硬核翻譯以下
(1)不填寫任何格式,直接點擊【生成】,在結果區會展現一個13位的時間戳(毫秒級)
(2)若是要生成10位數字時間戳(秒級),則須要在格式字符中輸入「/1000」
(3)生成特定格式的日期
幫助文檔中提供了以下幾種
- YMD = yyyyMMdd
- HMS = HHmmss
- YMDHMS = yyyyMMdd-HHmmss
依次來試一下
YMD,等價於yyyyMMdd,填寫到格式字符串中,點擊【生成】
HMS ,等價於 HHmmss
YMDHMS ,等價於 yyyyMMdd-HHmmss
也能夠本身來自定義一下顯示格式
以前說生成時間戳時,變量名是非必填的,下面看下填寫變量名後是什麼效果
注意:當點擊【生成】後,「拷貝並粘貼函數字符串」後會出現一串變量名,這個能夠理解爲時間戳變量,把它放到請求參數中,就意味着獲取到了當前時間,以下
- 根據當前時間進行位移(向前or向後移動指定時長)
有些請求會用到過去或未來的 某一個時間,jmeter有一個函數能夠知足這個需求【__timeShift】
谷歌硬核翻譯幫助文檔以下
下面來試驗一下
(1)顯示格式爲yyyyMMdd,時間基準20200420,向後推移2天
(2)顯示格式爲時間戳(毫秒級),時間基準爲當前時間,向後推移10分鐘
${__timeShift(,,PT10M,,)}
(3)顯示格式爲 yyyy/MM/dd HH:mm:ss,時間基準爲 2020/04/17 17:38:00,向後推遲 10分20秒
${__timeShift(yyyy/MM/dd HH:mm:ss,2020/04/17 17:38:00,PT10M20S,,)}
(4)顯示格式爲 yyyy/MM/dd HH:mm:ss,時間基準爲 2020/04/17 17:38:00,向前推 10分20秒
有2種寫法:PT-10M-20S 或 -PT10M20S
ps.位移時間時,注意「-」添加的位置便可,「+」能夠省略
添加時間戳一方面能夠用到傳時間參數這種狀況下,直接丟個時間戳過去;另外一方面,例如批量造數據時,不想每一個數據的名稱都同樣,那麼就能夠用時間戳做名稱後綴,以下
這樣生成的數據就是:測試數據-20200417-141443
(3)生成隨機數
一種是利用【__Random】函數(生成的隨機數不惟一,可能會重複)
一種是利用【__UUID】函數(每次都會生成惟一的隨機數)