使用Coverage分析Python web项目的代码覆盖率
admin
2023-07-31 01:52:42
0

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

  • –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终止后,才出现统计结果:

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可以直接点击进入代码文件查看。

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...