Allure报告中Docker录制视频无法播放问题及解决方案咨询
解决Docker录屏文件未就绪时无法添加至Allure报告的问题
方案一:等待录屏文件写入完成
核心思路:WebDriverManager的Docker录屏进程可能在测试结束前仍后台写入视频,因此需先确认文件大小稳定(停止变化),再读取文件内容添加至报告。
实现代码
先封装等待文件就绪的工具方法:
private void waitForFileReady(String filePath, long timeoutMs, long checkIntervalMs) throws InterruptedException { File videoFile = new File(filePath); long previousSize = -1; long startTime = System.currentTimeMillis(); while (System.currentTimeMillis() - startTime < timeoutMs) { long currentSize = videoFile.length(); if (currentSize > 0 && currentSize == previousSize) { // 文件大小稳定,判定写入完成 return; } previousSize = currentSize; Thread.sleep(checkIntervalMs); } throw new RuntimeException("等待视频文件就绪超时,路径:" + filePath); }
修改allureVid方法,先等待文件就绪再读取:
public void allureVid() { String videoPath = "recordings\\chrome_25651151651.mp4"; try { // 等待10秒,每500毫秒检查一次文件状态 waitForFileReady(videoPath, 10000, 500); byte[] byteArr = IOUtils.toByteArray(new FileInputStream(videoPath)); Allure.addAttachment("测试失败录屏", "video/mp4", new ByteArrayInputStream(byteArr), "mp4"); } catch (IOException | InterruptedException e) { e.printStackTrace(); } }
方案二:添加本地文件链接至Allure报告
核心思路:不将视频内容嵌入报告,而是添加本地文件的直接链接,报告打开时直接访问本地已完成的视频文件,避免提前读取未写完的内容。
实现代码
修改allureVid方法,生成本地文件链接并添加到报告:
public void allureVid() { String videoPath = new File("recordings\\chrome_25651151651.mp4").getAbsolutePath(); try { // 可选:先等待文件写入完成 waitForFileReady(videoPath, 10000, 500); // 生成符合本地路径规则的Markdown链接 String linkMarkdown = String.format("[查看测试失败录屏](file:///%s)", videoPath.replace("\\", "/")); Allure.addAttachment("测试录屏链接", "text/markdown", new ByteArrayInputStream(linkMarkdown.getBytes()), "md"); } catch (IOException | InterruptedException e) { e.printStackTrace(); } }
注意事项
- 该方式仅在本地打开Allure报告时有效,若报告部署到远程服务器,需同步上传视频文件并替换为远程访问路径。
- Windows系统下本地链接需使用
file:///前缀,路径反斜杠需替换为正斜杠。
额外优化建议
- 避免使用固定文件名,可结合测试用例名称或UUID生成唯一文件名,防止多个测试用例覆盖同一视频文件。
- 将文件检查逻辑移至
afterTest阶段执行,而非beforeTestStop,确保WebDriver完全关闭、录屏进程结束后再处理文件。
内容的提问来源于stack exchange,提问作者Serhio
相关产品推荐
相关产品推荐

