欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入了解Python中Pytest Markers的使用方法

 更新時間:2023年09月05日 09:06:56   作者:郝同學(xué)的測開筆記  
從這篇開始,逐一解決fixture是啥,mark是啥,參數(shù)request是啥,鉤子函數(shù)是啥,parametrize參數(shù)化是啥,這些問題,本片先介紹一下mark是啥,以及如何使用

Markers有啥用?

當(dāng)使用 Pytest 運行測試時,可以通過標(biāo)記(Markers)來為測試函數(shù)或類添加自定義的元數(shù)據(jù)。標(biāo)記可以用于對測試進行分類、過濾和定制化。

查看所有Markers

pytest --markers

常用的內(nèi)置標(biāo)記

內(nèi)置標(biāo)記(Built-in Markers): Pytest 提供了一些內(nèi)置的標(biāo)記,用于常見的測試場景。一些常用的內(nèi)置標(biāo)記包括:

  • @pytest.mark.skip: 標(biāo)記該測試為跳過;
  • @pytest.mark.parametrize: 標(biāo)記該測試使用參數(shù)化,可以為測試函數(shù)指定多組參數(shù);
  • @pytest.mark.xfail: 標(biāo)記該測試為預(yù)期失??;
  • @pytest.mark.skipif: 根據(jù)條件動態(tài)地跳過某個測試。
  • @pytest.mark.timeout:為測試用例設(shè)置運行超時時間。

@pytest.mark.skip

可以設(shè)置一個可選參數(shù)reason,表明跳過的原因

import pytest
?
@pytest.mark.skip()
def test_01():
 ? ?pass

未增加跳過原因,輸出內(nèi)容為

test_demo.py::test_01 SKIPPED (unconditional skip)                       [100%]
Skipped: unconditional skip

我們增加跳過原因,看看輸出結(jié)果

import pytest
?
@pytest.mark.skip(reason='skip reason')
def test_01():
 ? ?pass

執(zhí)行輸出結(jié)果如下

test_demo.py::test_01 SKIPPED (skip reason) [100%] Skipped: skip reason

可以看到會直接顯示具體原因。

pytest.skip方法

這里我們順帶提一下這個方法。可以在測試執(zhí)行期間強制跳過

def test_01():
 ? ?pytest.skip(reason="skip reason")

另外,還可以為其設(shè)置一個布爾型的參數(shù)allow_module_level(默認(rèn)為False),表明是否允許在模塊中調(diào)用這種方法,如果置為True,則跳過模塊中剩余的部分,也就是說其值為True時這個模塊中所有測試方法都被跳過。

import sys
import pytest
?
if not sys.platform.startswith("darwin"):
 ?pytest.skip("如果不是mac,跳過",allow_module_level = True)

注意:如果是在用例中設(shè)置allow_module_level為True,并不會跳過模塊中剩余的用例

@pytest.mark.skipif

帶條件的跳過執(zhí)行:滿足條件就跳過,不滿足條件就不跳過

import pytest
?
env = 'iOS'
?
@pytest.mark.skipif('env == "iOS"', reason="iOS不支持")
def test_01():
 ? ?pass

當(dāng)然也可以使用多條標(biāo)記

import pytest
import sys
?
env = 'iOS1'
?
?
@pytest.mark.skipif('env == "iOS"', reason="iOS不支持")
@pytest.mark.skipif(sys.version_info<(3,12), reason="3.12以下版本不支持")
def test_01():
 ? ?pass

可以看到第一個條件不滿足,我電腦的版本為3.8,第二個條件滿足,最終case跳過。

注意:當(dāng)一個用例指定了多個skipif條件時,只需滿足其中一個,就可以跳過這個用例的執(zhí)行。

當(dāng)然也可以在一個文件中定義所有的條件,需要時引入即可

import pytest
import sys
?
version = pytest.mark.skipif(sys.version_info<(3,12), reason="3.12以下版本不支持")
?
@version
def test_01():
 ? ?pass

這里不存在pytest.skipif()方法

@pytest.mark.xfail

表示期望這個用例執(zhí)行失敗。用例會正常執(zhí)行,只是失敗時不再顯示堆棧信息,最終的結(jié)果有兩個:用例執(zhí)行失?。╔FAIL:符合預(yù)期的失?。⒂美龍?zhí)行成功(XPASS:不符合預(yù)期的成功)。也就是說執(zhí)行成功反倒不正確了。

