Как встроить изображение base64 в HTML с помощью pytest-html?

Я использую клиент 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 ответ

Решение

Ваш код правильный. Тем не менее, стандартное поведение 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-файл отчета может отображать эти изображения не так, как ожидалось.

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

Другие вопросы по тегам