公司有个用django框架制作的server,有一天领导跟我说,虽然我们做黑盒测试,但是我希望能统计代码覆盖度,这样能够完善我们的测试用例。于是就把这个任务交给我了。刚接到手我觉得这事很easy。django是python写的,python代码覆盖工具应该是很好找的,就百度了一下马上搜到了coverage.py这个东西。当然在实际使用中遇到了很多问题,折腾了好几天才完成。
coverage.py的官网http://nedbatchelder.com/code/coverage/ 我下载了最新的3.6版本,然后测试了一下,发现是可用的,且使用较为方便。
按照官网或者网络搜索的说法,一般coverage有3种用法
第一种使用命令行执行python脚本。比如有个脚本aaa.py,通常执行脚本方式为python aaa.py arg1 arg2,那么你只需使用coverage run aaa.py arg1 arg2执行完成后就能看到在当前目录下有个隐藏的.coverage文件,然后使用命令coverage report就能打印出来统计结果,想作成报表就输入coverage html就会有个文件夹生成然后打开里面的index.html就看到报表了,想要加入分支统计可以coverage run --branch aaa.py arg1 arg2。
第二种是在代码中插入API
import coverage
cov = coverage.coverage()
cov.start()
# .. call your code ..
cov.stop()
cov.save()
cov.html_report(directory="abc")
这种方式只需按照普通方式运行python脚本,执行完了就有哪个结果文件,如果加了最后那句html_report直接会生成abc这样一个文件夹就有报表了
第三种方法就很暴力了,考虑到有些python程序不是import一个包然后调用里面的类或者方法,而是直接使用后台执行这个脚本,比如使用popen,那在脚本中执行的这个脚本就没统计到覆盖率了,于是这种用法就是解决这个问题。在环境变量里面加入COVERAGE_PROCESS_START=true,然后在sitecustomize.py这个文件最后加入这样一段</