如何在coverage.py报告中排除目录但包含特定文件?
coverage.py 排除tests目录但保留特定文件的解决方案
coverage.py 的 omit 选项不支持 ! 取反语法,你之前的配置确实无效。不用显式列出所有要包含的文件,有几种简便方法可以实现需求:
精准匹配排除规则
别直接排除整个tests目录,而是只排除目标文件以外的tests内容。比如如果你的目标文件是myapp/tests/my_file.py,可以针对文件名拆分写排除规则:[run] omit = */tests/**/[!m]*.py */tests/**/m[!y]*.py */tests/**/my[!_]*.py */tests/**/my_[!f]*.py */tests/**/my_f[!i]*.py */tests/**/my_fi[!l]*.py */tests/**/my_fil[!e]*.py这种方式适合文件名较短的场景,缺点是写法有点繁琐。
结合include与针对性omit
先通过include指定要覆盖的核心代码和目标测试文件,再针对tests目录下的其他文件写排除规则。比如如果你的测试文件都以test_开头,配置可以写成:[run] include = */myapp/* */myapp/tests/my_file.py omit = */tests/test_*.py */tests/conftest.py这样既保留了目标文件,又排除了常规测试文件,比全量排除灵活得多。
命令行直接指定源文件
不想在配置文件里折腾规则的话,运行coverage时直接用--source参数指定要追踪的目录和文件:coverage run --source=myapp,myapp/tests/my_file.py your_test_script.py
另外,如果你的my_file.py是被应用代码导入的工具类(不是独立测试用例),coverage会自动统计它的覆盖率,这时候只要排除tests目录下的测试用例文件就行:
[run] omit = */tests/test_*.py
内容的提问来源于stack exchange,提问作者dfrankow
相关产品推荐
相关产品推荐

