Pytest 爲測試增加標記

Pytest 中有一個很有用的功能,就是爲測試用例(測試函數,以後我們都把測試函數直接成爲測試用例)添加標記的功能.

一個測試用例可以添加多個標記,一個標記可以添加給多個用例,運行時可以通過-m參數快速選擇被標記的用例。

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

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

mark 是 pytest 提供的一個裝飾器,用法爲:

import pytest

@pytest.mark.標記   # => 標記名稱可以任意取
def test_case():
	do_some_test

if __name__ == '__main__':
    pytest.main(['-m 標記'])

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

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

import pytest

def add(a, b):
    return a + b

@pytest.mark.bvt  # 這裏添加了一個標記
def test_str():
    """測試字符串"""
    a, b = '1', '2'
    assert add(a, b) == '112'

@pytest.mark.bvt   # => 這裏添加了兩個標記
@pytest.mark.smoke
def test_int():
    """測試整型"""
    a, b = 1, 2
    assert 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 框架寫的用例那麼多的裝飾器了,🙂。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章