import pytest
?
@pytest.mark.xfail(reason = '預(yù)期失敗')
def test_01():
 ? ?assert 1 == 2

運行結(jié)果

test_demo.py::test_01 XFAIL (預(yù)期失敗) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [100%]
@pytest.mark.xfail(reason = '預(yù)期失敗')
 ?  def test_01():
> ? ? ? assert 1 == 2
E ? ? ? assert 1 == 2
?
test_demo.py:5: AssertionError
?

如果斷言改成1 != 2,該用例會執(zhí)行成功,本來標(biāo)記該功能有bug,但是斷言成功了,說明斷言或者功能有問題,此時會標(biāo)記為XPASS

當(dāng)然也可以增加條件

import pytest
import sys
?
@pytest.mark.xfail(sys.version_info<(3,12), reason = '預(yù)期失敗')
def test_01():
 ? ?assert 1 != 2

如果我們想要將XPASS標(biāo)記的記為失敗,可以使用strict參數(shù)

strict為關(guān)鍵字參數(shù),默認(rèn)值為False。當(dāng)strict=False時,如果用例執(zhí)行失敗,則結(jié)果標(biāo)記為XFAIL,表示符合預(yù)期的失敗。如果用例執(zhí)行成功,則結(jié)果標(biāo)記為XPASS,表示不符合預(yù)期的成功。當(dāng)strict=True時,如果用例執(zhí)行成功,則結(jié)果將標(biāo)記為FAILED,而不再標(biāo)記為XPASS。

也可以直接在pytest.ini文件中配置

[pytest]
xfail_strict = true

如果想要將標(biāo)記為XFAIL的用例不再執(zhí)行,包含run參數(shù)。run為關(guān)鍵字參數(shù),默認(rèn)值為True。當(dāng)run=False時,pytest不會再執(zhí)行測試用例,而直接將結(jié)果標(biāo)記為XFAIL。

import pytest
?
@pytest.mark.xfail(reason = '預(yù)期失敗', run=False)
def test_01():
 ? ?assert 1 == 2

執(zhí)行發(fā)現(xiàn),會帶[NOTRUN]

raises為關(guān)鍵字參數(shù),默認(rèn)值為None??梢灾付橐粋€異常類或者多個異常類的元組,表明我們期望用例上報指定的異常。pytest.mark.xfail()也可以接收一個raises參數(shù),用來判斷用例是否因為一個具體的異常而導(dǎo)致失敗

xfail標(biāo)記如何失效

通過--runxfail參數(shù)讓xfail標(biāo)記失效。通過命令行選項pytest --runxfail讓xfail標(biāo)記失效,使這些用例變成正常執(zhí)行的用例,仿佛沒有被標(biāo)記過一樣。同樣,pytest.xfail()方法也將失效。

@pytest.mark.parametrize

參數(shù)化內(nèi)容比較多,準(zhǔn)備專門寫一篇來介紹。

自定義標(biāo)記

標(biāo)記用例,在命令行通過-m運行指定標(biāo)記的用例

test_demo.py

import pytest
?
@pytest.mark.p0
def test_01():
 ? ?assert 1 != 2
?
?
@pytest.mark.p1
def test_02():
 ? ?assert 1 != 2

運行所有:pytest -v test_demo.py

運行p0pytest -v -m 'p0' test_demo.py

運行p0/p1pytest -v -m 'p0 and p1' test_demo.py

執(zhí)行后,會發(fā)現(xiàn)有警告信息PytestUnknownMarkWarning,你可以忽略。想要解決的話,也可以在配置文件中配置自定義的標(biāo)記,配置后警告信息會消失。

pytest.ini

[pytest]
markers =
 ? ?p0: 冒煙
 ? ?p1: 功能

再次執(zhí)行,會發(fā)現(xiàn)已經(jīng)沒有警告信息了。

當(dāng)然也可以像這樣反向運行,運行不是p0的測試用例:pytest -v -m 'not p0' test_demo.py

自定義標(biāo)記可以通過 pytest_configure(config)鉤子 函數(shù)在配置階段添加。下面是一個自定義標(biāo)記的例子:

def pytest_configure(config):
 ? ?config.addinivalue_line(
 ? ? ? ?'markers',
 ? ? ? ?'repeat(n): run the given test function `n` times.')
