Fixtures 是 pytest 测试的基石,用来预置 SparkSession、DataFrame 或数据库连接等对象。只需定义一次,即可注入到多个测试中,避免重复构造输入数据。本系列前篇覆盖了测试与 mock 基础,现在重点解决测试重复问题,让测试套件更快、更易维护。
Fixture 通过 @pytest.fixture 装饰器定义,scope 参数控制生命周期:
• function(默认):每个测试函数新建,适合可变 fixture
• class:每个测试类共享一次
• module:每个测试文件共享一次
• session:整个测试运行共享一次,适合 SparkSession 等昂贵资源
用 yield 分离 setup 与 teardown:yield 前是准备,yield 后是清理(即使测试失败也会执行)。autouse=True 让 fixture 自动对所有测试生效,适合清理日志文件、重置环境变量等。conftest.py 是跨测试文件的共享仓库,根目录下定义的 fixture 无需导入即可被所有测试使用。
最佳实践:保持 fixture 靠近使用处,conftest.py 只放通用 fixture;scope 匹配创建成本;使用 yield 管理资源的获取与释放;注意 session 级 Fixture 被修改后会影响后续测试。
通过合理使用 fixture,可以淘汰复制粘贴的设置代码,组合出可复用、范围恰当的测试组件。结合前文的 mock 基础,现在有能力构建整洁、可维护的测试套件。
#开发者 #工具 #Pytest #Python #测试 #Fixture #自动化测试
@DevToolboxHub
