0. 前言
- 简介:pytest是Python的测试框架,是第三方提供的,需要额外安装包。
- 安装方法:
pip install -U pytest
,之后就可以通过 pytest --version
来检查是否安装。 - 官方资料:官方文档
1. 命令与配置
1.1. pytest 的基本使用
python -m pytest [...]
与 pytest [...]
的区别
- 如果失败x次则停止
pytest -x # stop after first failure
pytest --maxfail=2 # stop after two failures
# 选择文件
pytest test_mod.py
# 选择文件夹
pytest testing/
# 搜索表达式,会搜索文件名、类名、方法名
# 下例子中就是选择包含 MyClass 但不包含 method 的内容
pytest -k "MyClass and not method"
# 指定某文件、某类中的某方法
pytest test_mod.py::test_func
pytest test_mod.py::TestClass::test_method
- 测试结果展示
-r
:在测试完成后有一个简短的统计,如下图
- 在
-r
后可选择合适的选项,选择展示内容。 
- 测试失败时使用PDB,
pytest --pdb
1.2. 配置文件
2. 代码编写
2.1. 推荐的单元测试源码格式
setup.py
mypkg/
__init__.py
app.py
view.py
tests/
test_app.py
test_view.py
...
setup.py
mypkg/
__init__.py
app.py
view.py
test/
__init__.py
test_app.py
test_view.py
...
2.2. 文件/类/方法命名规则
- 官方文档:Conventions for Python test discovery
- 功能:执行
pytest
命令时会选择那些文件、方法、类进行单元测试。 - 基本流程:
- 第一步:指定文件/文件夹的搜索范围。
- 如果在
pytest
命令行中指定了文件/文件夹,则会处理这些文件/文件夹中的数据。 - 如果
pytest
没有指定文件/文件夹,那就会从配置文件 testpaths
选项中指定的路径,或当前路径中搜索文件/文件夹。 - 会搜索指定路径子目录中的内容,但有一个例外,那就是配置文件
norecursedirs
指定的路径不会进行搜索。
- 第二步:在指定搜索范围内选择文件,即所有命名格式为
test_*.py
或 *_test.py
的文件。 - 第三步:在指定文件中寻找合适的方法。
- 所有
test
开头的方法(不属于任何类的方法)。 - 所有
Test
开头类中,test
开头的成员方法。
- 当然,也可以自定义规则,具体查看 这里
2.3. assert 相关
2.4. pytest fixtures