python 代码覆盖率_使用Coverage分析Python web项目的代码覆盖率

关于Coverage

Coverage是Python代码覆盖率分析工具,有关它的介绍和安装方法请见:

Python代码覆盖率分析工具Coverage

用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监测被测代码子进程的覆盖率,如果被测代码是多进程的,必须使用此参数;

--include: 限定要统计代码的路径,如果不限定,Coverage会把请求涉及到的所有代码,包括系统库和Tornado框架的代码都分析一遍,会大大拉低代码覆盖率;

停止命令,必须使用kill -2。

这是因为Coverage在实现上使用了atexit模块注册一个回调函数,在Python退出时将内存中的覆盖率结果写到文件中。被测脚本只有正常退出或者以SIGINT 2信号退出才能出发atexit,才能得到覆盖率结果。如果直接kill(SIGTERM 15)或者用其他信号终止进程,覆盖率结果将会丢失(参考文章:Python脚本覆盖率分析方法介绍)。

CTRL+C发的即是SIGINT 2信号,所以前台启动的服务用CTRL+C停止后可以出结果。

Coverage结果收集

服务必须以coverage run启动,并以kill -2终止后,才出现统计结果:

xxx@xxx:/xxx/$ ll

total 2708

drwxr-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 combine

coverage report -m

coverage html

coverage xml

coverage erase

combine会合并7个.coverage.xxx文件成1个.coverage,因为最后Coverage统计的是.coverage的结果。

report/html/xml:直接在终端显示报告/生成html报告/生成xml报告。

erase会删除.coverage文件,保证不会影响下次统计的结果。

生成的报告非常清晰,html和xml可以直接点击进入代码文件查看。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值