Python——代码覆盖报告covera

xiaoxiao2021-02-28  123

在进行单元测试时,需要知道测试的覆盖情况,可以使用coverage这个模块进行python代码的覆盖检查。

下面是flask的web应用的测试阶段中使用coverage的例子

app=create_app(os.getenv('FLASK_CONFIG') or 'default') manager=Manager(app) if os.environ.get('FLASKY_COVERAGE'): import coverage COV=coverage.coverage(branch=True,include='app/*') COV.start() ... @manager.command def test(coverage=False): if coverage and not os.environ.get('FLASKY_COVERAGE'): import sys os.environ['FLASKY_COVERAGE']='1' #重新启动程序 os.execvp(sys.executable,[sys.executable]+sys.argv) import unittest tests=unittest.TestLoader().discover('test') unittest.TextTestRunner(verbosity=2).run(tests) if COV: COV.stop() COV.save() print('Coverage Summary') basedir=os.path.abspath(os.path.dirname(__name__)) covdir=os.path.join(basedir,'tmp/coverage') COV.html_report(directory=covdir) print('HTML version: file://%s/index.html'%covdir) COV.report() COV.erase()

branch表示开启分支覆盖分析,除了跟踪代码,还要检查True,False分支是否都执行,include限制分析范围,排除虚拟环境等杂项

sys.executable 是python解释器的路径

execvp会用即将运行的进程的内存替换掉调用进程的内存,更进一步讲,就是把当前进程的机器指令都清空,然后载入被execvp运行起来的进程的机器指令。 execvp 开会始一个新进程, 以取代目前进程

import os import sys program = "python" arguments = ["hello.py"] print os.execvp(program, (program,) + tuple(arguments)) print "goodbye"
转载请注明原文地址: https://www.6miu.com/read-50576.html

最新回复(0)