如何在Karate Docker CI执行中彻底禁用视频录制?
Karate UI自动化CI环境视频录制问题解决办法
问题描述
我使用Karate 1.5.0进行UI自动化测试,通过Docker(镜像:karatelabs/karate-chrome:1.5.0)在CI环境运行测试,配置如下:
karate.configure('driverTarget', { docker: 'karatelabs/karate-chrome:1.5.0', showDriverLog: false, timeout: 60000 });
尽管已尝试设置video: false,但master分支的CI执行时,target/karate-reports目录仍会生成.mp4文件,导致CPU和存储占用过高;其他分支运行时不会录制视频。怀疑原因是karate.env未正确识别为ci,或是Docker入口点覆盖了配置。需要找到在CI Docker执行中完全停止视频录制的方法,降低CPU/内存负载。
解决方案
1. 强制在driver配置中关闭视频录制
确保video: false直接写入driverTarget核心配置,同时检查测试代码中是否有单个driver启动时的配置覆盖全局设置:
karate.configure('driverTarget', { docker: 'karatelabs/karate-chrome:1.5.0', showDriverLog: false, timeout: 60000, video: false // 明确添加此配置项 });
若存在单独启动driver的代码,也需显式关闭视频:
driver { type: 'chrome', video: false }
2. 确保karate.env正确设置为ci
Karate在ci环境下默认会禁用视频录制,但如果环境变量未正确传递,会导致识别失败。需在CI流水线中强制设置环境变量:
- Jenkins:在构建步骤添加命令
export karate.env=ci - GitLab CI:在
.gitlab-ci.yml中添加变量配置:
variables: karate.env: ci
可在测试代码中添加日志验证环境是否正确识别:
karate.log('当前运行环境:', karate.env);
3. 覆盖Docker镜像的默认视频录制行为
karatelabs/karate-chrome镜像可能默认启用视频录制,可通过传递环境变量给容器强制关闭:
- 直接运行Docker容器时添加参数:
docker run -e KARATE_VIDEO=false karatelabs/karate-chrome:1.5.0 ...
- 通过Karate的docker配置传递环境变量:
karate.configure('driverTarget', { docker: { image: 'karatelabs/karate-chrome:1.5.0', env: { KARATE_VIDEO: 'false' } }, showDriverLog: false, timeout: 60000, video: false });
4. 检查分支特定配置差异
master分支可能存在单独的配置文件(如karate-config.js的分支版本差异),对比master与其他分支的配置文件,确认没有强制开启视频录制的差异化设置。
5. 流水线添加视频清理步骤
若以上方法仍有残留视频文件,可在CI测试执行完成后添加清理命令:
rm -rf target/karate-reports/*.mp4
内容的提问来源于stack exchange,提问作者satheesh kannan k
相关产品推荐
相关产品推荐

