2014-10-29 2 views
0

Есть ли простой способ добавить дополнительный вывод к ошибкам утверждения по умолчанию?Добавление к выходу утверждения py.test по умолчанию

Я могу полностью выполнить вывод с pytest_assertrepr_compare, но я не могу получить вывод по умолчанию и добавить к нему свое настраиваемое сообщение.

Вот что я пробовал:

from _pytest.assertion.util import assertrepr_compare 
def pytest_assertrepr_compare(config, op, left, right): 
    # append log output to normal compare 
    pytest_output = assertrepr_compare(config, op, left, right) 
    return pytest_output + ['THIS IS MY CUSTOM MESSAGE'] 

assertrepr_compare не возвращает ничего в этом примере. Любые мысли о том, как достичь этого?

+0

Я считаю, что это [дубликат] (http://stackoverflow.com/questions/3807694/how-to-change-the-message-in-a-python-assertionerror) –

+0

Я хочу глобально изменить вывод для py.test, а не для каждого отдельного утверждения. – jdennison

+0

Я все еще думаю, что добавление 'e.args' будет работать. Я могу выполнить некоторые тестовые примеры, если это не так. –

ответ

0

Когда pytest_assertrepr_compare() возвращает None, это означает, что настройка не происходит. Это означает, что если вы попробовали свой пример с чем-то, что вызвало бы подробное объяснение в _pytest.assertion.util.assertrepr_compare, это сработало бы, например. assert 'foo' == 'bar'.

К сожалению, у вас не может быть этого дополнительного объяснения, созданного модулем перезаписи.

Существует уже некоторый механизм внутри, однако, например, когда вы пишете assert 1 == 2, 'custom note', вы получите желаемый эффект, но это не глобально.

Так что я считаю, что есть возможность улучшить настройку отчетности еще больше, и, похоже, в последнее время появилось несколько случаев использования. Не могли бы вы описать этот прецедент в новой проблеме на трекере, пожалуйста?

0

мне удалось достичь этого путем прикрепления информации отказа строки в конфигурационном аргумент pytest_assertrepr_compare:

def pytest_assertrepr_compare(config, op, left, right): 
    if hasattr(config, "failure_info") and config.failure_info != None: 
     print "Appended Failure Info:" 
     print config.failure_info 
     # Set to None to avoid the same failure_info for other tests 
     config.failure_info = None 

    # return None to trigger the default behavior 
    return None 

Назад в тесте я хотел бы сделать что-то вроде:

def test_something(request): 
    request.config.failInfo = 'THIS IS MY CUSTOM MESSAGE' 
    assert 1 == 2 

Поскольку захватил стандартный вывод/stderr всегда печатается для неудачных тестов, вам не нужно беспокоиться о том, что ваш fail_info никогда не печатается.

Надеюсь, это поможет!

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