?

在上面的例子中,我們定義了一個自定義標(biāo)記 repeat,并將其添加到 pytest_configure() 函數(shù)中。然后,我們可以在測試函數(shù)上使用 @pytest.mark.repeat 標(biāo)記來標(biāo)記需要重復(fù)執(zhí)行的測試用例。

最后

通過使用標(biāo)記,我們可以更靈活地控制測試的行為,并根據(jù)需要對不同類型的測試進行分類、過濾和定制化處理。

以上就是深入了解Python中Pytest Markers的使用方法的詳細(xì)內(nèi)容,更多關(guān)于Python Pytest Markers使用的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python將Office文檔(Word、Excel、PDF、PPT)轉(zhuǎn)為OFD格式的實現(xiàn)方法

    Python將Office文檔(Word、Excel、PDF、PPT)轉(zhuǎn)為OFD格式的實現(xiàn)方法

    OFD(Open Fixed-layout Document )是我國自主制定的一種開放版式文件格式標(biāo)準(zhǔn),如果想要通過Python將Office文檔(如Word、Excel或PowerPoint)及PDF文檔轉(zhuǎn)換為OFD格式,可以參考本文中提供的實現(xiàn)方法,需要的朋友可以參考下
    2024-06-06
  • 100 個 Python 小例子(練習(xí)題二)

    100 個 Python 小例子(練習(xí)題二)

    這篇文章主要繼續(xù)上一篇文章100 個 Python 小例子(練習(xí)題一)來完成100 個 Python 小例子,本文包括字母識詞、反向輸出II、表轉(zhuǎn)字符串、設(shè)置輸出顏色、算素數(shù)等例子,需要的朋友可以參考一下
    2021-10-10
  • Python元組拆包和具名元組解析實例詳解

    Python元組拆包和具名元組解析實例詳解

    這篇文章主要介紹了Python元組拆包和具名元組解析,下面的內(nèi)容就圍繞元組作為數(shù)據(jù)記錄屬性展開,并介紹帶字段名的具名元組函數(shù)namedtuple,列表屬性不再本文中敘述。
    2018-03-03
  • Pytorch基本變量類型FloatTensor與Variable用法

    Pytorch基本變量類型FloatTensor與Variable用法

    今天小編就為大家分享一篇Pytorch基本變量類型FloatTensor與Variable用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python re庫的正則表達(dá)式入門學(xué)習(xí)教程

    python re庫的正則表達(dá)式入門學(xué)習(xí)教程

    這篇文章主要給大家介紹了關(guān)于python re庫的正則表達(dá)式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Python字符串處理的8招秘籍(小結(jié))

    Python字符串處理的8招秘籍(小結(jié))

    這篇文章主要介紹了Python字符串處理的8招秘籍,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python xml、字典、json、類四種數(shù)據(jù)類型如何實現(xiàn)互相轉(zhuǎn)換

    Python xml、字典、json、類四種數(shù)據(jù)類型如何實現(xiàn)互相轉(zhuǎn)換

    這篇文章主要介紹了Python xml、字典、json、類四種數(shù)據(jù)類型如何實現(xiàn)互相轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • python簡單實現(xiàn)矩陣的乘,加,轉(zhuǎn)置和逆運算示例

    python簡單實現(xiàn)矩陣的乘,加,轉(zhuǎn)置和逆運算示例

    這篇文章主要介紹了python簡單實現(xiàn)矩陣的乘,加,轉(zhuǎn)置和逆運算,結(jié)合實例形式分析了Python針對矩陣的乘,加,轉(zhuǎn)置和求逆等運算相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-07-07
  • 使用Pandas操作Excel文件的技巧與方法分享

    使用Pandas操作Excel文件的技巧與方法分享

    今天接到一個需求,需要讀取excel,將其中兩列分別作為字典的key、value進行保存,怎么讀取excel呢,之前好像使用過Pandas,但是接觸不多,借此機會記錄一下學(xué)習(xí)的收獲,需要的朋友可以參考下
    2023-12-12
  • Python之print函數(shù)里逗號和加號的區(qū)別及說明

    Python之print函數(shù)里逗號和加號的區(qū)別及說明

    這篇文章主要介紹了Python之print函數(shù)里逗號和加號的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評論