Я знаю об этом ответе, который успешно возвращает правильный результат модульного теста, если он попадает в категории PASS, FAIL или ERROR.
Однако есть и другие способы завершения теста: есть также SKIPPED, EXPECTED_FAILURE и UNEXPECTED_SUCCESS.
Я использую следующий код (в методе TearDown) для обработки как минимум PASS< /code>, FAIL, ERROR и ПРОПУЩЕНО:
Код: Выделить всё
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)
Код: Выделить всё
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)
- всегда имеет значение False
Код: Выделить всё
self._outcome.expecting_failure
- всегда имеет значение True
Код: Выделить всё
self._outcome.success
- всегда равно []
Код: Выделить всё
self._outcome.result.unexpectedSuccesses
- возвращает общий результат выполнения теста, а не только текущего теста.
Код: Выделить всё
self._outcome.result.wasSuccessful()
Есть ли у кого-нибудь идеи? pytest лучше в этом отношении?
Подробнее здесь: https://stackoverflow.com/questions/792 ... own-method