前言
從 2.0.0 版本開始,HttpRunner 不再支持在測試用例文件中進行參數化配置;
參數化的功能需要在 testsuite 中實現。變更的目的是讓測試用例(testcase)的概念更純粹
環境:httprunner==2.5.7
參數配置
參數化機制需要在測試用例集(testsuite)中實現。如需實現數據驅動機制,需要創建一個 testsuite,在 testsuite 中引用測試用例,並定義參數化配置。
測試用例集(testsuite)的格式如下所示:
config:
name: testsuite description
testcases:
testcase1_name:
testcase: /path/to/testcase1
testcase2_name:
testcase: /path/to/testcase2
如需對某測試用例(testcase)實現參數化數據驅動,需要使用 parameters 關鍵字,定義參數名稱並指定數據源取值方式。
參數名稱的定義分為兩種情況:
- 獨立參數單獨進行定義;
- 多個參數具有關聯性的參數需要將其定義在一起,采用短橫線(-)進行連接。
數據源指定支持三種方式:
- 在 YAML/JSON 中直接指定參數列表:該種方式最為簡單易用,適合參數列表比較小的情況
- 通過內置的 parameterize(可簡寫為P)函數引用 CSV 文件:該種方式需要准備 CSV 數據文件,適合數據量比較大的情況
- 調用 debugtalk.py 中自定義的函數生成參數列表:該種方式最為靈活,可通過自定義 Python 函數實現任意場景的數據驅動機制,當需要動態生成參數列表時也需要選擇該種方式
三種方式可根據實際項目需求進行靈活選擇,同時支持多種方式的組合使用。
假如測試用例中定義了多個參數,那么測試用例在運行時會對參數進行笛卡爾積組合,覆蓋所有參數組合情況。
單個參數時參數化
先准備測試數據,准備四組登錄用的賬號和密碼,賬號為test1,test2,test3,test4,密碼統一設置為123456。
參數user賬號數據,設置對應的值 ["test1", "test2", "test3", "test4"],定義單個參數用variables,定義參數化用parameters
variables:
user: test
password: 123456
parameters:
user: ["test1", "test2", "test3", "test4"]
如果參數化里面的數據只有一個,比如psw對應的值只有一個,parameters 也可以設置 password的值
variables:
user: test
password: 123456
parameters:
user: ["test1", "test2", "test3", "test4"]
password: ["123456"]
完整的 testsuites/test_parameters.yml 腳本如下
# testsuites/test_parameters.yml
# 上海-悠悠,httprunner QQ交流群:717225969
config:
name: "test userinfo"
testcases:
login-參數化:
testcase: case/test_login.yml
variables:
user: test
password: 123456
parameters:
user: ["test1", "test2", "test3", "test4"] # 參數化
password: [123456]
運行用例,會自動生成四個測試用例
(venv_hrun) D:\soft\venu_hrun>hrun testsuites/test_parameters.yml
INFO HttpRunner version: 2.5.7
INFO Start to run testcase: login-參數化
login-setup
INFO POST http://127.0.0.1:8000/api/v1/login/
INFO status_code: 200, response_time(ms): 170.15 ms, response_length: 109 bytes
.
----------------------------------------------------------------------
Ran 1 test in 0.175s
OK
INFO Start to run testcase: login-參數化
login-setup
INFO POST http://127.0.0.1:8000/api/v1/login/
INFO status_code: 200, response_time(ms): 138.63 ms, response_length: 109 bytes
.
----------------------------------------------------------------------
Ran 1 test in 0.140s
OK
INFO Start to run testcase: login-參數化
login-setup
INFO POST http://127.0.0.1:8000/api/v1/login/
INFO status_code: 200, response_time(ms): 147.59 ms, response_length: 109 bytes
.
----------------------------------------------------------------------
Ran 1 test in 0.154s
OK
INFO Start to run testcase: login-參數化
login-setup
INFO POST http://127.0.0.1:8000/api/v1/login/
INFO status_code: 200, response_time(ms): 136.7 ms, response_length: 109 bytes
.
----------------------------------------------------------------------
Ran 1 test in 0.140s
OK
INFO Start to render Html report ...
INFO Generated Html report: D:\soft\venu_hrun\reports\20200612T164223.834696.html
關聯參數
上面的案例多個賬號,密碼都是一樣的,如果密碼不一樣呢?上面的就行不通了,所以針對於一個賬號對應一個密碼,這種一一對應的關系,可以用關聯性的參數化
# 上海-悠悠,httprunner QQ交流群:717225969
config:
name: "test userinfo"
testcases:
login-參數化:
testcase: case/test_login.yml
parameters:
user-password:
- ["test1", "123456"]
- ["test2", "123456"]
- ["test3", "123456"]
- ["test4", "123456"]
笛卡爾積組合
比如測試賬號有四種["test1", "test2", "test3", "test4"],密碼也有四種 ["123456", "123456", "123456", "123456"]
用笛卡爾積組合的話,就是4*4=16種組合
# 上海-悠悠,httprunner QQ交流群:717225969
config:
name: "test userinfo"
testcases:
-
name: login-參數化
testcase: case/test_login.yml
parameters:
user: ["test1", "test2", "test3", "test4"]
password: ["123456", "123456", "123456", "123456"]
這樣運行會生成16組用例,很顯然,這種不適用與登錄-密碼一對一的情況。可以用在其它的測試場景