📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝 职场经验干货:
在 Pytest 中,Fixture 和 conftest.py 是实现测试数据共享和配置管理的核心机制。以下将详细介绍它们的使用方法和加载机制。
1. Fixture 的使用与拓展
1.1 Fixture 的基本概念
Fixture 是 Pytest 中的一个装饰器,用于提供测试所需的数据和对象。它可以在测试用例执行前后执行初始化和清理工作。
1.2 Fixture 的作用范围
Fixture 的作用范围由 scope 参数决定,常见的作用范围包括:
function:每个测试函数执行前运行一次。
class:每个测试类执行前运行一次。
module:每个测试模块执行前运行一次。
session:所有测试执行前运行一次。
1.3 Fixture 的参数化
Fixture 可以通过 params 参数实现参数化,支持向测试用例传递不同的数据。
import pytest
@pytest.fixture(params=[1, 2, 3])
def number(request):
return request.param
def test_numbers(number):
assert number > 0
1.4 Fixture 的自动应用
通过设置 autouse=True,Fixture 会自动应用于所有测试用例,无需手动声明。
@pytest.fixture(autouse=True)
def setup():
print("Setup before each test")
2. conftest.py 的加载机制
2.1 conftest.py 的作用
conftest.py 是 Pytest 的一个特殊文件,用于定义全局的测试配置和共享 Fixture。它会被 Pytest 自动加载,无需显式导入。
2.2 加载机制
conftest.py 的加载顺序如下:
当前测试目录及其子目录。
conftest.py 文件所在的目录及其子目录。
conftest.py 文件所在的父目录及其子目录。
2.3 作用范围
conftest.py 文件的作用范围是其所在的目录及其子目录。
一个项目中可以有多个 conftest.py 文件,每个文件的作用范围独立。
2.4 示例
假设项目结构如下:
project/
├── conftest.py # 全局 conftest
├── test_module1/
│ ├── conftest.py # 局部 conftest
│ └── test_file1.py
└── test_module2/
└── test_file2.py
project/conftest.py 中的 Fixture 对整个项目生效。
test_module1/conftest.py 中的 Fixture 只对 test_module1 目录下的测试文件生效。
3. conftest.py 的使用场景
3.1 全局 Fixture
在 conftest.py 中定义全局 Fixture,如登录接口的 Token 获取。
# conftest.py
import pytest
@pytest.fixture(scope="session")
def get_token():
token = "example_token"
print("Token obtained:", token)
return token
在测试用例中直接使用:
# test_file.py
def test_example(get_token):
assert get_token == "example_token"
3.2 数据共享
通过 conftest.py 共享测试数据,如数据库连接信息。
# conftest.py
import pytest
@pytest.fixture(scope="module")
def db_connection():
# 模拟数据库连接
return "db_connection"
3.3 配置管理
在 conftest.py 中定义全局配置,如测试环境的 URL。
# conftest.py
import pytest
@pytest.fixture(scope="session")
def base_url():
return "https://api.example.com"
4. Fixture 的高级用法
4.1 使用 yield 实现 teardown
Fixture 可以通过 yield 实现资源的清理工作。
@pytest.fixture
def resource():
print("Setup resource")
yield "resource"
print("Teardown resource")
4.2 使用 addfinalizer
除了 yield,还可以通过 request.addfinalizer 注册清理函数。
@pytest.fixture
def resource(request):
print("Setup resource")
resource = "resource"
def teardown():
print("Teardown resource")
request.addfinalizer(teardown)
return resource
5. 总结
通过合理使用 Fixture 和 conftest.py,可以实现测试数据的共享、初始化和清理工作,提升测试代码的复用性和可维护性。conftest.py 的加载机制使得 Fixture 可以在不同层级的目录中生效,灵活地满足项目需求。
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】