运行unittest发现忽略特定目录

时间:2016-09-06 21:56:29

标签: python python-2.7 python-unittest

我正在寻找一种运行python -m unittest discover的方法,它将在目录A,B和C中发现测试。但是,目录A,B和C具有名为{{1}的目录在他们每个人的内部,其中也有一些测试但是,我不想跑。

有没有办法运行我的测试来满足这些约束而无需为此创建脚本?

3 个答案:

答案 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(模块找不到)。