之前我們的用例數據都是配置在 Jmeter Http 請求中,每次需要增加,修改用例都需要打開 jmeter 重新編輯,當用例越來越多的時候,用例維護起來就越來越麻煩,有沒有好的方法來解決這種情況呢?
其實我們可以將用例的數據存放在 csv 文件中,然后通過 csv 文件配置來讀取用例中的數據,執行測試。用例數據如下圖所示:
用例設計:
這里以 httpbin 接口為例,創建用例文件:jmeter-testcase.csv
用例名稱變量含義:
-
- ${caseSeq}:用例編號
- ${apiType}:api 類型
- ${apiSeq} :api 版本號
- ${apiName}:api 名稱
- ${priority}:優先級
- ${url}:api 路徑
- ${methods}:請求方法
- ${parameter}: 請求參數
- ${expectValue}:期望值,用於斷言
Jmeter 設置步驟:
1.新建一個線程組,命名為:數據驅動
2.創建一個 http 請求默認值,設置如下:
3.添加一個循環控制器 步驟為:線程組——添加——邏輯控制器——循環控制器。 循環控制器的作用可以控制整個用例循環執行的次數。默認值是 1 根據用例數量可以修改為 4
4.在循環控制器節點下創建 CSV 文件設置,具體配置內容如下:
5.創建一個 if 控制器,步驟為:線程組——添加——邏輯控制器——if 控制器
if 控制器的作用為根據不同條件執行不同的用例,例如這里根據不同的接口請求類型,分別創建了 GET 和 POST 兩個控制器。
GET 設置的條件語句如下:
條件語句為:"${methods}"=="GET"其中 ${methods}表示引用 csv 中的 methods 中的值。
參數:
-
- Interpret Condition as Variable Expression?:如果這個選項被選中,將不會使用 js 解析;條件表達式的值必須是 true(忽略大小寫),這里我們取消勾選狀態。
- Evaluate for all children:如果選中這一項,在每個子結點執行前都會計算表達式
POST 條件語句設置為:"${methods}"=="POST"
6.創建 GET 請求類型的用例如下
用例名稱格式:${caseSeq}_ ${apiSeq}_${apiName}
斷言設置如下:${expectValue}引用 csv 中對應的值。
最后添加查看結果樹,然后運行可以看到如下運行結果:
7.POST 用例設置和 GET 類似,不過參數請求不一樣,是在 body 中,如果發送的是json格式的參數,需要添加http信息頭管理器。另外請求方式為:POST
運行結果如下:
8.最后在線程組添加一個查看結果樹,執行可以查看全部用例執行情況。
小結
通過這樣的數據驅動,當面對大量用例時在 jmeter 設置就非常方便,后續的用例維護也非常高效,因為不用在jmeter 一個個去單獨修改用例了。