Снимок экрана при сбое теста в методе tearDown()
Я пытаюсь сделать скриншот в конце проваленного теста
Я сделал что-то, что работает, но есть проблема: он делает скриншот каждого теста, который происходит после того, как тот провалился - например: 1. Тест пройден: нет скриншота 2. Тест не пройден: скриншот 3. Тест пройден: скриншот - так после первой ошибки все тесты получают скриншот
Я знаю, что это проблема метода _resultForDoCleanups, который в моем случае не может быть заменен на _outcomeForDoCleanups.success, потому что я использую Python 2.7, а не 3.
Мой код:
def tearDown(self):
if self._test_has_failed():
if not os.path.exists(SCREEN_DUMP_LOCATION):
os.makedirs(SCREEN_DUMP_LOCATION)
for ix, handle in enumerate(self.driver.window_handles):
self._windowid = ix
self.driver.switch_to.window(handle)
self.take_screenshot()
self.driver.quit()
def _test_has_failed(self):
for method, error in self._resultForDoCleanups.errors:
if error:
return True
return False
def _get_filename(self):
timestamp = datetime.now().isoformat().replace(':', '.')[:19]
return "{folder}/{classname}.{method}-window{windowid}-{timestamp}".format(
folder=SCREEN_DUMP_LOCATION,
classname=self.__class__.__name__,
method=self._testMethodName,
windowid=self._windowid,
timestamp=timestamp
)
def take_screenshot(self):
filename = self._get_filename() + ".png"
print "\n{method} SCREENSHOT AND HTML:\n".format(
method=self._testMethodName)
print 'screenshot:', filename
self.driver.get_screenshot_as_file(filename)
1 ответ
Ваш код действительно близок к тому, что вы хотите, чтобы произошло.
Этот код использует комментарий @jonrsharpe
def tally(self):
return len(self._resultForDoCleanups.errors) + len(self._resultForDoCleanups.failures)
def setUp(self):
self.errors_and_failures = self.tally()
def tearDown(self):
if self.tally() > self.errors_and_failures:
# Take a screenshot
В начале каждого метода тестирования мы узнаем, сколько ошибок и сбоев у нас есть. Когда мы дойдем до метода tearDown, наш тестовый метод был выполнен, и мы узнаем, произошла ли ошибка. Метод подсчета будет на 1 выше, чем переменная self.errors_and_failures, которую мы установили перед тестовым методом.
Надеюсь, это то, что вы искали.