तो, मैंने अभी दिन खोने का प्रयास करने का प्रयास किया है, यह जानने का प्रयास कर रहा है कि क्यों py.test
मेरे ऑटहाउस, सत्र-स्कोप्ड सेटअप और टियरडाउन फिक्स्चर को निष्पादित नहीं कर रहा है। अंत में मैं (this SO comment को टोपी टिप!) पर ठोकर खाई plugins documentation में इस छोटे से tidbit:मैं subdirectory में conftest.py को पहचानने के लिए py.test कैसे प्राप्त करूं?
ध्यान दें कि उप निर्देशिका से फाइल conftest.py डिफ़ॉल्ट उपकरण स्टार्टअप पर लोड नहीं द्वारा कर रहे हैं।
मेरी परियोजना में, मैं एक tests/
उपनिर्देशिका है, जो एक सुंदर मानक सेटअप की तरह लगता है मेरे py.test फ़ाइलें (conftest.py
और परीक्षण फ़ाइलें) मिला है। यदि मैं परीक्षण निर्देशिका में py.test
चलाता हूं, तो सब ठीक से चलता है। यदि मैं प्रोजेक्ट रूट निर्देशिका में py.test
चलाता हूं, तो परीक्षण अभी भी चलते हैं, लेकिन सेटअप/टियरडाउन दिनचर्या कभी भी निष्पादित नहीं होती है।
सवाल:
- "प्रामाणिक" जिस तरह से उपयोगकर्ताओं को सही ढंग से परियोजना जड़ dir से परीक्षण चलाने के लिए सक्षम करने के लिए क्या है? रूट निर्देशिका में
conftest.py
डालने से मुझे अजीब लगता है, क्योंकि मुझे लगता है कि सभी परीक्षण-संबंधित फाइलेंtests
उपनिर्देशिका में रहनी चाहिए। - क्यों (डिजाइन-वार)
conftest.py
उपनिर्देशिका में डिफ़ॉल्ट रूप से लोड नहीं हैं? मुझे यह व्यवहार उत्सुकता से कम से कम कहने के लिए उत्सुक लगता है, परीक्षण उपनिर्देशिकाओं में डिफ़ॉल्ट रूप से खोजे जाते हैं, इसलिए ऐसा लगता है कि कंक्रीट फाइलों को खोजने में बहुत कम प्रयास किए गए हैं। - आखिरकार, मेरे पास उपनिर्देशिका लोड में
conftest.py
कैसे हो सकता है (यानी डिफ़ॉल्ट से दूर हो)? मैं इसे दस्तावेज़ों में नहीं ढूंढ सका। यदि संभव हो तो मैं अतिरिक्त कंसोल तर्कों से बचना चाहता हूं, तो क्या मैं किसी कॉन्फ़िगरेशन फ़ाइल या में कुछ भी डाल सकता हूं?
कोई अंतर्दृष्टि और सुझावों की बहुत सराहना की जाती है, मुझे लगता है कि जब मैं अपनी परियोजना के लिए परीक्षण लिख सकता था तो मुझे यह निदान करने में काफी समय लगता था। :-(
मिनिमल उदाहरण:
# 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