在之前的公开课跟公众号文中,我们提到了单元测试覆盖率,今天我们一起来做个小总结。 首先来看看什么是单元测试覆盖率: 覆盖率是用来衡量单元测试对功能代码的测试情况,通过统计单元测试中对功能代码中行、分支、类等模拟场景数量,来量化说明测试的充分度。 代码覆盖率 = 代码的覆盖程度,一种度量方式。 它的度量方式包括但是不仅限于以下几种: 语句覆盖(度量被测代码中每个可执行语句是否被执行到了) 判定覆盖(又称分支覆盖,度量程序中每一个判定的分支是否都被测试到了) 条件覆盖(度量判定中的每个子表达式结果true和false是否被测试到了) 路径覆盖(度量了是否函数的每一个分支都被执行了) 组合覆盖等 那么对于Python项目又如果对它的单元测试覆盖率进行分析呢? 当然同Java的JaCoCo、Cobertura等一样,Python也有自己的单元测试覆盖率统计工具,Coverage就是其中一种。 Coverage是一种用于统计Python代码覆盖率的工具,通过它可以检测测试代码对被测代码的覆盖率如何。可以高亮显示代码中哪些语句未被执行,哪些执行了,方便单测。并且,coverage支持分支覆盖率统计,可以生成HTML/XML报告。 官方文档:http://coverage./en/latest/ 获取地址:http://pypi./pypi/coverage Coverage安装: pip install coverage 使用帮助: 使用help命令查看帮助:$ coverage help 对于Coverage的使用,比较简单,直接coverage run命令去执行已经写好的单元测试用例就可以了。 执行单元测试: coverage run test.py arg1 arg2 这里test.py是已经完成的测试用例脚本,arg1 arg2是test.py执行需要的参数。 执行结束后,会自动生成一个覆盖率统计结果文件(data file):.coverage。当然这个文件里面一大堆数字是不方便我们查看的。 所以我们使用另外一条命令查看覆盖统计结果:coverage report。 这里 Stmts:表示语句总数 Miss:未执行到的语句数 Cover=(Stmts-Miss)/Stmts 当然也可以生成更加清理明了的html测试报告: coverage html -d report 这里-d指定html文件夹。 生成的报告直接关联代码,高亮显示覆盖和未覆盖的代码,支持排序。-d指定html文件夹。 通过点击其中的各个py文件可以看到各自的代码被执行情况 当然还可以通过API方式执行测试并统计覆盖率: cov = coverage.coverage(source=["course_search"]) 结果显示: 当然除了课程内容除了这些基本的介绍,芒果还给大家介绍了,关于Django项目单元测试覆盖率等的使用。 |
|