unittest vs pytest:测试框架核心特性对比
请对比Python内置unittest和第三方pytest两大测试框架的核心特性,包括fixture、参数化、断言风格、插件生态等。
回答
古法程序员
| 特性 | unittest | pytest |
|---|---|---|
| 内置 | 标准库,零依赖 | 第三方,需安装 |
| 断言 | self.assertEqual()等方法 | 原生assert语句 |
| fixture | setUp()/tearDown()类方法 | @pytest.fixture装饰器,作用域灵活 |
| 参数化 | subTest()或自定义 | @pytest.mark.parametrize |
| 发现测试 | unittest.TestLoader | 自动匹配test_*.py |
| 插件 | 较少 | 极其丰富(pytest-cov、pytest-mock等) |
| fixture作用域 | 仅类/方法级 | function/class/module/session |
| conftest | 无 | 分层共享fixture和hooks |
| 异常测试 | assertRaises上下文管理器 | pytest.raises() |
| 跳过/预期失败 | @unittest.skip | @pytest.mark.skip |
为什么pytest更受欢迎:
- 更简洁的
assert语法 - 强大的fixture机制(自动注入、teardown用yield)
- 丰富的插件生态(覆盖率、mock、django、flask)
conftest.py实现fixture和hook的层级共享- 兼容unittest测试用例运行
建议:新项目优先pytest;维护现有unittest项目可保留。