2013-09-01 5 views
15

तो, मैंने अभी दिन खोने का प्रयास करने का प्रयास किया है, यह जानने का प्रयास कर रहा है कि क्यों 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 ====================================================== 
+0

मेरे लिए ठीक काम करता है। http://ascii.io/a/5263 – falsetru

+0

हां, इस बीच में मुझे पता चला कि यह पहले से ही एक निश्चित बग था। – Christoph

उत्तर

9

#pylib आईआरसी चैनल पर कुछ मदद करने के बाद, यह पता चला है कि यह एक बग था जिसे py.test 2.3.4 में तय किया गया है।

+1

यह मेरे लिए काम नहीं करता है। मेरे पास 'test /' में 'conftest.py' है लेकिन इसका कोई प्रभाव नहीं है। असल में https://github.com/pytest-dev/pytest/issues – orome

+0

@raxacoricofallapatorius शायद सबसे अच्छा pytest के खिलाफ एक बग रिपोर्ट करने के। बल्कि की तुलना में 'परीक्षा /' मेरी पैकेज/परियोजना की जड़ में, मैं इसे अपने पैकेज में (अकेला) मॉड्यूल के लिए फ़ोल्डर में है। क्या यह वहां नहीं होना चाहिए? मेरी समझ था प्रत्येक मॉड्यूल का अपना 'परीक्षा /' फ़ोल्डर (और परीक्षण ऐसे फ़ोल्डर में रखा चला सकता हूँ) हो सकता था। ऐसा नहीं है। क्या मेरे पास 'test/'फ़ोल्डर होना चाहिए (या मेरा' conftest।py') मेरे पैकेज की जड़ पर? – Christoph

+0

, मेरे मामले में यह थोड़ा अलग है: – orome

संबंधित मुद्दे