Python之代码覆盖率框架coverage使用介绍

Python代码覆盖率工具coverage.py其实是一个第三方的包,同时支持Python2和Python3版本。

安装也非常简单,直接运行:

复制代码
pip install coverage

安装完成后,会在Python环境下的\Scripts下看到coverage.exe;

首先我们编写一个简易计算器的程序:

复制代码
# mymath.py
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

def multiply(a, b):
    return a * b

def divide(numerator, denominator):
    return float(numerator) / denominator

接着来编写基于unittest的单元测试用例:

复制代码
# test_mymath.py
import mymath
import unittest

class TestAdd(unittest.TestCase):
    """
    Test the add function from the mymath library
    """
    def test_add_integers(self):
        """
        Test that the addition of two integers returns the correct total
        """
        result = mymath.add(1, 2)
        self.assertEqual(result, 3)

    def test_add_floats(self):
        """
        Test that the addition of two floats returns the correct result
        """
        result = mymath.add(10.5, 2)
        self.assertEqual(result, 12.5)

    def test_add_strings(self):
        """
        Test the addition of two strings returns the two string as one
        concatenated string
        """
        result = mymath.add('abc', 'def')
        self.assertEqual(result, 'abcdef')


if __name__ == '__main__':
    unittest.main()

下面打开CMD命令窗口并进入代码文件所在目录。
1. 使用coverage run命令运行测试用例

复制代码
coverage run test_mymath.py

运行一个.py的文件方式:python test.py

现在使用coverage执行.py的文件方式:coverage run test.py

会自动生成一个覆盖率统计结果文件(data file):.coverage,这个文件在你的test.py的文件对应目录下。

2. 生成覆盖率报告

有了覆盖率统计结果文件,只需要再运行report参数,就可以在命令里看到统计的结果。

复制代码
coverage report -m

-m参数表示显示有哪些行没有被覆盖。

可以看到计算器程序mymath.py的测试覆盖率是62%,其中13,17,21行未运行。

3. 生成HTML报告

生成html的测试报告。

复制代码
coverage html

运行后在代码文件所在目录生成了htmlcov文件夹,打开index.html查看报告

点击报告中的mymath.py,可以打开该文件的覆盖详情,会飘红展示哪些代码未被运行。

因为我们的单元测试代码只是测试了mymath.add(),所以其他函数里的代码未被覆盖,这时就需要我们补充测试用例了。

输出结果意义

Stmts 总的有效代码行数(不包含空行和注释行)

Miss 未执行的代码行数(不包含空行和注释行)

Branch 总分支数

BrMiss 未执行的分支数

Cover 代码覆盖率

Missing 未执行的代码部分在源文件中行号

命令详解

coverage run --help   # 打印帮助信息

coverage run test_xxx.py # 执行test_xxx.py文件,会自动生成一个覆盖率统计结果文件.coverage

coverage report -m(带有详细信息) # 查看coverage报告,读取.coverage文件并打印到屏幕上,可以在命令行里看到统计结果

coverage html -d report # 生成显示整体的covergae html形式的报告 (在当前同路径下生成一个report文件夹,里面包含html形式的报告。通过查看report文件夹下的内容即可)

4. 其他功能

除了使用命令行,还可以在python代码中直接调用coverage模块执行代码覆盖率的统计。使用方法也非常简单:

复制代码
import coverage

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

# .. run your code ..

cov.stop()
cov.save()

文档:Command line usage --- Coverage.py 7.4.0 documentation

相关推荐
MOMO陌染39 分钟前
Python 饼图入门:3 行代码展示数据占比
后端·python
vvoennvv1 小时前
【Python TensorFlow】 TCN-GRU时间序列卷积门控循环神经网络时序预测算法(附代码)
python·rnn·神经网络·机器学习·gru·tensorflow·tcn
自学互联网2 小时前
使用Python构建钢铁行业生产监控系统:从理论到实践
开发语言·python
无心水2 小时前
【Python实战进阶】7、Python条件与循环实战详解:从基础语法到高级技巧
android·java·python·python列表推导式·python条件语句·python循环语句·python实战案例
xwill*2 小时前
RDT-1B: A DIFFUSION FOUNDATION MODEL FOR BIMANUAL MANIPULATION
人工智能·pytorch·python·深度学习
陈奕昆2 小时前
n8n实战营Day2课时2:Loop+Merge节点进阶·Excel批量校验实操
人工智能·python·excel·n8n
程序猿追2 小时前
PyTorch算子模板库技术解读:无缝衔接PyTorch模型与Ascend硬件的桥梁
人工智能·pytorch·python·深度学习·机器学习
秋邱3 小时前
高等教育 AI 智能体的 “导学诊践” 闭环
开发语言·网络·数据库·人工智能·python·docker
组合缺一3 小时前
Solon AI 开发学习6 - chat - 两种 http 流式输入输出
python·学习·http
沐浴露z3 小时前
为什么使用SpringAI时通常用Builder来创建对象?详解 【Builder模式】和【直接 new】的区别
java·python·建造者模式