我正在寻找一种运行python -m unittest discover
的方法,它将在目录A,B和C中发现测试。但是,目录A,B和C具有名为{{1}的目录在他们每个人的内部,其中也有一些测试但是,我不想跑。
有没有办法运行我的测试来满足这些约束而无需为此创建脚本?
答案 0 :(得分:2)
我遇到了同样的问题,最终能够找到这些方便的参数传递给unittest发现解决了我的问题。
此处记录:https://docs.python.org/2/library/unittest.html#test-discovery
-s, --start-directory directory
Directory to start discovery (. default)
-p, --pattern pattern
Pattern to match test files (test*.py default)
所以我修改了我的命令:
python -m unittest discover -s test
因为我实际想要运行的所有测试都在一个模块中进行测试。你也可以使用-p来理论匹配只能命中测试的正则表达式,忽略它可能找到的所有其余部分。
答案 1 :(得分:0)
似乎python -m unittest
下降到模块目录中,但不会下降到其他目录中。
它很快尝试了以下结构
temp
+ a
- test_1.py
+ dependencies
- test_a.py
结果
>python -m unittest discover -s temp\a
test_1
.
----------------------------------------------------------------------
Ran 1 test in 0.002s
OK
但是,如果目录是模块目录(包含文件__init__.py
),情况则不同。
temp
+ a
- __init__.py
- test_1.py
+ dependencies
- __init__.py
- test_a.py
结果是
>python -m unittest discover -s temp\a
test_a
.test_1
.
----------------------------------------------------------------------
Ran 2 tests in 0.009s
OK
此答案对您的有用性现在取决于您的文件夹dependencies
是否可以作为模块目录。
编辑:看到你的评论后
使用pytest
是一种选择吗?该测试运行器有许多命令参数,一个专门用于排除测试。
请参阅Changing standard (Python) test discovery
从他们的网站
在测试收集期间忽略路径
通过在cli上传递
--ignore=path
选项,您可以在收集过程中轻松忽略某些测试目录和模块。 pytest允许多个--ignore
选项
答案 2 :(得分:0)
我已经设法做到了(在* NIX中):
find `pwd` -name '*_test.py' -not -path '*unwanted_path*' \
| xargs python3 -m unittest -v
也就是说,测试是由find
发现的,它允许使用诸如路径模式排除之类的选项,然后将它们作为参数列表传递给unittest
命令。
请注意,由于find pwd
不接受find .
形式的相对路径,因此我不得不切换到./xxx
,通常我可以写unittest
(模块找不到)。