Pytest 為測試增加標記

2021-10-01 06:51:32 字數 2313 閱讀 2367

pytest 中有乙個很有用的功能,就是為測試用例(測試函式,以後我們都把測試函式直接成為測試用例)新增標記的功能.

乙個測試用例可以新增多個標記,乙個標記可以新增給多個用例,執行時可以通過-m引數快速選擇被標記的用例。

比如我們經常需要做冒煙測試或 bvt 測試,而在這類測試的時候往往並不會執行所有測試用例。

大家也都知道冒煙測試是用來驗證主要流程、主要功能的正確性,為了突出快速的特性一般會針對性的選取一部分用例來執行。另外 bvt 測試,線上巡檢等各種自動化測試場景中都需要根據情況選取不同的用例。但是如果僅僅通過資料夾、模組名等方式來區分顯得捉襟見肘,而且可能會導致在命名要求上過於複雜。這時候我們就可以使用不同的 mark 來標記我們的測試用例。

mark 是 pytest 提供的乙個裝飾器,用法為:

import pytest

@pytest.mark.標記 # => 標記名稱可以任意取

deftest_case()

: do_some_test

if __name__ ==

'__main__'

: pytest.main(

['-m 標記'

])

標記的名稱你可以任意取名,後面通過-m 標記來獲取對應標記的用例。

比如,我們可以命名為:somke 冒煙測試bvt bvt測試等等,應用於不同的測試場景。

import pytest

defadd

(a, b)

:return a + b

@pytest.mark.bvt # 這裡新增了乙個標記

deftest_str()

:"""測試字串"""

a, b =

'1',

'2'assert add(a, b)

=='112'

@pytest.mark.bvt # => 這裡新增了兩個標記

@pytest.mark.smoke

deftest_int()

:"""測試整型"""

a, b =1,

2assert add(a, b)

==3

上面的**中,我們將test_str用例加了bvt標記,而test_int新增了兩個標記bvtsmoke

如果你使用下面的命令進行嘗試,記得帶上-v引數,這樣才能看到執行的用例名稱。

通過命令執行:

pytest -m bvt  # => 可以找到兩個用例

pytest -m smoke # => 只能找到 test_str

如果你想同時指定帶多個標記的用例,你可以使用邏輯符號andornot,比如:

pytest -m "bvt or smoke"

# => 帶兩種標記的都能找到

pytest -m "bvt and smoke"

# => 只能找到同時帶兩種標記的用例

pytest -m "bvt and not smoke"

# => 還可以用not排除某種標記的

注意,一定要用雙引號

在之前的文章也提到過,雖然我們可以任意定義標記且能夠生效,但是會有乙個警告資訊:

最簡單的方法是在 pytest 的配置檔案配置這些標記。在測試目錄(pytest 查詢起始目錄)下新建乙個pytest.ini,這是乙個文字檔案,並加入如下內容。

[pytest]

markers=smoke:冒煙測試用例

bvt: bvt 測試用例

online: 正式環境執行的用例

這樣相當於告訴 pytest 哪些標記是我們定義的,就不會出現警告資訊了。

感受一下,是不是有了標記之後在各種測試場景下選取對應的用例就變得非常的靈活了?

這也是為什麼你看到用 pytest 框架寫的用例那麼多的裝飾器了,?。

PYTEST中對測試用例標記執行

標記三種方式 1 顯式指定函式名,通過 標記 pytest test.py test012 模糊查詢,使用 k標識 pytest k test test.py3 使用pytest.mark在函式上標記 建立pytest.ini檔案 注意縮排 pytest markers do do undo und...

pytest韌體功能測試

例項1 conftest.py pytest.fixture def fun1 print run func1 yield print func1 done pytest.fixture def fun2 print run func2 yield print func2 done test db....

pytest學習 基礎測試

import pytest 安裝pytest pip install pytest 檢視pytest版本 pytest version pytest引數幫助 pytest h help pytest遵循其python測試發現約定來發現所有測試 因此它會找到兩個帶test 字首的函式 且無需繼承任何子...