pytest 3.0.5 с кириллическими символами

У меня проблема с отображением имен тестов с русским текстом в путях к файлам в pytest-3.0.5. Когда я запускаю на pytest == 2.9.2 - все в порядке:

py.test -s -q --collect-only

Выход:

test_card.py::test_graphic_card[/root/test_cases/files/Кредитная_карта_мир_41.png]

Но когда я пытаюсь запустить ту же команду на pytest == 3.0.5:

py.test -s -q --collect-only

Выход:

test_card.py::test_graphic_card[/root/test_cases/files/\xd0\x9a\xd1\x80\xd0\xb5\xd0\xb4\xd0\xb8\xd1\x82\xd0\xbd\xd0\xb0\xd1\x8f_\xd0\xba\xd0\xb0\xd1\x80\xd1\x82\xd0\xb0_\xd0\xbc\xd0\xb8\xd1\x80_41.png]

Что я должен сделать, чтобы py.test==3.0.5 отображал названия тестов, такие как display py.test==2.9.2?

1 ответ

Решение

Я посмотрел исходный код pytest и обнаружил, что в новейшей версии pytest, когда собраны тесты, они обрабатываются недавно добавленной функцией "_escape_strings". В этой функции:

if isinstance(val, bytes):
    try:
        return val.encode('ascii')
    except UnicodeDecodeError:                     
        return val.encode('string-escape')
    else:
        return val.encode('unicode-escape')

Я полагаю, что эта функция самоочевидна. Наконец, я решил свою проблему с декодированием и удалением результатов в итоговом отчете о тестировании, например:

result = "/root/test_cases/files/\xd0\x9a\xd1\x80\xd0\xb5\xd0\xb4\xd0\xb8\xd1\x82\xd0\xbd\xd0\xb0\xd1\x8f_\xd0\xba\xd0\xb0\xd1\x80\xd1\x82\xd0\xb0_\xd0\xbc\xd0\xb8\xd1\x80_41.png"
print result.decode('string-escape') 
Out: /root/test_cases/files/Кредитная_карта_мир_41.png
Другие вопросы по тегам