python代码覆盖率,使用的coverage包,生成代码覆盖率报告。
1 安装coverage:
$ pip install coverage
2 python代码覆盖率生成: 执行代码覆盖率统计
#coverage run my_test.py arg1 arg2
启动覆盖率测试,跑完后,会自动生成一个覆盖率统计结果文件.coverage。 生成报告:
$ coverage report
Name Stmts Exec Cover
---------------------------------------------
test 20 16 80%
test_module 15 13 86%
test_other_module 56 50 89%
---------------------------------------------
TOTAL 91 79 87%
生成html报告 $ coverage html -d covhtml
3 覆盖率结果合并: 为了方便执行结果的合并,我们在前面执行统计时,在run参数后面跟一个-p参数,会自动生成符合合并条件的结果文件。
#coverage run -p my_program.py arg1 arg2
#coverage combine
合并目录下.coverage.test.1234和.coverage.test.5678 合并后,会再生成一个.coverage文件,然后再生成报告。
4 sever类型代码覆盖率生成:
coverage run --parallel-mode --branch --include="dir/*" test.py
--parallel-mode:使Coverage监测被测代码子进程的覆盖率,如果被测代码是多进程的,必须使用此参数; --branch:统计分支代码覆盖率,加上这个参数可使统计更精确,
具体区别参见文档: http://coverage.readthedocs.org/en/latest/branch.html;
--include: 限定要统计代码的路径,如果不限定,Coverage会把请求涉及到的所有代码。
停止命令,必须使用kill -2。
这是因为Coverage在实现上使用了atexit模块注册一个回调函数,在Python退出时将内存中的覆盖率结果写到文件中。
被测脚本只有正常退出或者以SIGINT 2信号退出才能出发atexit,才能得到覆盖率结果。如果直接kill(SIGTERM 15)
或者用其他信号终止进程,覆盖率结果将会丢失。
CTRL+C发的即是SIGINT 2信号,所以前台启动的服务用CTRL+C停止后可以出结果。
版权声明:本文为qq_37023538原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。