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

如何让Python unittest发现并执行子包内所有测试用例

问题描述

我有一个包含数百个测试用例的Python项目,测试用例按模块组织。为便于维护,正将部分测试移至独立子包中,当前目录结构如下:

/my_project/[...]

/test/__init__.py
/test/test_missiles.py
/test/test_launch_procedure.py

/test/fallback/__init__.py
/test/fallback/test_sticks.py
/test/fallback/test_stones.py

可以通过以下命令单独执行fallback子包内的单个测试:

python3 -m unittest test.fallback.test_sticks

但执行python3 -m unittest test.fallback时,unittest并未发现子包内的测试模块,不会执行任何测试。使用文件名路径仅能执行单个文件,无法匹配test/fallback/test_s*.py这类通配符模式。想知道是否需要对fallback测试子包进行特殊配置,让python3 -m unittest test.fallback能加载并执行该包内所有测试?

解决方案

要实现这个需求,有两种简单可行的方法:

方法一:修改子包的__init__.py

在test/fallback/__init__.py中导入所有测试模块,这样unittest在加载test.fallback包时会自动识别这些模块里的测试用例:

from . import test_sticks
from . import test_stones

之后再执行python3 -m unittest test.fallback,就能运行该子包下的所有测试了。

方法二:使用unittest的发现功能

不需要修改任何代码,直接用discover参数指定扫描目录和测试文件的匹配规则:

python3 -m unittest discover -s test/fallback -p "test_*.py"
  • -s:指定要扫描的根目录(这里是test/fallback)
  • -p:指定测试文件的匹配模式(这里匹配所有以test_开头的.py文件)

为什么原命令不生效?

默认情况下,unittest只会检查目标包的__init__.py中定义的测试用例,不会自动递归扫描子包内的其他模块。所以要么通过导入让模块被识别,要么用discover命令主动扫描。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:10:00