1. 程式人生 > 其它 >Pytest之自定義mark

Pytest之自定義mark

一個完整的專案,測試用例比較多,比如我們想將某些用例用來做冒煙測試,那該怎麼辦呢?pytest中可以自定義配置檔案,用例按照指定的方式去執行。

配置檔案

定義配置檔名

在專案根目錄下,建立一個檔案:pytest.ini(固定名稱,不要修改)。

配置檔案格式
pytest.ini

[pytest]
markers =
    demo: just for demo
    smoke

① 案例一:

之前在講解用例被標記為@pytest.mark.xfail時,如果用例執行通過,顯示XPASS。

test_demo.py

@pytest.mark.xfail()
def test_demo02():
    print("這是test_demo02")
    assert 1 == 1

在配置檔案中未配置xfail_strict = True時,執行結果如下:

在pytest.ini 中加上xfail_strict = True配置後

執行結果為:

② 案例二:addopts

addopts引數可以更改預設命令列選項,省去手動敲命令列引數。

比如命令列想輸出詳細資訊、分散式執行或最大失敗次數,每次敲命令很麻煩,在配置裡設定,以後命令直接輸入pytest即可。

現有如下用例:

test_demo.py

def test_demo01():
    print("這是test_demo01")
    assert 1 == 2
def test_demo02():
    print("這是test_demo02")

如果需要輸出資訊更詳細、輸出除錯資訊及用例執行錯誤時立即退出,那麼配置如下:

[pytest]
markers =
    demo: just for demo
    smoke
addopts = -v -s -x

命令列輸入:pytest

輸出結果為:

測試用例執行實戰

比如我想從眾多用例中挑選出部分用例,作為冒煙測試用例,怎麼配置呢?

pytest.ini

[pytest]
markers =
    demo: just for demo
    smoke

  

其中smoke為標籤,用例前加上標籤名smoke,即都屬於冒煙測試用例。

模組級別

在模組里加上標籤,那麼該模組下的類、方法或函式都會帶上標籤。

test_demo.py

import pytest
pytestmark = pytest.mark.smoke
class TestDemo:
    def test_demo01(self):
        print("這是test_demo01")
    def test_demo02(self):
        print("這是test_demo02")
    def test_demo03(self):
        print("這是test_demo03")

命令列輸入:pytest -v -m smoke

輸出結果為:

類級別

在類上新增標籤,則類下的所有方法都帶上標籤

test_demo.py

import pytest
@pytest.mark.smoke
class TestDemo:
    def test_demo01(self):
        print("這是test_demo01")
    def test_demo02(self):
        print("這是test_demo02")
    def test_demo03(self):
        print("這是test_demo03")
def test_demo04():
    print("這是test_demo04")

在命令列輸入:pytest -v -m smoke test_demo.py

函式級別

在函式上新增標籤,那麼此函式帶上標籤。

test_demo.py

import pytest
class TestDemo:
    def test_demo01(self):
        print("這是test_demo01")
    def test_demo02(self):
        print("這是test_demo02")
    def test_demo03(self):
        print("這是test_demo03")
@pytest.mark.smoke
def test_demo04():
    print("這是test_demo04")

命令列輸入:pytest -v -m smoke test_demo.py

輸出結果為: