Как автоматически делать скриншот при падении Selenium теста в py.test
Показанный ниже код будет автоматически делать скриншоты при неуспехе теста.
Он делает это только для Selenium тестов различая их по имени фикстуры
с Selenium webdriver browser
- если вы используете другое имя то вам надо
поправить этот код.
Я использую allure для построения отчетов по тестам и данный код помещает скриншот в отчет allure.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@pytest.hookimpl(tryfirst=True, hookwrapper=True) | |
def pytest_runtest_makereport(item, call): | |
outcome = yield | |
rep = outcome.get_result() | |
if rep.when == 'call' and rep.failed: | |
mode = 'a' if os.path.exists('failures') else 'w' | |
try: | |
with open('failures', mode) as f: | |
if 'browser' in item.fixturenames: | |
web_driver = item.funcargs['browser'] | |
else: | |
print('Fail to take screen-shot') | |
return | |
allure.attach( | |
web_driver.get_screenshot_as_png(), | |
name='screenshot', | |
attachment_type=allure.attachment_type.PNG | |
) | |
except Exception as e: | |
print('Fail to take screen-shot: {}'.format(e)) |
В итоге вы получите отчет похожий на приведеный на картинке выше.
Вы можете посмотреть на полный код тестов.
Или узнать как с минимальными усилиями можно развернуть Selenium + Allure конфигурацию для тестов из моей статьи.