Как встроить изображение 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», и это должна быть длинная строка символов. Я понятия не имею, как это решить.


person Prr    schedule 11.06.2018    source источник


Ответы (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-файл автономного отчета может не отображать эти изображения должным образом.

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

person hoefling    schedule 11.06.2018