前言
在使用HttpRunner測試過程中,我們可能會遇到這種場景:
賬號登錄功能,需要輸入用戶名和密碼,設計測試用例后有 N 種組合情況
如果測試組合比較少,比如只有2個,那我們直接在YAML腳本中寫2個 test 就行了,但如果測試組合有10個,或者上百個,我們總不可能寫10個,甚至100個 test 吧?
因此,在這里我們就需要用到參數化。在HttpRunner中,通過關鍵字 parameters 來實現參數化數據驅動機制,不管有多少測試組合,我們只需寫1個 test 就行了。
本人環境:HttpRunner V1.5.8
測試場景
我們繼續以之前的登錄接口來學習,如果不使用 parameters 來進行參數化,那么我們的用例可能就是這樣的:
- config:
name: login test
request:
base_url: http://api.nnzhp.cn
- test:
name: login case 1
request:
url: /api/user/login
method: POST
headers:
Content-Type: application/x-www-form-urlencoded
User-Agent: Fiddler
data:
username: test1010
passwd: aA123456
validate:
- eq: [status_code, 200]
- eq: [content.error_code, 0]
省略很多個 test
- test:
name: login case N
request:
url: /api/user/login
method: POST
headers:
Content-Type: application/x-www-form-urlencoded
User-Agent: Fiddler
data:
username: test101012
passwd: aA123456
validate:
- eq: [status_code, 200]
- eq: [content.error_code, 0]
在上面的用例中,我們可能要寫很多的 test ,在這些 test 中,除了 request-data 中 username 和 passwd 的值不一樣,其他內容都完全一樣。
當我們使用 parameters 來實現參數化后,我們只要寫 1個test 就行了,避免了重復的腳本代碼,同時腳本內容也變得更加簡潔。
parameters參數化--一對一
我目前的 HttpRunner 版本是 1.5.8 ,關鍵字 parameters 可以在 config 或 test 中使用,我們只以在 config 中使用 parameters 來進行說明。
注意:在 HttpRunner 1.5.11 之后的版本中,不再支持在 test 中使用 parameters 。
我們准備 3 組登錄用的數據,其中,第1組和第3組是能正常登錄的用戶名和密碼,第2組是錯誤的用戶名和密碼。使用 parameters 如下:
parameters:
- username-passwd:
- ["niuhanyang", "aA123456"] # 正確的用戶名密碼
- ["test10101", "fasdfasfa"] # 錯誤的用戶名密碼
- ["test1010", "aA123456"] # 正確的用戶名密碼
然后,只保留一個 test 即可,並在 request-data 中引入參數,如下:
data:
username: $username
passwd: $passwd
完整的YAML用例:
- 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]
運行用例,然后即可得到測試報告,如下:
parameters參數化--多對一
上面介紹的是用戶名和密碼一對一的情況,如果是 多對一 或 一對多 關系,比如 3 組登錄用的數據中,用戶名不一樣,但密碼都是相同的,這個時候,如果用上面的寫法,就不太方便了。
對於這種情況,我們可以這樣寫:
parameters:
- username: ["niuhanyang", "test10101", "test1010"]
- passwd: ["aA123456"]
只需改動 config 中的 parameters ,其他內容都不需要修改。運行用例后的報告如下:
parameters參數化--多對多
有時候,我們可能存在多對多的測試場景,即笛卡爾積的組合情況。如果有 3 個不同的用戶名,2 個不同的密碼,對於這種情況,使用笛卡爾積組合,就應該存在 2 * 3 = 6 種測試組合。
對於這種情況,我們可以這樣寫:
parameters:
- username: ["niuhanyang", "test10101", "test1010"]
- passwd: ["aA123456", "fasdfasfa"]
只需改動 config 中的 parameters ,其他內容都不需要修改。運行用例后的報告如下: