解锁 Pytest 自动化测试框架 conftest 使用技巧:助力高质量测试!

📝 面试求职: 「面试试题小程序」内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


在Python的测试框架pytest中,conftest.py是一个特殊的文件,它允许你定义一些在多个测试文件或测试类中共享的fixture,钩子函数和插件。它是pytest的核心组成部分,提供了极大的灵活性和便利性。本文将会带你深入了解conftest.py的精髓,包括其是什么、用途、使用方法和高级示例。

1、conftest.py是什么?

conftest.py是一个pytest的特殊文件,它位于项目的根目录下或者测试目录中,当pytest运行测试时,会自动寻找并加载该文件。你可以在conftest.py中定义一些全局的配置、fixture、钩子函数或其他工具函数等,这些都可以在整个测试套件中被共享和重用。这种机制使得你可以将一些公共的、可复用的测试设置和逻辑集中管理,提高了代码的复用性和可维护性。

2、conftest.py的常见用途

定义全局配置:我们可以在conftest.py中设置一些全局的配置,比如添加标记、设置默认参数等。

定义fixtures:我们可以在conftest.py中定义一些常用的fixtures,这些fixtures可以在测试用例中直接使用,无需重复定义。

定义工具函数:我们可以在conftest.py中定义一些工具函数,这些函数可以在测试用例中直接调用,提高了代码的复用性。

定义钩子函数:pytest提供了许多钩子函数,允许你在测试的不同阶段执行自定义的代码。在conftest.py中定义的钩子函数可以在整个测试套件中生效。

插件扩展:conftest.py也可以用来定义和注册pytest插件,这为你提供了更多的自定义和扩展pytest功能的可能性。

3、conftest.py的使用用法

编写 Pytest Conftest 文件非常简单,只需在项目中创建一个名为 conftest.py 的 Python 文件,并在其中编写配置、夹具和插件注册的代码。以下是一个简单的示例:

# 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")

在这个示例中,我们定义了一个名为 setup 的夹具,用于设置和清理测试环境。同时,我们还通过 pytest_configure 函数注册了一个自定义的标记(marker)用于标记测试用例。

1、定义fixture:

在conftest.py中定义fixture,你可以使用@pytest.fixture装饰器。例如:

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

然后,在你的测试文件中,你可以使用my_fixture这个fixture:

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

2、定义钩子函数:

你可以使用pytest提供的钩子函数名称作为函数名,pytest会在适当的时机调用这些函数。例如,你可以在conftest.py中定义pytest_configure钩子函数,它在pytest开始收集测试之前被调用:

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

4、高级示例

除了基本的用法外,Pytest Conftest 还支持一些高级用法,如:

参数化夹具:可以通过参数化夹具实现更灵活的测试数据生成。例如:

import pytest

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

夹具之间的依赖关系:可以通过夹具之间的调用和传参建立依赖关系。例如:

import pytest

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

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

自定义插件:可以编写自定义插件并在 Conftest 文件中注册。例如:

import pytest

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

pytest_plugins = ["custom_plugin"]

下面是一个更高级的例子,展示了如何在conftest.py中使用作用域(scope)和参数化(parametrize)来定义更复杂的fixture。

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

在这个例子中,data fixture的作用域被设置为"module",这意味着它只会在每个测试模块开始时创建一次,并在整个模块中共享。而param_fixture的作用域被设置为"function",并且使用了参数化,这意味着它会为每个测试函数创建新的实例,并且这些实例会带有不同的参数值。

然后,你可以在你的测试文件中这样使用这些fixture:

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

在这个测试文件中,test_data函数使用了data fixture,而test_param_fixture函数则使用了param_fixture fixture。由于param_fixture是参数化的,所以test_param_fixture函数实际上会被执行两次,一次传入参数1,一次传入参数2。

通过这些高级示例,可以更加灵活地利用 Pytest Conftest 来管理测试资源和扩展测试框架的功能。

总的来说,conftest.py为pytest提供了强大的配置和扩展能力,使得你可以更灵活地组织和管理你的测试代码。通过深入理解和熟练掌握conftest.py的使用,你可以写出更高效、更可维护的测试代码。


最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保证100%免费】
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值