目錄:
- 安裝及入門
- 使用和調用方法
- 原有TestSuite使用方法
- 斷言的編寫和報告
- Pytest fixtures:清晰 模塊化 易擴展
- 使用Marks標記測試用例
- Monkeypatching/對模塊和環境進行Mock
- 使用tmp目錄和文件
- 捕獲stdout及stderr輸出
- 捕獲警告信息
- 模塊及測試文件中集成doctest測試
- skip及xfail: 處理不能成功的測試用例
- Fixture方法及測試用例的參數化
- 緩存: 使用跨執行狀態
- unittest.TestCase支持
- 運行Nose用例
- 經典xUnit風格的setup/teardown
- 安裝和使用插件
- 插件編寫
- 編寫鉤子(hook)方法
- 運行日志
- API參考
- 優質集成實踐
- 片狀測試
- Pytest導入機制及sys.path/PYTHONPATH
- 配置選項
- 示例及自定義技巧
- Bash自動補全設置
API參考-Marks
22-API參考-02-Marks
標記(Marks)
可以使用標記應用元數據來測試功能(但不是固定裝置),然后可以通過裝置或插件訪問。
pytest.mark.filterwarnings
教程:@ pytest.mark.filterwarnings。
為標記的測試項添加警告過濾器。
pytest.mark.``filterwarnings
(過濾器)
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: | 過濾器(str) -
一個警告規范字符串,由Python文檔的“警告過濾器”部分中 指定的元組內容組成,由。分隔。可以省略可選字段。傳遞用于過濾的模塊名稱不是正則表達式轉義。(action, message,category, module, lineno)
":"
例如:
@pytest.mark.warnings("ignore:.*usage will be deprecated.*:DeprecationWarning")
def test_foo():
...
|
pytest.mark.parametrize
教程:參數化夾具和測試功能。
Metafunc.``parametrize
(argnames,argvalues,indirect = False,ids = None,*scope = None *)[source]
使用給定argnames的argvalues列表向基礎測試函數添加新調用。在收集階段執行參數化。如果你需要設置昂貴的資源,請參閱設置間接,以便在測試設置時進行。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: |
- argnames - 以逗號分隔的字符串,表示一個或多個參數名稱,或參數字符串的列表/元組。
- argvalues - argvalues列表確定使用不同參數值調用測試的頻率。如果只指定了一個argname,則argvalues是值列表。如果指定了N個argnames,則argvalues必須是N元組的列表,其中每個tuple-element為其各自的argname指定一個值。
- indirect - argnames或boolean的列表。參數列表名稱(argnames的子集)。如果為True,則列表包含argnames中的所有名稱。對應于此列表中的argname的每個argvalue將作為request.param傳遞到其各自的argname fixture函數,以便它可以在測試的設置階段而不是在收集時執行更昂貴的設置。
- ids - 字符串ID列表或可調用的列表。如果字符串,則每個字符串對應于argvalues,以便它們是測試ID的一部分。如果將None作為特定測試的id給出,則將使用該參數的自動生成的id。如果是可調用的,它應該采用一個參數(單個argvalue)并返回一個字符串或返回None。如果為None,將使用該參數的自動生成的id。如果沒有提供id,它們將自動從argvalues生成。
-
范圍 - 如果指定,則表示參數的范圍。范圍用于按參數實例對測試進行分組。它還將覆蓋任何fixture函數定義的范圍,允許使用測試上下文或配置設置動態范圍。
|
pytest.mark.skip
教程:跳過測試功能。
無條件地跳過測試功能。
pytest.mark.``skip
(**,reason = None *)
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: | reason(str) - 跳過測試功能的原因。 |
pytest.mark.skipif
教程:跳過測試功能。
如果條件是,則跳過測試功能True
。
pytest.mark.``skipif
(條件,*,原因=無)
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: |
pytest.mark.usefixtures
教程:使用類,模塊或項目中的夾具。
將測試功能標記為使用給定的夾具名稱。
警告
應用于夾具功能時,該標記無效。
pytest.mark.``usefixtures
(*名稱)
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: | args - 要使用的fixture的名稱,作為字符串 |
pytest.mark.xfail
教程:XFail:將測試功能標記為預期失敗。
標記測試功能按預期失敗。
pytest.mark.``xfail
(condition = None,,reason = None,raises = None,run = True,strict = False *)
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: |
-
condition(bool或str) - 將測試函數標記為xfail(
True/False
或條件字符串)的 條件。 - reason(str) - 測試函數標記為xfail的原因。
- 引發(異常) - 期望由測試函數引發的異常子類; 其他例外將無法通過測試。
-
run(bool) - 如果實際應該執行測試功能。如果
False
,該函數將始終為xfail并且不會被執行(如果函數是segfaulting則很有用)。 -
嚴格(布爾) -
- 如果
False
(默認值),該功能將在終端輸出中顯示,就xfailed
好像它失敗一樣,就像xpass
它通過一樣。在這兩種情況下,這都不會導致測試套件整體失敗。這對于標記稍后要解決的片狀測試(隨機失敗的測試)特別有用。 - 如果
True
,該函數將在終端輸出中顯示為xfailed
失敗,但如果它意外通過則將使測試套件失敗。這對于標記始終失敗的函數特別有用,并且應該有明確的指示它們是否意外地開始通過(例如,庫的新版本修復了已知錯誤)。
|
- 如果
自定義標記
標記是使用工廠對象動態創建的,pytest.mark
并作為裝飾器應用。
例如:
@pytest.mark.timeout(10, "slow", method="thread")
def test_function():
...
將創建并附加一個Mark
對象到收集 Item
,然后可以通過固定裝置或鉤子訪問Node.iter_markers
。該mark
對象將具有以下屬性:
mark.args == (10, "slow")
mark.kwargs == {"method": "thread"}