如何在Python unittest discover中排除指定子目录且无需自定义脚本?
解决unittest排除指定子目录运行测试的问题
Python自带的unittest discover命令没有直接排除特定子目录的参数,但可以通过shell工具组合实现无需自定义函数或脚本的解决方案,直接跳过目标子目录的测试:
方案1:使用find+xargs组合(跨Shell通用)
通过find命令筛选符合条件的测试文件,排除指定子目录后,将文件列表传给unittest执行:
find test -name '*_test.py' -not -path '*/subtest/*' | xargs python -m unittest
-name '*_test.py':匹配所有符合命名规则的测试文件-not -path '*/subtest/*':过滤掉路径中包含subtest的所有文件xargs:将find输出的文件列表作为参数传递给python -m unittest
方案2:Bash扩展glob(仅适用于Bash环境)
如果使用Bash终端,可以开启扩展glob特性来直接指定要运行的测试文件:
- 先开启必要的Shell选项:
shopt -s extglob globstar
- 执行测试命令:
python -m unittest test/**/!(*subtest*)/*_test.py
globstar:让**匹配任意深度的子目录!(*subtest*):排除名称包含subtest的目录
以上两种方式都不需要编写额外代码或脚本,完全通过命令行工具组合实现直接跳过指定子目录的测试需求。
内容的提问来源于stack exchange,提问作者Ainz
相关产品推荐
相关产品推荐

