httprunner 2.x學習6-參數化與數據驅動


前言

從 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組用例,很顯然,這種不適用與登錄-密碼一對一的情況。可以用在其它的測試場景


httprunner 2.x實戰教程點我 ->立即報名


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM