Я знаю об этом ответе, который успешно извлекает правильный результат модульного теста в методе TearDown, если он попадает в категории PASS, FAIL или ERROR.< /p>
Однако есть и другие способы завершения теста: также есть SKIPPED, EXPECTED_FAILURE и UNEXPECTED_SUCCESS.
Я использовал следующий код для обработки как минимум PASS , FAIL, ERROR и ПРОПУЩЕНО:
Код: Выделить всё
import unittest
class MyTestCase(unittest.TestCase):
def tearDown(self):
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
failureMsg = list2reason(result.failures)
errorMsg = list2reason(result.errors)
skippedMsg = list2reason(result.skipped)
isFailure = bool(failureMsg)
isError = bool(errorMsg)
isSkipped = bool(skippedMsg)
# Here, I want to add the result to a spreadsheet.
# For simplicity, I'll just print the result.
print()
if isFailure:
print('FAIL')
elif isError:
print('ERROR')
elif isSkipped:
print('SKIPPED')
else:
print('PASS')
def test_01_pass(self):
self.assertTrue(True)
def test_02_fail(self):
self.assertTrue(False)
def test_03_error(self):
raise ZeroDivisionError
def test_04_skip(self):
self.skipTest('')
@unittest.expectedFailure
def test_05_expectedFailure(self):
self.assertTrue(False)
@unittest.expectedFailure
def test_06_unexpectedSuccess(self):
self.assertTrue(True)
if __name__ == '__main__':
unittest.main()
Код: Выделить всё
expFailure = self._outcome.expectedFailure
expFailureMsg = f'{expFailure[0].__name__}: {expFailure[1]}' if expFailure else None
isExpFailure = bool(expFailureMsg)
# Here, I want to add the result to a spreadsheet.
# For simplicity, I'll just print the result.
print()
if isFailure:
print('FAIL')
elif isError:
print('ERROR')
elif isSkipped:
print('SKIPPED')
elif isSkipped:
print('SKIPPED')
elif isExpFailure:
print('EXPECTED_FAILURE')
else:
print('PASS')
- всегда имеет значение False
Код: Выделить всё
self._outcome.expecting_failure
- всегда имеет значение True
Код: Выделить всё
self._outcome.success
- всегда равно []
Код: Выделить всё
self._outcome.result.unexpectedSuccesses
- возвращает общий результат выполнения теста, а не только текущего теста.
Код: Выделить всё
self._outcome.result.wasSuccessful()
Есть ли у кого-нибудь идеи? pytest лучше в этом отношении?
Подробнее здесь: https://stackoverflow.com/questions/792 ... -execution