pytest 基础教程
由于 unittest 重复代码太多(如setUp tearDown)、数据驱动支持不好、case 一多就容易乱、有一定学习成本(如 assertIn* 语法是 unittest 特有的)等缺点,我们可以使用 pytest 这个更成熟的测试框架。
相比 unittest,pytest 支持更多、更全面的功能,有着以下特色和优势。
-
直接使用纯粹的 python 语言, 不需要你过多学习框架特定的语法,例如 self.assert* 等,以此减少你的学习成本;
-
pytest 框架不需要写诸如 setUp()、tearDown() 这样的方法,它可以直接开始测试;
-
pytest 可以自动识别测试用例,无须像 unittest 一样将测试用例放进 TestSuite 里组装;
-
test fixtures 包括数据参数化测试非常好用;
-
pytest 支持错误重试;
-
pytest 支持并发测试;
-
pytest 完全兼容 unittest。
文档:https://docs.pytest.org/en/latest/contents.html#toc
第三方库:https://pypi.org/search/?q=pytest
pytest 简单使用
import pytest
def func(x):
return x + 1
class TestSample(object):
# 测试用例默认以test开头
def test_equal(self):
assert func(0) == 1
def test_not_equal(self):
assert func(0) != 0
pytest 运行方式
- 命令行运行
pytest 支持在命令行中以如下方式运行:
python -m pytest [...]
- pytest.main() 运行
pytest 支持在程序中运行,在程序中运行的命令如下:
pytest.main([...])
参数化使用
@pytest.mark.parametrize(argnames, argvalues)
-
argnames:要参数化的变量, 可填 string, list, tuple
-
argvalues:参数化的值, 可填 list, list[tuple]
@pytest.mark.parametrize("a, b", [(10, 20), (10, 30), (10, 40)])
def test_param(a, b):
print(a + b)
- 与 yaml 结合使用
创建一个 data.yaml 文件,内容如下:
-
- 10
- 20
-
- 10
- 30
-
- 10
- 40
测试用例使用 yaml 文件进行参数化:
import pytest
import yaml
class TestData:
@pytest.mark.parametrize("a, b", yaml.safe_load(open("./data.yaml")))
def test_data(self, a, b):
print(a + b)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!