目錄
1、標記(Markers):
自定義插件
內置標記
2、夾具(Fixtures):
夾具得用法
夾具作用域
3、鉤子(hook):
這篇是最重要的 測試文件中需要用到的 總的來說 有以下幾個點 mark、fixture、hook、參數化、各種插件
1、標記(Markers):
-
自定義插件
自定義標記得用途是篩選用例,只執行部分用例,共分為三個步驟
- 在pytest.init注冊標記
?[pytest]addopts = -vs # addopts 用于指定默認的命令行選項markers =login: 登錄相關db: 數據庫相關upload: 上傳相關
- 在用例中通過裝飾器添加標記
?@pytest.mark.db def test_example():print('使用數據庫')
- 在命令行參數中加-m使用標記
?[pytest]addopts = -vs -m 'db or login'# -v(verbose 模式)用于顯示詳細的測試執行信息(包括每個測試用例的名稱和狀態) # -s(關閉輸出捕獲)允許測試中的 print 或日志輸出直接顯示在控制臺(默認情況下 pytest 會捕獲這些輸出)。 # -m(標記篩選)只運行被標記為 @pytest.mark.db 或 @pytest.mark.login 的測試用例。
-
內置標記
內置標記由pytest注冊的,目的不是為了篩選用例,而是對用例進行特殊處理,這種方法不需要注冊可以直接使用
- @pytest.mark.skip? ? ?> 無條件跳過用例
- @pytest.mark.skipif? ?> 有條件跳過用例
- @pytest.mark.xfail? ? ?> 預期失敗
?@pytest.mark.skip(reason="Not implemented yet") def test_skip():assert 1 + 1 == 2
2、夾具(Fixtures):
-
夾具得用法
其實這個東西你就理解成unittest框架中的setup teardown就是測試用例執行之前 執行之后自動運行的代碼@pytest.fixture def numbers():print('我是前置代碼 用例運行之前執行')yieldprint('我是后置代碼 用例運行之前執行')
? -
夾具作用域
????????pytest中夾具的作用域 主要有五種:?
- function(默認作用域,每個測試函數都會調用一次夾具。
- class(每個測試類調用一次夾具
- module(每個測試模塊也就是當前的測試文件調用一次夾具。
- package(每個目錄調用一次夾具。
- session(整個測試會話也就是所有的測試用例只調用一次夾具
import pytest# function scoped fixture
@pytest.fixture(scope="function")
def func_scope_fixture():print("Setup for each test function")yieldprint("Teardown for each test function")
附:
這個實際運用中,例如在接口自動化測試中, 可以通過fixture提供全局的session
實現TCP復用,參數共享,cookies關聯,日志記錄,BaseURL
3、鉤子(hook):
鉤子:被pytest自動調用的函數,在 pytest
中,鉤子(hook)是特殊的插件機制,可以讓你在測試運行的不同階段插入自定義行為。
通過使用鉤子,你可以擴展或修改
pytest
的默認行為。例如,你可以在每個測試開始或結束時執行特定的操作,或在測試收集階段修改發現的測試項。
為了讓pytest
使用這些鉤子,你需要將這些代碼放在項目中的conftest.py
文件中。pytest
會自動發現并應用conftest.py
中定義的鉤子。
- 寫在confest文件中
- 符合hook規范定義import _pytest.hookspec
# conftest.py
def pytest_configure(config):print("Configuring the test session.")def pytest_sessionstart(session):print("Test session starting.")
參數化和插件下篇說 寫不動了hh
3、pytest實現參數化-CSDN博客
4、pytest常用插件-CSDN博客