使用Coverage分析Python web项目的代码覆盖率
来源:互联网 发布:linux 下arp a 编辑:程序博客网 时间:2024/06/05 02:23
http://www.thinksaas.cn/group/topic/396057/
用Python启动的web服务可以方便地使用Coverage分析其覆盖率,假设一个web服务,它的启停命令如下:
sudo python xxx/main.py --port=8888 --logging=none > /dev/null 2>&1 &ps auxf|grep xxx/main.py |grep -v grep |awk '{print $2}'|sort -r| sudo xargs kill
像这样用python启动的服务可以使用Coverage命令行启动,用kill -2的关闭,即可统计代码覆盖率。
启停命令
使用如下启停命令:
sudo coverage run --parallel-mode --branch --include="yyy/*"xxx/main.py --port=8888 --logging=none > /dev/null 2>&1 &ps auxf|grep xxx/main |grep -v grep |awk '{print $2}'|sort -r|sudo xargs kill -2
与原来的命令区别在启动命令用coverage run和一组参数替代python,停止命令用kill -2杀进程。
解释一下启动命令参数:
--parallel-mode:使Coverage监测被测代码子进程的覆盖率,如果被测代码是多进程的,必须使用此参数;
--branch:统计分支代码覆盖率,加上这个参数可使统计更精确,具体区别参见文档:http://coverage.readthedocs.org/en/latest/branch.html;
--include: 限定要统计代码的路径,如果不限定,Coverage会把请求涉及到的所有代码,包括系统库和Tornado框架的代码都分析一遍,会大大拉低代码覆盖率;
各参数具体可参见:http://coverage.readthedocs.org/en/latest/cmd.html
停止命令,必须使用kill -2。 这是因为Coverage在实现上使用了atexit模块注册一个回调函数,在Python退出时将内存中的覆盖率结果写到文件中。被测脚本只有正常退出或者以SIGINT 2信号退出才能出发atexit,才能得到覆盖率结果。如果直接kill(SIGTERM 15)或者用其他信号终止进程,覆盖率结果将会丢失(参考文章:Python脚本覆盖率分析方法介绍)。
CTRL+C发的即是SIGINT 2信号,所以前台启动的服务用CTRL+C停止后可以出结果。
Coverage结果收集
服务必须以coverage run启动,并以kill -2终止后,才出现统计结果:<code>xxx@xxx:/xxx/$ lltotal 2708drwxr-xr-x 11 root root 4096 Sep 25 11:46 ./drwxr-xr-x 6 root root 4096 Sep 25 08:30 ../-rw-rw-rw- 1 root root 284691 Sep 25 11:46 .coverage.xxx.15845.747211-rw-rw-rw- 1 root root 284917 Sep 25 11:45 .coverage.xxx.15846.592706-rw-rw-rw- 1 root root 284274 Sep 25 11:45 .coverage.xxx.15847.688607-rw-rw-rw- 1 root root 284583 Sep 25 11:45 .coverage.xxx.15858.136003-rw-rw-rw- 1 root root 284274 Sep 25 11:46 .coverage.xxx.15867.746159-rw-rw-rw- 1 root root 284691 Sep 25 11:46 .coverage.xxx.15876.004083-rw-rw-rw- 1 root root 283820 Sep 25 11:46 .coverage.xxx.15886.921243
每个.coverage.xxx文件代表一个子进程的覆盖率,文件名格式为.coverage.<机器名>.<进程号>.<随机数>。
测试结束后,需要合并测试结果,生成报告:
coverage combinecoverage report -mcoverage htmlcoverage xmlcoverage erase
combine会合并7个.coverage.xxx文件成1个.coverage,因为最后Coverage统计的是.coverage的结果。
report/html/xml:直接在终端显示报告/生成html报告/生成xml报告。
erase会删除.coverage文件,保证不会影响下次统计的结果。
生成的报告非常清晰,html和xml可以直接点击进入代码文件查看。
- 使用Coverage分析Python web项目的代码覆盖率
- 使用coverage统计python web项目的代码覆盖率
- python coverage代码覆盖率工具
- Pydev 的覆盖率测试python coverage以及其他使用
- Python 代码覆盖率统计工具 coverage.py
- Python 代码覆盖率统计工具 coverage.py
- 利用coverage统计Python代码覆盖率
- python代码覆盖率工具——coverage
- 使用coverage工具统计python单元测试覆盖率
- 使用coverage工具统计python单元测试覆盖率
- google工具的Coverage代码覆盖率详解
- coverage 测试代码覆盖率
- gcov lcov进行 android apk项目的 code coverage 代码覆盖率检测
- C++ 代码覆盖率工具Bullseye Coverage
- verification technologies---code coverage 代码覆盖率
- Jacoco 代码覆盖率,监控WEB项目
- android项目的JaCoCo代码覆盖率入门使用
- 使用代码覆盖率分析度量测试的完整性
- HashMap
- 安卓源代码修改之framework下面长按power键,修改安卓原生的关机、重启界面(二)
- java并发DCL问题
- 由常量池 运行时常量池 String intern方法想到的(二)之class文件及字节码指令
- RxJAVA学习笔记(一)
- 使用Coverage分析Python web项目的代码覆盖率
- MVC OutPutCache缓存常用属性介绍
- 剑指offer-数字在排序数组中出现的次数
- JavaEE_POI导出Excel (网络下载) +(本地导出) 工具类的编写
- WebStorm 快捷键
- 值得推荐的C/C++框架和库
- Java源码阅读之FutureTask
- ContenProvider--联系人和媒体库的操作
- PHP星期几获取代码