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