如何使用pytest-html在HTML中嵌入base64图像?



我正在使用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"结尾,它应该是一长串字符。我不知道如何解决这个问题。

你的代码是正确的。但是,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相关位置:

创建独立报表

为了遵守内容安全策略 (CSP(,默认情况下,CSS 和图像等多个资产是分开存储的。您也可以创建一个独立的报告,这在共享结果时会更方便。这可以通过以下方式完成:

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

作为文件或链接添加的图像将作为外部资源链接,这意味着独立报表 HTML 文件可能无法按预期显示这些图像。

该插件将在向独立报告添加文件或链接时发出警告。

相关内容

  • 没有找到相关文章

最新更新