pytest框架簡介


一、pytest框架簡介

  1. pytest是單元測試框架(測試函數、方法)
  2. 自動化測試框架的功能:發現用例 —> 執行用例 —> 判斷結果 —> 輸出結果
  3. pytest框架 < 單元測試框架 < 自動化測試框架
  4. pytest+插件/包:
    1. requests:接口自動化
    2. selenium、appium:UI自動化
    3. allure-pytest:美觀的測試報告
    4. Jenkins:持續集成
    5. pytest-html:生成HTML格式的報告
    6. pytest-xdist:分布式執行
    7. pytest-ordering:更改執行順序
    8. pytest-rerunfailures:重跑失敗用例

二、pytest測試用例命名規則

  1. 模塊(.py文件)名必須以test_開頭或以_test結尾;
  2. 類名必須以Test開頭,且不能有init方法;
  3. 方法名必須以test開頭;

三、pytest運行方法

1. 主函數模式:
  1. 運行所有用例:pytest.main([“-vs”])

    主函數在任何一個py文件中,都能執行同目錄及以下所有py文件中的用例

  2. 指定目錄(文件夾名):pytest.main(["-vs", "login"])

  3. 指定模塊(.py文件):pytest.main(["-vs", "login/test_login.py"])

  4. 指定方法(nodid,::作為隔離符 ):pytest.main(["-vs", "login/test_login.py::TestLogin::testLogin"])

2. 命令行模式:
  • 參考主函數運行模式
3. 通過讀取pytest.ini配置文件運行(實際工作中最常使用)
  1. pytest.ini:pytest核心配置文件
    1. 位置:一般在項目根目錄
    2. 編碼:ANSI
    3. 作用:改變pytest的默認行為,運行pytest前都會去讀取此文件

    [pytest]
    addopts = -vs # 命令行的參數
    testpaths = ./test #測試用例的路徑
    python_files = yqsl_*.py # 測試模塊名規則
    python_classes = Yqsl* # 測試類名規則
    python_functions = yqsl* #測試方法名規則
    markers = # 運行哪些標記用例

參數詳解:

-vs:輸出更詳細的信息 + 輸出調試信息(包括print打印信息)
-n 數量:分布式運行,pytest.main(["-vs", "test_login.py", "-n=2"])
-x:用例報錯即停止測試
--maxfail 數量:報錯達到最大數量才停止測試,pytest.main(["-vs", "test_login.py", "--maxfail=2")
--reruns 數量:失敗的用例重跑次數, pytest.main(["-vs", "test_login.py", "--reruns=2"])
-k:用例名稱模糊匹配后執行,pytest.main(["-vs", "test_login.py", "-k=login''])
--html ./report/report.html:生成HTML格式報告

四、pytest執行順序

  1. 默認從上到下執行
  2. 可以使用mark標記來更改順序:

    @pytest.mark.run(order=1)
    提示:必須先安裝pytest-ordering插件

五、分組執行

  1. pytest中用markers標記用例,可以指定執行標記用例(如:測試模塊,用戶管理模塊)
  2. 代碼中用@pytest.mark.xxx給用例打上標記
  3. pytest -vs -m "xxx or xxx":使用命令行方式執行時

六、跳過部分用例執行

1. 無條件跳過

@pytest.mark.skip(reason="跳過原因")

1. 有條件跳過

@pytest.mark.skipif(age>=18, reason="跳過原因")
變量age大於18時,跳過執行此用例

七、前后置(夾具),常用的有三種

  1. setupteardown(setup_classteardown_class)

    1. def setup_class(self): # 這個在所有用例執行前執行一遍
    2. def setup(self): # 這個在每個用例執行執行一遍
    3. def teardown(self): # 這個在每個用例執行執行一遍
    4. def teardown_class(self):# 這個在所有用例執行后執行一遍

    缺點:如果一個測試類下部分用例要執行夾具(如:打開瀏覽器),則不能實現

  2. @pytest.fixture(scope="", params="", autouse="", ids="", name="")

    1. scope表示被標記方法的作用域(function(默認)classmodulepackage/session
    2. params參數化:
      1. 支持列表[]、元祖()、字典列表[{}, {}, {}]、字典元祖({}, {}, {})
      2. 如果有多個參數,被標記的方法則會執行多次
    3. autouse=Ture類下所有用例執行前自動添加夾具方法(無需給每個用例都引用夾具名稱),默認是false
    4. ids當使用params時給每一個值設置一個變量名。意義不大
    5. name給被標記的方法取一個別名
  3. conftest.py

    1. 單獨用於存放fixture的配置文件
    2. conftest.py中的固件在使用時不需要引用
    3. 可以有多個conftest.py文件
    4. 用例中先引用的固件,則先執行

八、處理全局、中間變量

  1. 比較成熟的方式是:通過一個yaml文件管理(接口框架封裝第一步)
  2. 通過一個范圍是session的fixture來調用clear_yaml。保證每次session之前都清楚yaml文件內容

九、斷言

  1. 一般斷言方式:
    1. assert xxx in response
    2. assert response["body"] == xxx

十、結合allure-pytest生成報告

  1. 前提安裝插件、包:
    1. 官網下載並解壓allure到目錄;
    2. 將allure/bin目錄添加到全局配置path中;
    3. 驗證安裝成功allure --version;
    4. pip list中安裝allure-pytest插件;
  2. 報告生成流程:
    1. 生成臨時的json文件:
      1. pytest.ini中添加命令:addopts=-vs --alluredir ./temp
    2. 通過json文件生成allure報告:
      1. 命令:os.system(allure generate ./temp -o ./reports --clean)
      2. 解釋:
        1. allure generate ./temp:生成allure報告,從./temp目錄中讀取臨時json文件;
        2. -O ./reports:輸出結果到./reports目錄下;
        3. clean:輸出前清除上一次的數據;

十一、使用yaml實現數據驅動

  1. 使用@fixture.mark.parametrize(args_name, args_value)完成

    args_name:參數名(多個參數名,則可以解包。如"name1, value1")

    args_value:參數值(支持列表[]、元祖()、字典列表[{}, {}, {}]、字典元祖({}, {}, {}),如果有多個參數,被標記的方法則會執行多次)

  2. 舉例:@fixture.mark.parametrize("name, value", [["張三", 18], ["李四", 20]])


免責聲明!

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



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