Python - 测试覆盖率统计

2023-10-23 17:48:07 浏览数 (1)

在python代码进行单元测试的时候,我们总会遇到这样的问题,如何来统计我们的代码所有分支的测试?本文带你了解,如何快速的掌握代码的覆盖率。

如何 来统计呢,可以用coverage模块来实现,如何用呢,首先来安装。

代码语言:javascript复制
pip3 install coverage

安装结果

接着呢,我们先准备一个测试类,一个被测的类.

下面是被测类

代码语言:javascript复制
class Tool():
    def sub(self,a,b):
        return  a,b
    def cmopar(self,a,b):
        if a>b:
            return True
        else:
            return False

测试类

代码语言:javascript复制
代码语言:javascript复制
import unittest
from too import Tool

class MyTestCase(unittest.TestCase):
    def test_something(self):
        tool=Tool()
        self.assertEqual(tool.sub(1,2),3)
    def testcomp(self):
        comp=Tool()
        self.assertTrue(comp.cmopar(2,3))
代码语言:javascript复制

正常测试,执行

代码语言:javascript复制
python testtoo.py

结果如下

那么我们看覆盖率,如何来实现呢

代码语言:javascript复制
 coverage run --source .  testtoo.py

结果:

可以看到

生产一个文件,我们看结果,可以使用

代码语言:javascript复制
coverage report

结果如下:

我们可以看到,覆盖率出来了,

如果想看html报告呢

代码语言:javascript复制
coverage html

结果:

生成了一个html文件夹,打开index.html

结果:

各字段说明:

  • Stmts 总的有效代码行数(不包含空行和注释行)
  • Miss 未执行的代码行数(不包含空行和注释行)
  • Branch 总分支数
  • BrMiss 未执行的分支数
  • Cover 代码覆盖率
  • Missing 未执行的代码部分在源文件中行号

可以看到大概的覆盖率.

结果展示中的字段含义:

  • tmts:语句总数
  • Miss:未执行到的语句数
  • Cover:覆盖率,计算公式 Cover=(Stmts-Miss)/Stmt

另外,命令行还有下面的

命令行中使用时常用参数:

  • run – 运行Python程序并收集执行数据
  • report – 报告覆盖率结果
  • html – 生成HTML文件,内容含覆盖率结果列表
  • json – 生成JSON文件,内容含覆盖率结果
  • xml – 生成XML报告文件,内容含覆盖率结果
  • erase – 清除之前收集的覆盖率数据
  • combine – 合并多个数据文件
  • debug – 获取调试信息

可以使用help命令查看帮助:

coverage help

当然还可以api调用

代码语言:javascript复制
   # 实例化对象
    cov = coverage.coverage()
    # 开始分析
    cov.start()
    suite = unittest.defaultTestLoader.discover(os.getcwd(), "testtoo.py")
    unittest.TextTestRunner().run(suite)
    # 结束分析
    cov.stop()
    # 结果保存
    cov.save()
    # 命令行模式展示结果
    cov.report()
    # 生成HTML覆盖率报告
    cov.html_report(directory='covhtml')

一样可以收集到最后的结果,看大家如何去使用即可。

0 人点赞