python的coverage的module能够生成python代码的coverage数据. 在使用coverage的一些心得记录一下.
Coverage.py — Coverage.py 7.3.2 documentation (Coverage的官方文档)
1.安装
python3 -m pip install coverage
2.coverage的使用
按照官网说明,直接将以前commnad line中执行python3 的地方换成coverage run就可以了.
#If your test runner command starts with “python”, just replace the initial “python” with “coverage run”.
python3 something.py #no coverage
coverage run something.py #coverage
python3 -m amodule #no coverage
coverage run -m amodule #coverage
几点注意事项:
- 执行coverage run的时候,如果是python程序按顺序一个接一个的在前台执行, 使用 “--append” option对coverage数据进行追加操作,避免后面的命令将之前走过coverage覆盖了.
- 如果是server端的程序需要多进程后台运行, 建议使用 run --parallel-mode 避免多个进程互相干扰coverage收集数据, --parallel-mode不能与--append同时使用. 我在没有使用--parallel-mode的时候会出现 “ no such data table” 之类的错误
- Command line usage — Coverage.py 7.3.2 documentation
3.coverage的报告的生成
coverage回在执行目录下生成一个.coverage的文件,就是coverage收集的数据表.
执行 coverage report -m就可以生存文字报告, coverage html 可以生成html的格式.
注意对于run --parallel-mode回生成多个.coverage-xxx文件
在report之前,先调用 coverage combine将不同进程的coverage数据合并起来后,在执行coverage report生成报告
4.coverage erase
这个命令是清除之前的coverage数据, 这个命令不是Block模式的,也就是说你在bash中执行这个命令后,如果马上调用coverage run 的话,就会产生数据文件的冲突,产生错误“ no such data table”之类的. 需要sleep 1 等待coverage erase完数据
coverage erase
sleep 1 # Waiting for erase data
coverage run --parallel-mode server.py 1 &
coverage run --parallel-mode server.py 2 &
# stop server
coverage combine
coverage report -m