我正在使用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;结束它应该是长字符串。我不知道如何解决这个问题。
答案 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文件可能无法按预期显示这些图像。
在向独立报告添加文件或链接时,插件会发出警告。