python-使用coverage统计单元测试覆盖率

  1. 覆盖率测试效果
  2. 安装coverage
  3. 代码示例
  4. pytest运行用例时添加–cov参数统计测试覆盖率
    1. 控制台中输出覆盖率报告
    2. 将覆盖率报告生成html

覆盖率测试效果

通过单元测试覆盖率检查,可以有效发现有哪些代码没有被测试用例覆盖到。效果如下

安装coverage

pip install pytest-cov

代码示例

  • 待测试类 cov/calculator

    待测试类中定义有两个方法addmod

class Calculator:
    def add(self, x: int, y: int):
        return x + y

    def mod(self, x: int, y: int):
        return x / y
  • 测试类 cov/test_calculator.py

在测试类中,只测试了待测试类定义的两个方法中的一个方法add

import pytest

from cov.calculator import Calculator


class TestCalculator:
    cal = Calculator()

    @pytest.mark.parametrize("x,y,expected", [[1, 2, 3]])
    def test_add_positive(self, x, y, expected):
        assert self.cal.add(x, y) == expected

    @pytest.mark.parametrize("x,y,expected", [[-1, -2, -3]])
    def test_add_negative(self, x, y, expected):
        assert self.cal.add(x, y) == expected

pytest运行用例时添加–cov参数统计测试覆盖率

控制台中输出覆盖率报告

pytest --cov

out:

collected 2 items                                                                                                                                                 

test_calculator.py ..                                                                                                                                       [100%]

---------- coverage: platform win32, python 3.8.10-final-0 -----------
Name                 Stmts   Miss  Cover
----------------------------------------
__init__.py              0      0   100%
calculator.py            5      1    80%
test_calculator.py      10      0   100%
----------------------------------------
TOTAL                   15      1    93%

将覆盖率报告生成html

pytest --cov --cov-report=html

在当前目录中生成覆盖率报告目录htmlcov,打开目录下的index.html


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
My Show My Code