前言
在之前的文章中,我們已經學習了 parameters 參數化,是在測試腳本中直接指定參數列表。這種方法簡單易用,但如果我們的參數列表數據比較多,這種方法可能就不太適合了。
當數據量比較大的時候,我們希望可以把測試數據寫到 CSV 文件中,然后直接引用 CSV 文件數據。
本人環境:HttpRunner V1.5.8
測試場景
我們繼續以之前的登錄接口來學習,如果直接在 YAML/JSON 腳本中指定參數列表內容,那么我們的用例可能就是這樣的:
- config:
name: parameters test
request:
base_url: http://api.nnzhp.cn
parameters:
- username-passwd:
- ["niuhanyang", "aA123456"]
- ["test10101", "fasdfasfa"]
- ["test1010", "aA123456"]
- test:
name: login case
request:
url: /api/user/login
method: POST
headers:
Content-Type: application/x-www-form-urlencoded
User-Agent: Fiddler
data:
username: $username
passwd: $passwd
validate:
- eq: [status_code, 200]
- eq: [content.error_code, 0]
上面的用例,只有 3 組測試數據,當我們有10、100組測試數據,如果直接寫在測試腳本中,可能會很不方便。我們可以把這些測試數據都寫到CSV文件,然后直接引用CSV文件,這樣就方便多了,我們的腳本也顯得更加簡潔。
CSV中存放單個參數
對於 CSV 數據文件,需要遵循如下幾項約定的規則:
- 文件需放置在與測試用例文件相同的目錄中;
- CSV 文件中的第一行必須為參數名稱,從第二行開始為參數值,每個(組)值占一行;
- 若同一個 CSV 文件中具有多個參數,則參數名稱和數值的間隔符需實用英文逗號。
比如,我們有多組登錄的數據,用戶名都不一樣,但密碼都是一樣的,我們就可以創建 username.csv,並把 用戶名 這一參數寫到 username.csv 中,如下:
username
niuhanyang
test10101
test1010
然后在 YAML/JSON 測試用例中,就可以通過 HttpRunner 內置的 parameterize(可簡寫為P)函數引用 CSV 文件。
parameters:
- username: ${P(username.csv)} # 或者 ${parameterize(username.csv)}
- passwd: ["aA123456"]
注意:HttpRunner中,在 parameters 中指定的參數名稱必須與 CSV 文件中第一行的參數名稱一致。
CSV中存放多個參數
對於具有關聯性的多個參數,比如,我們有多組登錄的數據,用戶名和密碼都不一樣,那么我們可以創建 user.csv ,並把用戶名和密碼的參數寫到 user.csv 中,如下:
username,passwd
niuhanyang,aA123456
test10101,fasdfasfa
test1010,aA123456
再修改一下 YAML 腳本:
parameters:
- username-passwd: ${P(user.csv)} # 或者 ${parameterize(user.csv)}
注意:上面的寫法是用戶名密碼一對一的關系,如果是按下面這樣寫,那就會是笛卡爾積組合的情況,產生 3 * 3 = 9 種組合。
parameters:
- username: ${P(user.csv)}
- passwd: ${P(user.csv)}
另外,在測試腳本中指定參數時,可以只使用部分參數,並且參數順序無需與 CSV 文件中參數名稱的順序一致。
運行用例
完整的YAML格式用例(test_csv.yml):
- config:
name: parameters test
request:
base_url: http://api.nnzhp.cn
parameters:
- username-passwd: ${P(user.csv)} # 或者 ${parameterize(user.csv)}
- test:
name: login case
request:
url: /api/user/login
method: POST
headers:
Content-Type: application/x-www-form-urlencoded
User-Agent: Fiddler
data:
username: $username
passwd: $passwd
validate:
- eq: [status_code, 200]
- eq: [content.error_code, 0]
在HttpRunner 1.x版本中,引用 CSV 數據文件(如 user.csv),需要將 user.csv 和 test_csv.yml 放在同一目錄下,然后在運行用例即可。運行用例后的報告如下: