pytest - 如何使用 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 文件可能无法按预期显示这些图像。
将文件或链接添加到独立报告时,插件会发出警告。
推荐阅读
- docker - docker-compose.yml 中另一个变量中的用户变量如何
- php - 获取每张图片的具体记录
- r - 计算单词的长度并切割低于阈值的行
- java - 战舰游戏的 2D 阵列中的船舶重叠问题,Java
- javascript - show/hide div using javascript
- ios - SSL Error occurs in URL Session data task call back in certain devices only
- javascript - Typescript check if promise body does not call `resolve`
- sql - SQL Query to calculate the hours between two dates grouped by days
- java - 通过 java.nio 使用 BOM 编写以 UTF-8 编码的文本文件
- ios - swift中在表格视图中选择字母部分的事件生成