You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 23:44:54