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

时间:2018-06-11 19:08:38

标签: pytest python-appium 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>

我希望&#34; src&#34;不以&#34; .png&#34;结束它应该是长字符串。我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

您的代码是正确的。但是,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文件可能无法按预期显示这些图像。

     

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