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

如何从main_folder根目录递归运行所有子目录下的Python unittest测试

问题原因及解决方案

问题原因

unittest discover默认递归扫描目录时,会将不含__init__.py的目录判定为非Python包目录,跳过后续的子目录扫描。你的目录结构中proj1、proj2两个目录下没有添加空的__init__.py文件,所以从main_folder启动扫描时,进入proj1/proj2目录后就会停止向下扫描,自然识别不到内层的测试用例。
单独指定proj1/proj2为扫描起始目录时,扫描逻辑直接从这两个目录向下查找test子目录,不需要判定上级目录的包属性,所以可以正常识别测试。

解决方案

  • 方案1:修改目录结构(最简单)
    在proj1、proj2目录下各添加一个空的__init__.py文件,调整后的目录结构如下:
main_folder
   |
   -- proj1
     |------ __init__.py # 新增空文件
     |------ code
          |-------- __init__.py
          |-------- my_file_proj1.py
     |-------test
          |-------- __init__.py
          |-------- test_my_file_proj1.py
   -- proj2
     |------ __init__.py # 新增空文件
     |------ code
          |-------- __init__.py
          |-------- my_file_proj2.py
     |-------test
          |-------- __init__.py
          |-------- test_my_file_proj2.py

之后直接在main_folder下执行原命令即可:
python -m unittest discover .

  • 方案2:命令行直接指定测试文件路径(无需修改目录结构)
    如果不想修改目录结构,可以直接通过通配符匹配所有测试文件传入unittest:

    • Unix/Linux/macOS(bash环境):
      先执行shopt -s globstar开启递归通配,再运行:
      python -m unittest **/test_*.py
    • Windows PowerShell环境:
      python -m unittest (Get-ChildItem -Recurse -Filter test_*.py).FullName
  • 方案3:编写统一测试入口脚本(无需修改目录结构,跨平台通用)
    在main_folder下新建run_all_tests.py,内容如下:

import unittest
import os

def load_tests(loader, standard_tests, pattern):
    root_dir = os.path.dirname(__file__)
    all_tests = loader.discover(start_dir=root_dir, pattern="test_*.py")
    standard_tests.addTests(all_tests)
    return standard_tests

if __name__ == "__main__":
    unittest.main(defaultTest="load_tests")

之后直接执行python run_all_tests.py即可递归运行所有测试用例。

内容的提问来源于stack exchange,提问作者tomiyos654

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:48:03