Получение ВСЕХ ТИПОВ результатов модульного тестирования 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 ... -run-execu
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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