单元测试(unit test),简称UT。本文将介绍在Python项目中,pytest测试框架的安装,配置,执行,测试报告与覆盖率
pytest简介
pytest是一款流行的,简单易上手的单元测试框架,让开发&测试人员专注业务逻辑。
同事pytest有丰富的第三方扩展库,方便生成报告,输出UT覆盖率,支持快速高效的分布式执行。
安装
pytest pypi
pytest-html
pytest-cov
pytest-xdist
更多好用好玩的扩展库,本文将持续更新中......
bash
pip install pytest
pip install pytest-html # 生成html格式UT报告
pip install pytest-cov # 覆盖率
pip install pytest-dist # 分布式执行UT
# 更新第三方库
pip install pytest -U
pip install pytest-html -U
pip install pytest-cov -U
pip install pytest-dist -U
可行的目录结构
cmd
Project
ModuleA
ModuleB
pytest.ini
.coveragerc
unit_test
__init__.py
conftest.py
test_xx.py
配置
pytest.ini
ini
# Project pytest.ini
pytest.ini避坑
pytest.ini options中配置了 --cov
覆盖率相关的命令,会导致PyCharm中 单元测试用例断点调试
失败。
本地开发测试中,pytest.ini中切勿配置!!!
conftest.py
此配置文件中,可以写一些前置或后置的测试套。
python
# unit_test/conftest.py
# -*- coding: utf-8 -*-
import pytest
# 默认执行, 优先度高
# 例如 可以 将文件路径添加到 sys.path
@pytest.fixture(scope="session") # scope范围: session > module > class > function
def handler():
do_something_pre()
yeild
do_something_post()
.coveragerc
覆盖率配置文件,放在unit_test
同级目录。
此配置文件中,可以配置
-
覆盖率统计的代码源目录,
-
忽略的脚本(支持正则写法),
-
忽略的代码行(支持正则写法)。
conf
执行UT
命令行执行
bash
# -n 分布式执行的线程数量,需要小于系统核数。 例如: -n 7
# -
pytest -n
PyCharm右键执行
右键执行,支持 运行
调试
测试报告report.html
生成的报告中,会显示通过/失败的测试用例。
单击行 可以折叠/打开 用例执行信息
覆盖率报告 htmlcov/index.html
覆盖率会显示全部覆盖率/某个单元测试文件(夹)的覆盖率,涉及合计/执行、未执行/忽略的行等信息