很久沒用jmeter了,這次趁着項目穩定后,用jmeter寫了一些創建測試數據的腳本,因為手動創建數據太麻煩了
本次編寫腳本,一方面是通過查看后台請求,手動錄入腳本,另一方面用到了一些自帶的函數來生成時間戳、生成隨機數
所以本篇主要說一下這次寫腳本的思路以及函數助手中用到的函數
1.整體思路
- 要想構造數據,首先必須登錄獲取token,后續操作都依賴這個生成的token;
- 本次需要構造3種類型的數據,每種數據填寫的字段不同,所以編寫腳本時,利用【事務控制器】,把不同作用的腳本進行分類,例如登錄操作、構造A類型數據、構造B類型數據,這樣腳本運行時,結果看起來一目了然;
- 不同請求需要的headers可能不同,所以把【HTTP信息頭管理器】添加在各個【事務控制器】下,只對其下的請求生效(或者再細分添加某個具體請求下);
- 根據參數實際情況選用【HTTP請求默認值】以及【JSON提取器】、【正則表達式提取器】以及【函數助手】等,幫助實現參數化
2.編寫過程中的關鍵點
(1)響應結果中的中文字符顯示成了“???”
編寫好第一個腳本后,執行后查看結果,發現中文字符沒有正常顯示,如下
解決方法:在請求中,加上內容編碼:utf-8
(2)添加時間戳 timestamp
有些請求攜帶的參數中包含時間戳,可以是放在headers中,也可以是放在請求參數中
在jmeter中,能夠通過函數助手來生成時間戳
- 生成當前時間
依次點擊【選項】-【函數助手對話框】,打開函數助手
然后選擇【__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】函數(每次都會生成唯一的隨機數)
OK,本篇重點講的內容就到這里啦,通篇看下來其實主要是時間戳函數的使用,后續再介紹其他