如何使用 coverage.py 在 Python 代码中统计测试覆盖率

2023-04-13 00:00:00 统计 覆盖率 如何使用

在 Python 代码中,我们可以使用 coverage.py 库来统计代码的测试覆盖率。以下是具体操作步骤:

  1. 安装 coverage.py 库。在命令行中执行以下命令:
pip install coverage
  1. 在测试代码文件中添加以下行,导入 coverage.py:
import coverage
  1. 在测试代码文件的开头,初始化 coverage,并开始统计代码覆盖率:
cov = coverage.Coverage()
cov.start()
  1. 在测试代码文件结尾处,停止对代码的覆盖率统计:
cov.stop()
cov.save()
  1. 最后,在命令行中执行以下命令,生成代码覆盖率报告:
coverage html --include=*.py --omit=*test*

其中,--include=*.py 表示统计覆盖率的文件类型为 Python 文件,--omit=*test* 表示忽略包含 "test" 字符串的文件。

下面是一个完整的示例代码,包含了初始化、测试、停止统计代码覆盖率等步骤:

import math
import coverage

def is_prime(n: int) -> bool:
    if n < 2:
        return False
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True

cov = coverage.Coverage()
cov.start()

assert is_prime(2)
assert is_prime(3)
assert not is_prime(4)
assert is_prime(5)

cov.stop()
cov.save()

执行 coverage html --include=*.py --omit=*test* 命令后,会生成一个名为 htmlcov 的目录,打开其中的 index.html 文件即可查看代码覆盖率报告。

如果需要使用字符串作为范例,可以将 n 替换为字符串 "pidancode.com",代码示例如下:

def is_palindrome(s: str) -> bool:
    return s == s[::-1]

cov = coverage.Coverage()
cov.start()

assert is_palindrome("pidancode.com")
assert is_palindrome("piedegnbiancheng")
assert not is_palindrome("hello")

cov.stop()
cov.save()

同样,执行 coverage html --include=*.py --omit=*test* 命令,查看生成的代码覆盖率报告即可。

相关文章