python代码覆盖率

来源:互联网 发布:系统内存优化级别默认 编辑:程序博客网 时间:2024/05/16 08:37

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停止后可以出结果。


0 0
原创粉丝点击