在以前的文章中,咱們已經學習了 parameters 參數化,是在測試腳本中直接指定參數列表。這種方法簡單易用,但若是咱們的參數列表數據比較多,這種方法可能就不太適合了。php
當數據量比較大的時候,咱們但願能夠把測試數據寫到 CSV 文件中,而後直接引用 CSV 文件數據。api
本人環境:HttpRunner V1.5.8app
##測試場景函數
咱們繼續以以前的登陸接口來學習,若是直接在 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 組測試數據,當咱們有十、100組測試數據,若是直接寫在測試腳本中,可能會很不方便。咱們能夠把這些測試數據都寫到CSV文件,而後直接引用CSV文件,這樣就方便多了,咱們的腳本也顯得更加簡潔。url
對於 CSV 數據文件,須要遵循以下幾項約定的規則:spa
- 文件需放置在與測試用例文件相同的目錄中;
- CSV 文件中的第一行必須爲參數名稱,從第二行開始爲參數值,每一個(組)值佔一行;
- 若同一個 CSV 文件中具備多個參數,則參數名稱和數值的間隔符需實用英文逗號。
好比,咱們有多組登陸的數據,用戶名都不同,但密碼都是同樣的,咱們就能夠建立 username.csv,並把 用戶名 這一參數寫到 username.csv 中,以下:code
username niuhanyang test10101 test1010
而後在 YAML/JSON 測試用例中,就能夠經過 HttpRunner 內置的 parameterize(可簡寫爲P)函數引用 CSV 文件。orm
parameters: - username: ${P(username.csv)} # 或者 ${parameterize(username.csv)} - passwd: ["aA123456"]
**注意:**HttpRunner中,在 parameters 中指定的參數名稱必須與 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 放在同一目錄下,而後在運行用例便可。運行用例後的報告以下: