2016-07-11 20 views
5

Mam debugowanie przerywanego niepowodzenia testu. W tym celu chcę zrzucić wiele informacji debugowania, jeśli test się nie powiódł. Dumpingowe debugowanie jest dość powolnym procesem, który generuje dużo danych, więc nie chcę tego robić dla każdego testu.Wykryj, czy test zakończył się niepowodzeniem w urządzeniu

Używam pytest i wydajności urządzenie autouse powinien działać wielki

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

    yield 

    if test_failed(request): 
     debug_dump() 

Problem polega na tym, że nie mogę dowiedzieć się, w jaki sposób wykryć, czy próba nie powiodła się, czy też nie. Było a questions already a nawet pamiętać 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) 

Niestety ten kod już nie działa. W obiekcie węzła nie ma symboli rep_setup i rep_calls. Próbowałem wykopać obiekt zapytania i węzła, ale bez powodzenia.

Ktoś wie, jak wykryć, czy test się nie powiódł?

+0

Haczyk 'pytest_runtest_makereport' w podanym przykładzie * dodaje * te atrybuty" rep_ * ". Czy na pewno to też dodałeś? –

Odpowiedz

0

Brak symboli rep_setup i rep_calls w obiekcie węzła.

Symbole nrrepreset i rep_calls nadal istnieją.

Dodaj ten kod do swojego root'a conftest.py. Sprawdza pass/fail dla każdej funkcji testowej.

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) 
Powiązane problemy