因此,我剛剛失去了天試圖找出爲什麼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 ======================================================
適合我。 http://ascii.io/a/5263 – falsetru
是的,同時我發現這是一個已經修復的錯誤。 – Christoph