2013-09-01 55 views
15

因此,我剛剛失去了試圖找出爲什麼py.test不執行我的汽車,會話範圍設置和拆卸夾具。最後,我絆倒了(帽尖到this SO comment!)在這plugins documentation小珍聞:如何讓py.test識別子目錄中的conftest.py?

注意,從子目錄conftest.py文件是通過工具啓動時不加載默認。

在我的項目,我在tests/子目錄,這似乎是一個相當標準的建立得到了我的py.test文件(conftest.py和測試文件)。如果我在測試目錄中運行py.test,所有內容都可以正常運行。如果我在項目根目錄下運行py.test,測試仍在運行,但安裝/拆卸例程從未得到執行

問題:

  • 什麼是「規範」的方式,使正常運行從項目的根目錄的測試用戶?將conftest.py放在根目錄下會讓我覺得很奇怪,因爲我覺得所有與測試有關的文件都應該保留在tests子目錄中。
  • 爲什麼(設計明智)不conftest.py的子目錄中的默認不加載?我覺得這種行爲很好奇,至少可以這麼說,考慮到測試在子目錄中是默認發現的,所以在查找conftest文件中似乎也只有很少的額外努力。
  • 最後,我怎麼能在子目錄負荷conftest.py(即更改默認的距離)?我無法在文檔中找到它。如果可能的話,我想避免額外的控制檯 參數,所以我可以把任何東西放在配置文件或 whatnot?

任何洞察力和技巧都非常讚賞,我覺得當我可以爲我的項目編寫測試時,我很失望/浪費時間去診斷這個問題。 :-(

最少例如:

# content of tests/conftest.py 
# adapted from http://pytest.org/latest/example/special.html 
import pytest 
def tear_down(): 
    print "\nTEARDOWN after all tests" 

@pytest.fixture(scope="session", autouse=True) 
def set_up(request): 
    print "\nSETUP before all tests" 
    request.addfinalizer(tear_down) 

測試文件:

# content of tests/test_module.py 
class TestClassA: 
    def test_1(self): 
     print "test A1 called" 
    def test_2(self): 
     print "test A2 called" 

class TestClassB: 
    def test_1(self): 
     print "test B1 called" 

控制檯輸出:

pytest_experiment$ py.test -s 
======================================================== test session starts ========================================================= 
platform linux2 -- Python 2.7.4 -- pytest-2.3.2 
plugins: cov 
collected 3 items 

tests/test_module.py test A1 called 
.test A2 called 
.test B1 called 
. 

====================================================== 3 passed in 0.02 seconds ====================================================== 
pytest_experiment$ cd tests/ 
pytest_experiment/tests$ py.test -s 
======================================================== test session starts ========================================================= 
platform linux2 -- Python 2.7.4 -- pytest-2.3.2 
plugins: cov 
collected 3 items 

test_module.py 
SETUP before all tests 
test A1 called 
.test A2 called 
.test B1 called 
. 
TEARDOWN after all tests 


====================================================== 3 passed in 0.02 seconds ====================================================== 
+0

適合我。 http://ascii.io/a/5263 – falsetru

+0

是的,同時我發現這是一個已經修復的錯誤。 – Christoph

回答

9

在#pylib IRC頻道一些幫助之後,原來這是一個已在py.test 2.3.4中修復的錯誤。

+1

這不適合我。我在'tests /'中有'conftest.py',但它沒有效果。 – orome

+0

@raxacoricofallapatorius可能是最好的報告pytest的錯誤:https://github.com/pytest-dev/pytest/issues – Christoph

+0

其實,在我的情況下,它有點不同。我的軟件包/項目的根目錄不是'test /',而是包含在我的包中的(獨立)模塊的文件夾中。它不應該在那裏嗎?我的理解是每個模塊都可以有自己的'test /'文件夾(並且測試放在這樣的文件夾下運行)。情況並非如此。我應該有一個'測試/'文件夾(或我的'conftest。py')在我的包的根? – orome

相關問題