使用coverage工具统计python单元测试覆盖率
Coverage简介
Coverage是一种用于统计Python代码覆盖率的工具,通过它可以检测测试代码对被测代码的覆盖率如何。Coverage支持分支覆盖率统计,可以生成HTML/XML报告。
官方文档:http://coverage.readthedocs.org/en/latest/
获取地址:http://pypi.python.org/pypi/coverage
也可以通过easy_install或pip安装:easy_install coverage。
安装后在Python27\Scripts文件夹下生成coverage.exe等工具,在path中加环境变量C:\Python27\Scripts,便可以在命令行中调用coverage命令来进行覆盖率分析。
Coverage使用
1.命令行方式
详见:http://coverage.readthedocs.io/en/latest/cmd.html
可以使用help命令查看帮助:$ coverage help
关键命令如下:
A.run
执行代码覆盖率统计,只需要通过coverage的run参数执行被统计代码即可。
$ coverage run test.py arg1 arg2
test.py是测试脚本,arg1 arg2是test.py执行需要的参数。跑完后,会自动生成一个覆盖率统计结果文件(data file):.coverage。
B.report
有了覆盖率统计结果文件,只需要再运行report参数,就可以在命令里看到统计的结果。

Stmts/Miss表示语句总数/未执行到的语句数
Cover=(Stmts-Miss)/Stmts
c. html
生成html的测试报告。
$ coverage html -d covhtml
生成的报告直接关联代码,高亮显示覆盖和未覆盖的代码,支持排序。-d指定html文件夹。可以在这个地址预览一下:http://nedbatchelder.com/code/coverage/sample_html/
效果如下:

测试文件:

高亮显示覆盖的和未覆盖的代码,覆盖的用绿色标示,未覆盖的用红色标示。
注:coverage run test.py命令运行的文件,会统计项目中包括测试文件本身在内的所有文件,run参数的子参数—source可以指定要统计的文件:$ coverage run --source=totest.py test.py 可以只统计totest.py文件。
d.combine
合并多份覆盖率数据文件,把需要合并的覆盖率结果数据文件放在同一个目录里,然后执行coverage combine即可。但是对目录里的结果文件名的格式有要求,需要合并的文件必须有同样的前缀,然后后面跟一个名称(通常是机器名),然后再跟一个数字(通常是进程ID),比如:.coverage.75FEC5D4B3ADAAA.14632.213308
为了方便执行结果的合并,我们在前面执行统计时,在run参数后面跟一个-p参数,会自动生成符合合并条件的结果文件。
e.run参数的子参数1:--branch 统计分支覆盖率
如果代码中的一个分支可能跳到一个以上的行,coverage.py会追踪每一个分支是否都有跳转到。
$ coverage run --branch test.py

