2016-07-11 20 views
5

के भीतर परीक्षण विफल रहा है, मैं एक अंतःविषय परीक्षण विफलता डीबग कर रहा हूं। यदि कोई परीक्षण विफल हुआ तो इस उद्देश्य के लिए मैं बहुत सारी डीबग जानकारी डंप करना चाहता हूं। डंपिंग डिबग सामान काफी धीमी प्रक्रिया है जो बहुत सारे डेटा उत्पन्न करता है, इसलिए मैं प्रत्येक परीक्षण के लिए ऐसा नहीं करना चाहता हूं।पता लगाएं कि परीक्षण

मैं pytest और उपज autouse स्थिरता का उपयोग कर रहा महान

@pytest.yield_fixture(scope="function", autouse=True) 
def dump_on_failue(request): 
    prepare_debug_dump() 

    yield 

    if test_failed(request): 
     debug_dump() 

समस्या काम करना चाहिए कि मैं समझ नहीं मैं कैसे पता नहीं लगा पाते कि परीक्षण में नाकाम रही है या नहीं है। वहाँ a questions already और यहां तक ​​कि ध्यान दें on pytest website था:

if request.node.rep_setup.failed: 
     print ("setting up a test failed!", request.node.nodeid) 
    elif request.node.rep_setup.passed: 
     if request.node.rep_call.failed: 
      print ("executing test failed", request.node.nodeid) 

दुर्भाग्य से इस कोड अब और काम नहीं करता। नोड ऑब्जेक्ट में कोई rep_setup और rep_calls प्रतीकों नहीं हैं। मैंने अनुरोध और नोड ऑब्जेक्ट खोदने की कोशिश की, लेकिन कोई भाग्य नहीं।

कोई भी जानता है कि परीक्षण कैसे विफल हुआ है या नहीं?

+0

आपके द्वारा सूचीबद्ध उदाहरण में 'pytest_runtest_makereport' हुक * उन * rep_ *' विशेषताओं को जोड़ता है। क्या आप वाकई इसे जोड़ चुके हैं? –

उत्तर

0

नोड ऑब्जेक्ट में कोई rep_setup और rep_calls प्रतीकों नहीं हैं।

No.rep_setup और rep_calls प्रतीकों अभी भी वहां हैं।

इस कोड को अपनी रूट में जोड़ें conftest.py। यह प्रत्येक परीक्षण समारोह के लिए पास/असफल जांच करेगा।

import pytest 

@pytest.mark.tryfirst 
def pytest_runtest_makereport(item, call, __multicall__): 
    rep = __multicall__.execute() 
    setattr(item, "rep_" + rep.when, rep) 
    return rep 

@pytest.fixture(scope='function', autouse=True) 
def test_debug_log(request): 
    def test_result(): 
     if request.node.rep_setup.failed: 
      print ("setting up a test failed!", request.node.nodeid) 
     elif request.node.rep_setup.passed: 
      if request.node.rep_call.failed: 
       print ("executing test failed", request.node.nodeid) 
    request.addfinalizer(test_result) 
संबंधित मुद्दे