如何以适当的方式衡量覆盖率

时间:2019-09-18 18:08:45

标签: python python-3.x pytest coverage.py

Pytest +覆盖率显示出非常奇怪的覆盖率统计信息。 他们只计算添加了测试的模块,但由于某些原因未计算其他Python模块。

我有一个简单的Python Microservice,其结构类似于:

README.rst
Dockerfile
manage.py
api_service/
setup.py
requirements.txt
tests/

api_service包含所有逻辑,而tests包含单元测试。 API用Python 3.X编写 单元测试-Pytest 3.10.0

我正在运行以下命令以获取代码覆盖率统计信息:

python coverage run pytest -v --junit-xml=junit-report.xml tests/
python coverage xml --fail-under 80
python coverage report

对我来说,这真是奇怪而出乎意料的结果。 例如最终报告中有空的 init .py模块(覆盖率100%),它们会影响最终覆盖率。 此外,它添加了很多仅带有抽象类等的模块。

但是实际上根本没想到的是-它没有计算没有测试的Python模块。太可怕了!

有没有处理这种情况的命令,标志等是正确的方法?

我也尝试过运行类似的东西:

python coverage run --source=service_api -v --junit-xml=junit-report.xml tests/

但是它也不会返回预期的结果。

1 个答案:

答案 0 :(得分:0)

CD 进入 prj 目录并运行:

pytest --cov=. tests/ --cov-report xml

为了获得 xml 格式的源文件的代码覆盖率。

先决条件:

pip install pytest pytest-cov