2012-05-29 100 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"]