2012-05-29 57 views
13

我试图在我的包上运行py.test,但它试图从项目根目录中解析setup.py,即使我试图排除它。尝试运行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 

回答

19

可以配置--ignore选项将pytest.ini配置这样的可能:

addopts = --ignore=setup.py 

应该帮助,如果你是在根目录下,并希望py.test到忽略setup.py文件。

+0

该死的,这意味着如果我有另一个'setup.py',它也会被包含在内。另外,tox无法在父目录中查找tox.ini ?! – sorin

+1

为了避免包含其他setup.py文件,我认为pytest.ini需要一种方法来允许指定像--ignore = {inidir} /setup.py这样的确切位置。 – hpk42

2

从它看起来像norecursedirs的文档(和变量的名称)仅跳过目录,这样以来setup.py是一个文件,将它放在norecursedirs没有任何效果。

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

+0

感谢,对议论它。这仍然不能解决我的问题。从这些我会假设如果你想查找'* .py',就不可能阻止'py.test'加载'setup.py'。仍然出现错误,因为'py.test'试图执行'setup.py'。也许有一件事我可以用setup.py来做,以使其'py.test'友好。 – sorin

0

Jedi我们已经通过添加conftest.py文件的内容collect_ignore = ["setup.py"]解决了这个问题。这使得它“神奇地”工作。

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

1

的pytest文档有答案掩埋掉here.将一个conftest.py文件在你的项目的根目录,列出你想pytest忽略文件:

然而,很多项目都会有一个setup.py他们不希望被导入。而且,有些文件只能通过特定的python版本导入。对于这样的情况,你可以动态定义文件,通过在conftest.py文件中列出它们忽略:


# content of conftest.py 
import sys 

collect_ignore = ["setup.py"]