Получение результатов модульного тестирования Python сразу во время выполнения тестаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Получение результатов модульного тестирования Python сразу во время выполнения теста

Сообщение Anonymous »

Я провожу большие тесты (от нескольких часов до дней с сотнями тестов) и хочу видеть прогресс в электронной таблице. В этой таблице тот же результат, который unittest выводит на консоль (то есть ., F или E), должен быть вставлен сразу после завершения каждого отдельного теста.
Я знаю об этом ответе, который успешно извлекает правильный результат модульного теста в методе TearDown, если он попадает в категории PASS, FAIL или ERROR.< /p>
Однако есть и другие способы завершения теста: также есть SKIPPED, EXPECTED_FAILURE и UNEXPECTED_SUCCESS.
Я использовал следующий код (в TearsDown< /code> метод) для обработки как минимум PASS, FAIL, ERROR и SKIPPED:

Код: Выделить всё

def list2reason(exc_list):
"""Converts test-result structure to str."""
if exc_list and exc_list[-1][0] is self:
return exc_list[-1][1]

if hasattr(self, '_feedErrorsToResult'):
# for Python 3.4 - 3.10
result = self.defaultTestResult()
self._feedErrorsToResult(result, self._outcome.errors)
result.skipped = self._outcome.skipped
else:
# for Python 3.11+
result = self._outcome.result

errorMsg   = list2reason(result.errors)
failureMsg = list2reason(result.failures)
skippedMsg = list2reason(result.skipped)

isError    = bool(errorMsg)
isFailure  = bool(failureMsg)
isSkipped  = bool(skippedMsg)
isSuccess  = not (isError or isFailure or isSkipped)
Мне также удалось получить EXPECTED_FAILURE, изменив последний абзац на это:

Код: Выделить всё

expFailure    = self._outcome.expectedFailure
expFailureMsg = f'{expFailure[0].__name__}: {expFailure[1]}' if expFailure else None

isError      = bool(errorMsg)
isFailure    = bool(failureMsg)
isSkipped    = bool(skippedMsg)
isExpFailure = bool(expFailureMsg)
isSuccess    = not (isError or isFailure or isSkipped or isExpFailure)
Однако я ни в коем случае не могу получить информацию о UNEXPECTED_SUCCESS, поэтому мой код неправильно интерпретирует этот случай как PASS.Мои выводы:
  • Код: Выделить всё

    self._outcome.expecting_failure
    всегда имеет значение False
  • Код: Выделить всё

    self._outcome.success
    всегда имеет значение True
  • Код: Выделить всё

    self._outcome.result.unexpectedSuccesses
    всегда равно []
  • Код: Выделить всё

    self._outcome.result.wasSuccessful()
    возвращает общий результат выполнения теста, а не только текущего теста.
И под словом «всегда» я имею в виду всегда. Я не помню, чтобы видел что-то другое для какого-либо типа результата. Просматривая данные, хранящиеся в self._outcome , я не вижу способа получить нужную мне информацию.
Есть ли у кого-нибудь идеи? pytest лучше в этом отношении?

Подробнее здесь: https://stackoverflow.com/questions/792 ... -execution
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»