小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

解鎖 Pytest 自動(dòng)化測(cè)試框架 conftest 使用技巧:助力高質(zhì)量測(cè)試!

 測(cè)試開(kāi)發(fā)技術(shù) 2024-12-12 發(fā)布于廣東


在Python的測(cè)試框架pytest中,conftest.py是一個(gè)特殊的文件,它允許你定義一些在多個(gè)測(cè)試文件或測(cè)試類(lèi)中共享的fixture,鉤子函數(shù)和插件。它是pytest的核心組成部分,提供了極大的靈活性和便利性。本文將會(huì)帶你深入了解conftest.py的精髓,包括其是什么、用途、使用方法和高級(jí)示例。

1、conftest.py是什么?

conftest.py是一個(gè)pytest的特殊文件,它位于項(xiàng)目的根目錄下或者測(cè)試目錄中,當(dāng)pytest運(yùn)行測(cè)試時(shí),會(huì)自動(dòng)尋找并加載該文件。你可以在conftest.py中定義一些全局的配置、fixture、鉤子函數(shù)或其他工具函數(shù)等,這些都可以在整個(gè)測(cè)試套件中被共享和重用。這種機(jī)制使得你可以將一些公共的、可復(fù)用的測(cè)試設(shè)置和邏輯集中管理,提高了代碼的復(fù)用性和可維護(hù)性。

2、conftest.py的常見(jiàn)用途

  • 定義全局配置:我們可以在conftest.py中設(shè)置一些全局的配置,比如添加標(biāo)記、設(shè)置默認(rèn)參數(shù)等。

  • 定義fixtures:我們可以在conftest.py中定義一些常用的fixtures,這些fixtures可以在測(cè)試用例中直接使用,無(wú)需重復(fù)定義。

  • 定義工具函數(shù):我們可以在conftest.py中定義一些工具函數(shù),這些函數(shù)可以在測(cè)試用例中直接調(diào)用,提高了代碼的復(fù)用性。

  • 定義鉤子函數(shù):pytest提供了許多鉤子函數(shù),允許你在測(cè)試的不同階段執(zhí)行自定義的代碼。在conftest.py中定義的鉤子函數(shù)可以在整個(gè)測(cè)試套件中生效。

  • 插件擴(kuò)展:conftest.py也可以用來(lái)定義和注冊(cè)pytest插件,這為你提供了更多的自定義和擴(kuò)展pytest功能的可能性。

3、conftest.py的使用用法

編寫(xiě) Pytest Conftest 文件非常簡(jiǎn)單,只需在項(xiàng)目中創(chuàng)建一個(gè)名為 conftest.py 的 Python 文件,并在其中編寫(xiě)配置、夾具和插件注冊(cè)的代碼。以下是一個(gè)簡(jiǎn)單的示例:

# conftest.py

import pytest

@pytest.fixture
def setup():
    print("Setting up test environment")
    yield
    print("Tearing down test environment")

def pytest_configure(config):
    config.addinivalue_line("markers""custom_marker: custom marker for tests")

在這個(gè)示例中,我們定義了一個(gè)名為 setup 的夾具,用于設(shè)置和清理測(cè)試環(huán)境。同時(shí),我們還通過(guò) pytest_configure 函數(shù)注冊(cè)了一個(gè)自定義的標(biāo)記(marker)用于標(biāo)記測(cè)試用例。

1、定義fixture

在conftest.py中定義fixture,你可以使用@pytest.fixture裝飾器。例如:

# conftest.py  
import pytest  
  
@pytest.fixture  
def my_fixture():  
    return "Hello, pytest!"

然后,在你的測(cè)試文件中,你可以使用my_fixture這個(gè)fixture:

# test_example.py  
def test_example(my_fixture):  
    assert my_fixture == "Hello, pytest!"

2、定義鉤子函數(shù)

你可以使用pytest提供的鉤子函數(shù)名稱(chēng)作為函數(shù)名,pytest會(huì)在適當(dāng)?shù)臅r(shí)機(jī)調(diào)用這些函數(shù)。例如,你可以在conftest.py中定義pytest_configure鉤子函數(shù),它在pytest開(kāi)始收集測(cè)試之前被調(diào)用:

# conftest.py  
def pytest_configure(config):  
    print("pytest is starting...")

4、高級(jí)示例

除了基本的用法外,Pytest Conftest 還支持一些高級(jí)用法,如:

參數(shù)化夾具:可以通過(guò)參數(shù)化夾具實(shí)現(xiàn)更靈活的測(cè)試數(shù)據(jù)生成。例如:

import pytest

@pytest.fixture(params=[1, 2, 3])
def param_fixture(request):
    return request.param

夾具之間的依賴(lài)關(guān)系:可以通過(guò)夾具之間的調(diào)用和傳參建立依賴(lài)關(guān)系。例如:

import pytest

@pytest.fixture
def login():
    user = User()
    user.login()
    yield user
    user.logout()

@pytest.fixture
def profile(login):
    return login.get_profile()

自定義插件:可以編寫(xiě)自定義插件并在 Conftest 文件中注冊(cè)。例如:

import pytest

class CustomPlugin:
    def pytest_runtest_setup(self, item):
        print("Running setup for test:", item.name)

pytest_plugins = ["custom_plugin"]

下面是一個(gè)更高級(jí)的例子,展示了如何在conftest.py中使用作用域(scope)和參數(shù)化(parametrize)來(lái)定義更復(fù)雜的fixture。

# conftest.py  
import pytest  
  
@pytest.fixture(scope="module")  
def data():  
    return [123]  
  
@pytest.fixture(scope="function", params=[1, 2])  
def param_fixture(request):  
    return request.param

在這個(gè)例子中,data fixture的作用域被設(shè)置為"module",這意味著它只會(huì)在每個(gè)測(cè)試模塊開(kāi)始時(shí)創(chuàng)建一次,并在整個(gè)模塊中共享。而param_fixture的作用域被設(shè)置為"function",并且使用了參數(shù)化,這意味著它會(huì)為每個(gè)測(cè)試函數(shù)創(chuàng)建新的實(shí)例,并且這些實(shí)例會(huì)帶有不同的參數(shù)值。

然后,你可以在你的測(cè)試文件中這樣使用這些fixture:

# test_example.py  
def test_data(data):  
    assert len(data) == 3  
  
def test_param_fixture(param_fixture):  
    assert param_fixture in [12]

在這個(gè)測(cè)試文件中,test_data函數(shù)使用了data fixture,而test_param_fixture函數(shù)則使用了param_fixture fixture。由于param_fixture是參數(shù)化的,所以test_param_fixture函數(shù)實(shí)際上會(huì)被執(zhí)行兩次,一次傳入?yún)?shù)1,一次傳入?yún)?shù)2。

通過(guò)這些高級(jí)示例,可以更加靈活地利用 Pytest Conftest 來(lái)管理測(cè)試資源和擴(kuò)展測(cè)試框架的功能。

總的來(lái)說(shuō),conftest.py為pytest提供了強(qiáng)大的配置和擴(kuò)展能力,使得你可以更靈活地組織和管理你的測(cè)試代碼。通過(guò)深入理解和熟練掌握conftest.py的使用,你可以寫(xiě)出更高效、更可維護(hù)的測(cè)試代碼。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多