首页 > 试题广场 >

pytest 有哪些核心特性?在大规模用例集里你如何用 fi

[问答题]
pytest 有哪些核心特性?在大规模用例集里你如何用 fixture 作用域、参数化、标记分层、并行与隔离。

一、pytest 核心特性

  1. 简洁的测试用例编写支持函数式测试(无需继承类)和类测试,用例命名以 test_ 开头即可被自动识别,语法简洁灵活。
  2. 强大的断言机制直接使用 Python 原生断言(如 assert a == b),失败时会自动展示详细上下文(如变量值、差异对比),无需额外封装。
  3. 丰富的插件生态支持超过 800 个第三方插件(如 pytest-xdist 并行执行、pytest-html 生成报告、pytest-mock 集成 mocking 等)。
  4. Fixture 依赖注入替代传统的 setup/teardown,通过 @pytest.fixture 定义可复用的测试资源(如数据库连接、配置加载),支持灵活的依赖管理和作用域控制。
  5. 参数化测试用 @pytest.mark.parametrize 轻松实现多组输入的测试,避免重复代码。
  6. 测试选择与过滤支持按文件名、函数名、标记(@pytest.mark)、关键字等筛选用例,方便局部执行。
  7. 跳过与预期失败用 @pytest.mark.skip(跳过用例)和 @pytest.mark.xfail(预期失败)处理特殊场景(如兼容性测试)。
  8. 集成性可兼容 unittest 用例,支持与 CI/CD 工具(Jenkins、GitHub Actions 等)无缝集成。

二、大规模用例集的实践策略

1. Fixture 作用域:控制资源生命周期

Fixture 通过 scope 参数定义作用域,减少重复初始化 / 销毁资源的开销,适合大规模用例:
  • function(默认):每个测试函数执行一次(如临时变量)。
  • class:每个测试类执行一次(如类内共享的配置)。
  • module:每个模块(文件)执行一次(如模块级的数据库连接)。
  • package:每个包执行一次(如跨模块共享的资源)。
  • session:整个测试会话执行一次(如全局配置、数据库初始化)。
发表于 2025-10-28 10:01:59 回复(0)