Как встроить изображение base64 в HTML с помощью pytest-html? - PullRequest
0 голосов
/ 11 июня 2018

Я использую клиент python-appium и создаю отчет HTML после завершения тестов.Я хотел бы добавить встроенные изображения тестов на неудачу в отчет HTML.Причина встраивания изображения заключается в том, что я могу получить к нему доступ и с удаленной машиныВот код, который я пробовал и не работает в другой системе, но локально он работает:

@pytest.mark.hookwrapper
def pytest_runtest_makereport(item):
pytest_html = item.config.pluginmanager.getplugin('html')
outcome = yield
report = outcome.get_result()
extra = getattr(report, 'extra', [])

if report.when == 'call' or report.when == 'setup':
    xfail = hasattr(report, 'wasxfail')
    if (report.skipped and xfail) or (report.failed and not xfail):
        screenshot = driver.get_screenshot_as_base64()
        extra.append(pytest_html.extras.image(screenshot, ''))
    report.extra = extra

Мне кажется, что закодированное изображение не генерируется должным образом, как это я вижу ввыходной HTML-файл:

<td class="extra" colspan="4">
        <div class="image"><a href="assets/75870bcbdda50df90d4691fa21d5958b.png"><img src="assets/75870bcbdda50df90d4691fa21d5958b.png"/></a></div>

, и я ожидаю, что "src" не будет заканчиваться на ".png", и это должна быть длинная строка символов.Я понятия не имею, как решить эту проблему.

1 Ответ

0 голосов
/ 11 июня 2018

Ваш код правильный.Однако стандартное поведение pytest-html состоит в том, что даже если вы передадите изображение в виде строки base64, оно все равно сохранит файл в каталоге assets.Если вы хотите встроить ресурсы в файл отчета, вам нужно передать параметр --self-contained-html:

$ pytest --html=report.html --self-contained-html

или сохранить параметр в pytest.ini:

 # pytest.ini (or tox.ini or setup.cfg)
 [pytest]
 addopts = --self-contained-html

Для полноты вот соответствующее место в pytest-html readme :

Создание автономного отчета

Для соблюдения безопасности контентаПолитика (CSP), несколько ресурсов, таких как CSS и изображения, хранятся отдельно по умолчанию.В качестве альтернативы вы можете создать отдельный отчет, который может быть более удобным при публикации ваших результатов.Это можно сделать следующим образом:

$ pytest --html=report.html --self-contained-html

Изображения, добавленные в виде файлов или ссылок, будут связаны как внешние ресурсы, что означает, что автономный HTML-файл отчета может отображать эти изображения не так, как ожидалось.

Плагин выдаст предупреждение при добавлении файлов или ссылок в отдельный отчет.

...