13

我试图py.test在我的包上运行,但它试图setup.py从项目根目录中解析,即使我试图排除它。

我需要从 *.py 文件中收集测试,因为测试类包含在模块中。

# setup.cfg
[pytest]
norecursedirs = .svn _build tmp* lib/third lib *.egg bin distutils setup.py
python_files = *.py

仍然当我运行py.test它会给我ERROR collecting setup.py我已经排除的。

/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/core.py:140: in setup
>           raise SystemExit, gen_usage(dist.script_name) + "\nerror: %s" % msg
E           SystemExit: usage: py.test [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
E              or: py.test --help [cmd1 cmd2 ...]
E              or: py.test --help-commands
E              or: py.test cmd --help
E           
E           error: no commands supplied
4

4 回答 4

19

您可以像这样为您的 pytest.ini 配置配置 --ignore 选项:

addopts = --ignore=setup.py

如果您在根目录中并且希望 py.test 忽略 setup.py 文件,这应该会有所帮助。

于 2012-05-29T20:54:51.320 回答
2

从文档(和变量的名称)来看,它看起来norecursedirs只是跳过了目录,所以因为setup.py是一个文件,所以把它放进去norecursedirs没有效果。

http://pytest.org/latest/customize.html?highlight=norecursedirs#confval-norecursedirs

于 2012-05-29T18:20:14.380 回答
1

pytest 文档将答案埋在这里。在项目的根目录中放置一个conftest.py文件,其中列出了您要pytest忽略的文件:

然而,许多项目会有一个他们不想被导入的 setup.py。此外,可能存在只能由特定 python 版本导入的文件。对于这种情况,您可以通过在 conftest.py 文件中列出文件来动态定义要忽略的文件:


 # content of conftest.py
 import sys

 collect_ignore = ["setup.py"]

于 2014-03-25T04:12:13.053 回答
0

Jedi中,我们通过添加conftest.py内容为collect_ignore = ["setup.py"]. 这使它“神奇地”工作。

恕我直言 py.test 应该更容易忽略setup.py,因为这是一个非常典型的用例。

于 2013-09-23T17:08:34.500 回答