在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')
一样可以收集到最后的结果,看大家如何去使用即可。