Jmeter(三十四) - 從入門到精通進階篇 - 引數化(詳解教程)
1.簡介
前邊三十多篇文章主要介紹的是Jmeter的一些操作和基礎知識,算是一些初級入門的知識點,從這一篇開始我們就來學習Jmeter比較高階的操作和深入的知識點了。今天這一篇主要是講引數化,其實前邊或多或少的介紹過類似的知識點,知識沒有系統的講解,由於這個在實際工作中用到比較多而且經常用到,所以巨集哥今天將其單獨作為一個主題來系統的講解。
尤其是在用到jmeter工具時,無論做介面測試還是效能測試,引數化都是一個必須掌握且非常有用的知識點。引數化的使用場景,例如: 1)多個請求都是同一個ip地址,若伺服器地址更換了,則指令碼需要更改每個請求的ip 2)註冊賬號,不允許賬號重複;想批量註冊使用者時 3)模擬多個使用者登入,需要用到不同使用者資訊登入時 4)上一個請求的輸出結果用於下一個請求的引數傳入,例如登入獲取到的token資訊,用於提交賬單請求的引數呼叫2.什麼是引數化
概念:根據需求動態獲取資料並進行賦值的過程。
引數化:通俗的講就是在進行測試的時候,測試資料是一項重要的準備工作,每次迭代的資料當不一樣的時候,需要進行引數化,從引數化的檔案中來讀取測試資料。例如:測試使用者登入時需要輸入使用者名稱和密碼,假如系統不允許相同的使用者名稱和密碼同時登入,或者想更好的模擬多個使用者來登入系統。這個時候就需要對使用者名稱和密碼進行引數化,使每個虛擬使用者都使用不同的使用者名稱和密碼進行訪問。
3.jmeter的幾種引數化方式
這裡以下邊的這個註冊介面為例:介面地址:https://api.apiopen.top/api.html
開發者註冊
請求方式:POST
請求地址:https://api.apiopen.top/developerRegister
Query引數名 | 型別 | 必需 | 描述 | 示例 e.g. |
---|---|---|---|---|
name | string | 是 | 使用者名稱 | peakchao |
passwd | string | 是 | 密碼 | 123456 |
string | 是 | 郵箱,使用者反饋相關會郵件通知。 | [email protected] |
返回示例:
{ "code": 200, "message": "成功!", "result": { "apikey": "b9b3a96f7554e3bead2eccf16506c13e" } }
3.1在jmeter中,通過${變數名}來獲取引數值。
1、使用者定義的變數
1)執行緒組右鍵新增-->配置元件-->使用者定義的變數,出現如下設定頁面後
輸入名稱、值;注意:名稱可以自定義設定,如下圖所示:
2)然後將設定後的變數名稱,在註冊、登入請求中進行引數化引用${ip}、${email}
注意:引用的引數名跟使用者定義變數設定的名稱必須保持一致,巨集哥這裡例舉了一個註冊例項,如下圖所示:
3)點選執行,檢視結果樹,顯示成功,如下圖所示:
2、函式助手獲取引數值
1)選擇選單欄 選項-->函式助手對話方塊,彈出函式助手框,功能下面有多個函式可供選擇,我們主要看下__RandomString,其他可以自行了解下喲
2)要進行多個賬號註冊(比如10個使用者),註冊資訊要求郵箱 email 和使用者名稱 name 不能重複;所以可以這麼來思考,QQ郵箱後邊的@qq.com段固定,那就對QQ郵箱前幾位進行隨機,頁面設定如下圖所示:
3)拷貝生成的函式字串,貼上進行引數引用,如下圖所示:
4)設定執行緒組執行緒數為10,模擬10個虛擬使用者的註冊,如下圖所示:
5)點選執行,檢視結果樹,顯示成功,(巨集哥這裡只舉例說明郵箱,使用者名稱你可以模仿設定後《巨集哥這裡在“北京巨集哥”後邊加了一個隨機函式random,這樣北京巨集哥後帶有一個數字就不會重複了》,才能註冊成功,否則會報使用者名稱重複的錯誤)如下圖所示:
3、CSV Data Set Config獲取引數值
1)若需要註冊的QQ郵箱不能隨機,必須是使用者真實提供的QQ郵箱進行註冊的話,就採用以下這種方式,提前收集使用者真實QQ號及暱稱,存放在本地txt或者CSV檔案(CSV檔案預設逗號隔開),如下圖所示:
2)執行緒組右鍵新增-->配置元件-->CSV Data Set Config,如下圖所示:
關鍵引數說明:
Filename:需要傳入檔案的完整路徑。我的檔案位於C盤目錄下,檔名為users.txt。
File encoding:引數檔案的編碼格式。可以不填。
Variable Names:對應引數檔案中每列的變數名,也是你要引用到請求中的引數變數名。這裡第一列是使用者名稱、第二列是密碼、第三列是郵箱。變數名可以自定義。
igonre first line(only used if Variable Names is not empty):當 CSV 檔案中首行設定了變數名時,該項設為 true,此時每次請求讀取檔案時會自動忽略首行,直接讀取第二行的資料。若首行未設定,則選擇False
Delimiter:檔案中的分隔符,預設英文的逗號分隔。所以注意txt文件中每行多個引數用英文逗號分隔。
Recycle on EOF: 設定為True後,允許重頭迴圈取值;為False,當讀取檔案到結尾時,停止讀取檔案
Stop Thread EOF: 當Recycle on EOF為false並且Stop Thread EOF 為true,則讀完csv檔案中的記錄後,停止執行,執行緒數及執行次數無效。
Sharing Mode:共享模式。All threads:所有執行緒,所有執行緒迴圈取值,執行緒1取第一行,執行緒2取下一行;Current thread group:當前執行緒組,各個執行緒組分別迴圈取值;Current thread:當前執行緒,該測試計劃內的所有執行緒都取第一行。
備註說明:這裡我用通俗的語言大概講一下Recycle on EOF與Stop thread on EOF結果的關聯
Recycle on EOF :到了檔案尾處,是否迴圈讀取引數,選項:true和false
Stop thread on EOF:到了檔案尾處,是否停止執行緒,選項:true和false
當Recycle on EOF 選擇true時,Stop thread on EOF選擇true和false無任何意義,通俗的講,在前面控制了不停的迴圈讀取,後面再來讓stop或run沒有任何意義
當Recycle on EOF 選擇flase時,Stop thread on EOF選擇true,執行緒4個,引數3個,那麼只會請求3次
當Recycle on EOF 選擇flase時,Stop thread on EOF選擇flase,執行緒4個,引數3個,那麼會請求4次,但第4次沒有引數可取,不讓迴圈,所以第4次請求錯誤
3)使用CSV Data Set Config中定義好
a、直接引數化引用,如下圖所示:
b、通過函式助手進行引數化引用,如下圖所示:
4)設定執行緒組中執行緒數為3,執行後,輸出如下結果:成功,如下圖所示:
4.小結
1.在檔案中輸入變數的值時,尤其是.txt和.bat檔案中的變數值之間要用英文的逗號隔開。
2.變數值中有中文時,要在後邊勾選utf-8。
如果報錯,請求不成功,注意檢查是不是這兩點沒有注意到。
好了,時間不早了,今天就分享到這裡吧!