2016-02-04 3 views
3

Я заинтересован в переносе моего набора тестов из использования носа в использование py.test. Мне не нравятся имена тестов, напечатанные py.test в сводке неудачных тестов, потому что они не включают имя файла теста. Мне действительно нравятся имена тестов, которые py.test использует для печати прогресса в подробном режиме.Измените имя тестов py.test

Например:

[dbw tests]$ py.test -sv r_group/test_meta_analysis/test_meta_analysis.py::_TestPanel::testDisplaySummary 
==================================== test session starts =============================== 
collected 3 items 

r_group/test_meta_analysis/test_meta_analysis.py::_TestPanel::testDisplaySummary FAILED 

========================================= FAILURES ===================================== 
_______________________________ _TestPanel.testDisplaySummary __________________________ 

Это очень важно для меня, потому что у меня есть ~ 40K тестов, а также сокращенное название «_TestPanel.testDisplaySummary» не помогает мне в быстро найти тест, который я хочу. Я предполагаю, что есть встроенный крюк py.test, который сделает это, но я еще не нашел его.

ответ

2

Метод summary_failures()_pytest.terminal.TerminalReporter - это тот, который печатает эту строку (я нашел ее, выполнив поиск строки «FAILURES»). Он использует _getfailureheadline() для получения имени теста (и для отказа от имени файла и номера строки).

Я предлагаю подклассы TerminalReporter и переопределить _getfailureheadline().

Например:

def _getfailureheadline(self, rep): 
    if hasattr(rep, 'location'): 
     fspath, lineno, domain = rep.location 
     return '::'.join((fspath, domain)) 
    else: 
     return super()._getfailureheadline(rep) 

Производит следующий вывод:

test.py::test_x FAILED 

================ FAILURES ================ 
____________ test.py::test_x _____________ 

Вы можете переопределить репортер по умолчанию с вашим собственным путем writing a new plugin следующими:

class MyOwnReporter(TerminalReporter): 
    ... 

def pytest_configure(config): 
    reporter = MyOwnReporter(config, sys.stdout) 
    config.pluginmanager.register(reporter, 'terminalreporter') 
+0

Х. My conftest.py загружается до _pytest.terminal, поэтому, когда _pytest.terminal пытается зарегистрироваться, он попадает в ошибку. Думаю, мне нужно будет это сделать в отдельный плагин. – dbn

+1

@ dbw: да, я предлагаю использовать плагин –

+0

Даже в отдельном плагине я все еще вижу трассировку, когда _pytest.terminal пытается зарегистрироваться. Я попытаюсь посмотреть, есть ли способ контролировать порядок регистрации. – dbn

Смежные вопросы