使用jmeter構造時間戳參數


很久沒用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,本篇重點講的內容就到這里啦,通篇看下來其實主要是時間戳函數的使用,后續再介紹其他


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM