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

python中Pytest常用的插件

 更新時間:2022年06月16日 14:37:15   作者:? 行者AI?  ?  
這篇文章主要介紹了python中Pytest常用的插件,Pytest是Python的一種單元測試框架,與unittest相比,使用起來更簡潔、效率更高,也是目前大部分使用python編寫測試用例的小伙伴們的第一選擇了

前言

除了框架本身提供的功能外,Pytest還支持上百種第三方插件,良好的擴(kuò)展性可以更好的滿足大家在用例設(shè)計(jì)時的不同需求。本文將為大家詳細(xì)介紹下面5項(xiàng)常用的插件。

1. 用例依賴

編寫用例的時候,我們會注意用例之間的獨(dú)立性,但部分用例之間確實(shí)存在關(guān)聯(lián),無法做到徹底獨(dú)立,那么我們就可以通過使用插件pytest-dependency設(shè)置用例之間的依賴關(guān)系。當(dāng)用例A依賴于用例B時,若用例B執(zhí)行失敗,則用例A將會自動跳過不執(zhí)行。如此,就可以避免去執(zhí)行一個必定會失敗的用例,相當(dāng)于pytest.mark.skip。

(1)安裝:

pip install pytest-dependency

(2)使用說明:

首先,在標(biāo)記被依賴用例時,需要在被依賴的用例上添加裝飾器pytest.mark.dependency(),且被依賴用例需要在關(guān)聯(lián)用例前執(zhí)行。也可以給被依賴用例設(shè)置別名,通過添加參數(shù)name實(shí)現(xiàn)。

在關(guān)聯(lián)的依賴用例上,同樣需要添加裝飾器pytest.mark.dependency(depends=['用例名稱']),與之前不同的是,裝飾器必須要填寫depends參數(shù)完成用例的關(guān)聯(lián),關(guān)聯(lián)的被依賴用例存在多個時可以使用“,”隔開。

此外,還可以通過scope參數(shù)指定用例依賴的范圍,同樣是session、package、module、class這四種類型,此處不詳細(xì)展開。

具體通過下方的示例以及執(zhí)行結(jié)果來進(jìn)一步說明。

(3)示例及執(zhí)行結(jié)果分析

示例:

import pytest
class TestCase:
    # 通過裝飾器@pytest.mark.dependency()標(biāo)記當(dāng)前用例為被依賴用例,被依賴用例需要優(yōu)先關(guān)聯(lián)用例執(zhí)行
    @pytest.mark.dependency()
    def test_01(self):
        print("測試用例01,執(zhí)行失敗")
        assert 1 == 2
    # 通過使用裝飾器關(guān)聯(lián)被依賴用例,通過depends參數(shù)指定用例名稱關(guān)聯(lián)用例
    @pytest.mark.dependency(depends=['test_01'])
    def test_02(self):
        print("測試用例02,跳過")
    # 標(biāo)記被依賴用例時,可以通過name參數(shù)指定別名
    @pytest.mark.dependency(name="func_2")
    def test_03(self):
        print("測試用例03,執(zhí)行成功!")
    # 使用depends參數(shù)指定定義的別名關(guān)聯(lián)用例
    @pytest.mark.dependency(depends=['func_2'])
    def test_04(self):
        print("測試用例04,執(zhí)行成功!")
    # depends參數(shù)可以關(guān)聯(lián)多個測試用例,使用“,”分隔即可
    @pytest.mark.dependency(depends=['test_01', 'func_2'])
    def test_05(self):
        print("測試用例05,跳過")
if __name__ == '__main__':
    pytest.main(['-vs'])

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

我們可以看出,只有依賴用例執(zhí)行成功時,當(dāng)前用例才會被執(zhí)行,否則會被跳過。依賴多個用例時,只有全部成功,才會執(zhí)行,否則一樣會跳過。

2. 失敗重跑

有些情況下,用例在執(zhí)行過程中可能會受到一些客觀因素的影響,導(dǎo)致用例執(zhí)行失敗,通過使用pytest-rerunfailures插件,可以在失敗后重新執(zhí)行用例,并設(shè)置重新運(yùn)行的最大次數(shù)。以此保證用例執(zhí)行結(jié)果的準(zhǔn)確性。

(1)安裝:

pip install pytest-rerunfailures

(2)使用說明:

失敗重跑共有兩種使用方式,分別是通過裝飾器執(zhí)行和命令行執(zhí)行。

使用裝飾器時,需要在用例上添加裝飾器pytest.mark.flaky(reruns=重新執(zhí)行最大次數(shù), reruns_delay=執(zhí)行間隔時間(單位:秒)),在執(zhí)行過程中,添加了裝飾器的用例在執(zhí)行失敗后會按照設(shè)置的次數(shù)和時間重新執(zhí)行。

通過在命令行執(zhí)行時,同樣需要指定"rerun"和"rerun-delay"兩個參數(shù)來實(shí)現(xiàn),如:pytest --reruns 重新執(zhí)行最大次數(shù) --reruns-delay 間隔時間。

注意:reruns是重新執(zhí)行的最大次數(shù),如果在達(dá)到這一數(shù)量前用例執(zhí)行成功,則不會繼續(xù)重跑,判斷用例執(zhí)行通過;否則執(zhí)行到最大次數(shù)后,用例仍失敗,則判斷用例執(zhí)行失敗。

具體通過下方的示例和執(zhí)行結(jié)果進(jìn)一步說明。

(3)示例及執(zhí)行結(jié)果分析

示例:

import pytest
import random
class TestCase:
    # 使用裝飾器設(shè)置用例失敗后的重新執(zhí)行最大次數(shù)和每次執(zhí)行的間隔時間(單位:秒)
    @pytest.mark.flaky(reruns=3, reruns_delay=1)
    def test_01(self):
        result = random.choice(['a', 'b', 'c', 'd', 'e'])
        print(f"result={result}")
        assert result == 'c'
if __name__ == '__main__':
    pytest.main(['-vs'])

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

我們可以看出,當(dāng)用例斷言失敗后,會重新執(zhí)行,直到達(dá)到設(shè)置的最大次數(shù)或執(zhí)行成功為止。

3. 指定用例執(zhí)行順序

pytest在執(zhí)行用例的時候,默認(rèn)是按照文件中用例的先后順序執(zhí)行,有時我們可能在維護(hù)測試用例時遇到需要修改用例執(zhí)行順序的情況,但是如果每次都通過修改大段的用例代碼先后位置來控制,并不利于維護(hù)。因此,使用插件pytest-ordering可以快速實(shí)現(xiàn)用例執(zhí)行順序的設(shè)置,后期維護(hù)時,也只需要修改對應(yīng)的執(zhí)行順序參數(shù)即可。

(1)安裝:

pip install pytest-ordering

(2)使用說明:

通過給用例添加裝飾器pytest.mark.run(order=執(zhí)行順序)設(shè)置用例的執(zhí)行順序。在執(zhí)行的時候,使用裝飾器pytest.mark.run的用例會優(yōu)先沒有裝飾器的用例執(zhí)行,設(shè)置了執(zhí)行順序的用例則按照order參數(shù)設(shè)置的大小升序執(zhí)行。

具體通過下方的示例和執(zhí)行結(jié)果進(jìn)一步說明。

(3)示例及執(zhí)行結(jié)果分析

示例:

import pytest
class TestCase:
    def test_01(self):
        print("測試用例01")
    def test_02(self):
        print("測試用例02")
    # 使用裝飾器設(shè)置執(zhí)行順序?yàn)?
    @pytest.mark.run(order=2)
    def test_03(self):
        print("測試用例03")
    # 使用裝飾器設(shè)置執(zhí)行順序?yàn)?
    @pytest.mark.run(order=1)
    def test_04(self):
        print("測試用例04")
if __name__ == "__main__":
    pytest.main(['-vs'])

執(zhí)行結(jié)果:

我們可以看出,執(zhí)行的順序和預(yù)期一致。優(yōu)先執(zhí)行標(biāo)明了執(zhí)行順序的用例,并按照order的值由小到大執(zhí)行。

4. 分布式運(yùn)行

當(dāng)項(xiàng)目的用例很多的時候,執(zhí)行通常會耗時頗久,通過分布式運(yùn)行,則可以大量縮短整體用例的執(zhí)行時間。pytest-xdist插件就可以幫助我們完成測試用例的分布式運(yùn)行。

(1)安裝:

pip install pytest-xdist

(2)使用說明:

在命令行執(zhí)行用例時,通過參數(shù)-n設(shè)置并行啟動的進(jìn)程數(shù)量。除了設(shè)置具體的數(shù)量外,還可以設(shè)置為auto,這種情況下,會依據(jù)當(dāng)前設(shè)備的cpu數(shù)量執(zhí)行。

此外,還可以通過--dist參數(shù),設(shè)置用例分組,同一個組內(nèi)的用例會在同一個進(jìn)程中執(zhí)行。

  • --dist=loadscope 同一個module或同一個class下的用例會分配為同一組,按class分組優(yōu)先于module。
  • --dist=loadfile 同一個.py文件中的用例會分配為同一組。

具體通過下方的示例和執(zhí)行結(jié)果進(jìn)一步說明。

(3)示例及執(zhí)行結(jié)果分析

示例:

import pytest
from time import sleep
class TestCase1:
    @pytest.mark.parametrize('keyword', ['a', 'b', 'c', 'd', 'e',                                        'f', 'g', 'h', 'i', 'j'])
    def test_baidu_search(self, keyword):
        sleep(1)
        print(f'搜索關(guān)鍵字{keyword}')
class TestCase2:
    @pytest.mark.parametrize('user', ['user1', 'user2', 'user3', 'user4', 'user5',                                    'user6', 'user7', 'user8', 'user9', 'user10'])    def test_login(self, user):
        sleep(1)
        print(f'用戶{user}登錄成功')
if __name__ == '__main__':
    # pytest.main(['-vs']) # 不使用pytest-xdist運(yùn)行
    pytest.main(['-vs', '-n', '2']) # 使用pytest-xdist運(yùn)行

執(zhí)行結(jié)果:

從上方的兩次執(zhí)行結(jié)果中可以看出,使用分布式運(yùn)行后,用例的運(yùn)行時間明顯縮短。示例中的用例彼此之間沒有關(guān)聯(lián),如果實(shí)際使用時用例之間存在依賴關(guān)系,可以使用--dist參數(shù)為用例分組,確保關(guān)聯(lián)的用例在同一組內(nèi)。

5. 多重?cái)嘌?/h2>

有時,在一個用例中,我們需要對結(jié)果進(jìn)行不同維度的多個斷言,但是使用assert斷言時,只要有一個斷言失敗,后續(xù)的斷言就不會繼續(xù)執(zhí)行?,F(xiàn)在,我們可以通過使用pytest-assume插件來解決這個問題,當(dāng)斷言失敗后,仍會繼續(xù)執(zhí)行后續(xù)的斷言。

(1)安裝:

pip install pytest-assume

(2)使用說明:

在用例中,把使用assert進(jìn)行的斷言,改為使用pytest.assume()進(jìn)行斷言即可。

具體通過下方的示例和執(zhí)行結(jié)果進(jìn)一步說明。

(3)示例及執(zhí)行結(jié)果分析

示例:

import pytest
class TestCase:
    # 使用assert斷言
    def test_01(self):
        print("斷言1")
        assert 1 == 1
        print('斷言2')
        assert 2 == 1
        print("斷言3")
        assert 3 == 3
        print('用例結(jié)束')
    # 使用pytest.assume()斷言
    def test_02(self):
        print('斷言1')
        pytest.assume(1 == 1)
        print('斷言2')
        pytest.assume(2 == 1)
        print('斷言3')
        pytest.assume(3 == 3)
        print('用例結(jié)束')
if __name__ == '__main__':
    pytest.main(['-vs'])

執(zhí)行結(jié)果:

從執(zhí)行結(jié)果中可以看出,使用assert斷言時,斷言失敗不會再執(zhí)行后續(xù)的內(nèi)容;而使用pytest.assume()斷言時,斷言失敗仍會執(zhí)行至用例結(jié)束。這樣更有利于我們一次性獲取用例執(zhí)行中全部錯誤信息。

6. 小結(jié)

本文為大家介紹了一些常用的pytest框架的插件,可以幫助我們解決一些實(shí)際使用過程中遇到的問題。目前,pytest支持的插件已經(jīng)多達(dá)868個,除了本文介紹的5個常用插件外,還有很多支持其它需求的插件,大家可以根據(jù)自己的需要嘗試查找使用相關(guān)的插件,以便能夠更好的設(shè)計(jì)出符合業(yè)務(wù)場景的測試用例。

到此這篇關(guān)于python中Pytest常用的插件的文章就介紹到這了,更多相關(guān)python Pytest 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python使用functools實(shí)現(xiàn)注解同步方法

    Python使用functools實(shí)現(xiàn)注解同步方法

    這篇文章主要介紹了Python使用functools實(shí)現(xiàn)注解同步方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 詳解在OpenCV中如何使用圖像像素

    詳解在OpenCV中如何使用圖像像素

    像素是計(jì)算機(jī)視覺中圖像的重要屬性。它們是表示圖像中特定空間中光的顏色強(qiáng)度的數(shù)值,是圖像中數(shù)據(jù)的最小單位。本文將詳細(xì)為大家介紹如何在OpenCV中使用圖像像素,感興趣的可以了解一下
    2022-03-03
  • python里運(yùn)用私有屬性和方法總結(jié)

    python里運(yùn)用私有屬性和方法總結(jié)

    在本文里我們給大家分享了關(guān)于python里運(yùn)用私有屬性和方法總結(jié)以及相關(guān)知識點(diǎn)內(nèi)容,有興趣的朋友們跟著參考學(xué)習(xí)下。
    2019-07-07
  • python數(shù)據(jù)預(yù)處理 :數(shù)據(jù)共線性處理詳解

    python數(shù)據(jù)預(yù)處理 :數(shù)據(jù)共線性處理詳解

    今天小編就為大家分享一篇python數(shù)據(jù)預(yù)處理 :數(shù)據(jù)共線性處理詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python迭代器、生成器、協(xié)程使用方式

    Python迭代器、生成器、協(xié)程使用方式

    這篇文章主要介紹了Python迭代器、生成器、協(xié)程使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python3.8安裝tensorflow的簡單方法步驟

    Python3.8安裝tensorflow的簡單方法步驟

    最近想要研究一下深度學(xué)習(xí)的應(yīng)用,于是翻了翻了社區(qū)的tensorflow安裝教程,所以下面這篇文章主要給大家介紹了關(guān)于Python3.8安裝tensorflow的簡單方法步驟,需要的朋友可以參考下
    2022-06-06
  • python連接kafka加載數(shù)據(jù)的項(xiàng)目實(shí)踐

    python連接kafka加載數(shù)據(jù)的項(xiàng)目實(shí)踐

    本文主要介紹了python連接kafka加載數(shù)據(jù)的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • PyTorch深度學(xué)習(xí)LSTM從input輸入到Linear輸出

    PyTorch深度學(xué)習(xí)LSTM從input輸入到Linear輸出

    這篇文章主要為大家介紹了PyTorch深度學(xué)習(xí)LSTM從input輸入到Linear輸出深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 在Pandas中更改DataFrame中的值

    在Pandas中更改DataFrame中的值

    這篇文章主要介紹了在Pandas中更改DataFrame中的值方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python 內(nèi)置變量和函數(shù)的查看及說明介紹

    Python 內(nèi)置變量和函數(shù)的查看及說明介紹

    今天小編就為大家分享一篇Python 內(nèi)置變量和函數(shù)的查看及說明介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評論