Branch/BrPart表示分支数/未执行到的分支数
f.run参数的子参数2:--parallel-mode
$ coverage run --parallel-mode test.py
使Coverage监测被测代码子进程的覆盖率,如果被测代码是多进程的,如一些web程序等,必须使用此参数。
2.API方式
除了使用命令行,还可以在python代码中直接调用coverage模块执行代码覆盖率的统计。使用方法也非常简单:
import coverage
cov = coverage.coverage(source = ['totest'])
cov.start()
#coding
cov.stop()
cov.report()
cov.html_report(directory='covhtml')
source指定要执行统计的文件,source = ['totest']只统计totest.py的覆盖率
directory指定生成html的路径
使用Coverage统计web程序的覆盖率
web程序一般是开启服务后循环监听消息,不会自动退出。而Coverage在实现上使用了atexit模块注册一个回调函数,在Python退出时将内存中的覆盖率结果写到文件中。被测脚本只有正常退出或者以SIGINT 2信号退出才能出发atexit,才能得到覆盖率结果。CTRL+C发的即是SIGINT 2信号,所以前台启动的服务用CTRL+C停止后可以出结果。
使用coverage工具统计python单元测试覆盖率的更多相关文章
- 利用coverage工具进行Python代码覆盖率测试
Coverage是一种用于统计Python代码覆盖率的工具,通过它可以检测测试代码对被测代码的覆盖率情况. Coverage安装 1.安装命令:pip install coverage 2.查看cov ...
- unittest单元测试框架之coverage代码覆盖率统计
什么是coveage? coverage是一个检测单元测试覆盖率的工具,即检查你的测试用例是否覆盖到了所有的代码.当你通过pip install coverage成功安装完coverage后,就会在p ...
- python工业互联网应用实战14——单元测试覆盖率
前面的章节我们完成了任务管理主要功能的开发及单元测试编写,可如何知道单元测试效果怎么样呢?测试充分吗?还有没有没有测到的地方呢? 本章节我们介绍一个统计测试代码覆盖率的利器Coverage,Cover ...
- 统计代码测试覆盖率-Python
衡量Unit Test(单元测试)是否充分, 覆盖率是一个必要指标, 是检验单元测试的重要依据, 这里针对python unittest 的单元测试覆盖率coverage进行分享. 来自官方的解释: ...
- Xcode5 统计单元测试覆盖率(仅限XCTest)
概要 通过本篇文章,你将学会如何在Xcode5下使用统计XCTest测试代码的覆盖率,以及如何快速得到测试覆盖率的图形化报表. 为什么要特别说明Xcode5下的代码覆盖率统计,原因是,以前的方法在新环 ...
- 一种数据与逻辑分离的Python单元测试工具
一种数据与逻辑分离的Python单元测试工具 几个概念 TestCase TestCase是一个完整的测试单元,最小的测试执行实体,就是我们常说的测试用例. TestSuite 以某种特性将测试用例组 ...
- [python] python单元测试经验总结
python写单元大多数都会用到unittest和mock,测试代码覆盖率都会用到coverage,最后再用nose把所有的东西都串起来,这样每次出版本,都能把整个项目的单元测试都运行一遍. Unit ...
- [转载] JaCoCo:分析单元测试覆盖率的利器
转载自http://www.ibm.com/developerworks/cn/java/j-lo-jacoco/和http://www.cnblogs.com/chenfengmugu/p/4937 ...
- Jenkins集成jacoco收集单元测试覆盖率
Jenkins集成jacoco收集单元测试覆盖率 2020-02-28 目录 0 整体思路1 Jenkins创建JacocoIntegrateTestDemo项目2 配置源码管理3 配置Build4 ...
随机推荐
- JS 用sort方法排序字符串
JavaScript提供了一种更简便的方法用于比较两个字符串——localeCompare(),localeCompare()使用本地特定的顺序来比较两个字符串,语法如下:string.localeC ...
- Android 大位图加载
说明:没对图片进行缓存处理,只是使用软引用进行位图资源的释放,从而避免内存泄漏. 对位图进行解码显示: public Bitmap decodeBitmap(Resources resources, ...
- topcoder SRM 625 DIV2 IncrementingSequence
由于题目数据量比较小,故可以开辟一个数组存储每个index出现的次数 然后遍历即可 string canItBeDone(int k, vector<int> A){ vector< ...
- 【BZOJ】1100: [POI2007]对称轴osi
题意 给一个\(n(1 \le n \le 100000)\)个点不自交的多边形,求对称轴数目. 分析 将多边形表示成长度和角的形式(用有向面积来表示角也行),然后匹配. 题解 匹配可以用kmp或ma ...
- 我的Linux对拍脚本
本文用于Linux下bash的对拍脚本: brute为本目录的暴力程序.. pro为优化过的程序 mak造数据的.. #!/bin/bash while(true)do ./mak printf &q ...
- POJ 2402 Palindrome Numbers
题目链接 水题,LA我居然没找到在那里. #include <cstdio> #include <cstring> #include <string> #inclu ...
- 【Eclipse】 Alt+/ 代码提示问题解决方案
一般情况下alt+/有代码提示作用,还有代码提示的快捷代码也不是alt+/,因此要恢复代码提示用alt+/.需要做两件事. 在 Window - Preferences - General - Key ...
- Selenium_Selenium WebDriver 中鼠标和键盘事件分析及扩展
在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 W ...
- 将普通工程转为mvn标准工程(main resources)
It is sometimes required to change the default source folder working on the java project. One best e ...
- 类:String,Math,DateTime,Random随机数,异常保护
String类: 练习: Math类: Random随机数: DateTime类: 异常保护: 练习: 1. 2. 3.方法一: 方法二: 4.人机大战石头剪刀布 5. //请输入你想输入的数字 // ...