Mar*_*yyy 15 python testing coverage.py flask
我的测试清楚地执行每个函数,也没有未使用的导入.然而,根据覆盖率报告,62%的代码从未在以下文件中执行:

有人可以指出我可能做错了什么吗?
以下是我初始化测试套件和覆盖范围的方法:
cov = coverage(branch=True, omit=['website/*', 'run_test_suite.py'])
cov.start()
try:
unittest.main(argv=[sys.argv[0]])
except:
pass
cov.stop()
cov.save()
print "\n\nCoverage Report:\n"
cov.report()
print "HTML version: " + os.path.join(BASEDIR, "tmp/coverage/index.html")
cov.html_report(directory='tmp/coverage')
cov.erase()
Run Code Online (Sandbox Code Playgroud)
Ned*_*der 12
这是coverage.py FAQ中的第三个问题:
问:为什么函数(或类)的主体显示为已执行,但def行不显示?
这是因为在定义函数后启动了coverage.定义行在没有覆盖测量的情况下执行,然后启动覆盖,然后调用该函数.这意味着身体被测量,但功能本身的定义不是.
要解决此问题,请提前开始报道.如果使用命令行以覆盖范围运行程序,则将监视整个程序.如果您使用的是API,则需要在导入定义函数的模块之前调用coverage.start().
最简单的方法是在覆盖范围内运行测试:
$ coverage run -m unittest discover
Run Code Online (Sandbox Code Playgroud)
您的自定义测试脚本除了覆盖命令行之外没有做太多工作,使用命令行会更简单.
小智 7
要排除导入语句,您可以将以下行添加到 .coveragerc
[report]
exclude_lines =
# Ignore imports
from
import
Run Code Online (Sandbox Code Playgroud)
但是当我尝试为装饰器添加“@”时,装饰器范围内的源代码被排除在外。覆盖率错误。可能还有一些其他方法可以排除装饰器。