前提:
1.假定已经安装好coverage.py(ubuntu 10.10+python.2.7+coverage3.5.1)
2.项目里有模块do.py以及测试它的单元测试模块doTEST.py
命令行:
$ cd /home/user1/workspace/hp1
$ coverage run doTEST.py
$ coverage report
$ coverage html
命令解释:
第一个命令进入项目目录,第二个命令 执行coverage命令,调用单元测试,进进行统计(当前目录生成.coveage文件,该文件默认隐藏)第三个命令是读取.coveage文件并打印到屏幕,第四个命令时,生成详细的HTML报表(htmlcov文件夹)
补充:
1)coverage的另一种方式是可以作为模块被程序import,通过代码保存统计,未尝试。
2)如果原来测试的代码接收参数,如
$ doTEST.py 100 200
那么可以这样调用我们的单元测试
$ coverage run doTEST.py 100 200
疑问:
我似乎觉得重新执行上述命令时,没有重新生成报表,如果是这样的话应该在执行之前执行rm命令将生成的.coveage和htmlcov文件夹先删除掉,待确认
查看HTML报表:
进入htmlcov目录,使用firefox打开index.html文件,该文件里包含一个列表,列出了doTEST.py使用过的所有模块的代码覆盖信息,其中也包括我们关心的do.py的情况,如果测试用例完善,理论上do.py每一行代码都应该被执行过(被覆盖),反之如果do.py里某些代码没有被执行,则说明我们的测试用例还不完善,需要增加测试用例,以保证do.py每一行都被执行过。
在目录页我们可以看到概要信息,点击文件名可以查看信息,例如:
Coverage for verify : 98%
65 statements 63 run 2 missing 0 excluded 0 partial
verify是模块名称(verify.py)该模块有65条语句,63条被执行,2条未被执行,覆盖率98%,点击run和missing还会对代码进行标红和标绿,红色表示未覆盖,绿色表示已覆盖
$ coverage run --branch doTEST.py