Oppia项目中实现验收测试失败截图功能的实践
背景介绍
在自动化测试领域,测试失败时的调试一直是一个挑战。特别是在Web应用的验收测试中,当测试用例失败时,开发人员往往难以快速定位问题原因。Oppia项目作为一个在线学习平台,其测试套件包含端到端测试和验收测试两种类型。虽然端到端测试已经实现了失败时自动截图的功能,但验收测试尚未具备这一能力。
技术挑战
验收测试与端到端测试在技术实现上存在差异。Oppia的端到端测试使用WebdriverIO框架,而验收测试则基于Jest和Puppeteer组合。要实现类似的失败截图功能,需要解决几个关键技术问题:
- 如何捕获测试失败事件
- 如何在浏览器关闭前获取页面截图
- 如何管理多个浏览器实例的截图
- 如何将截图与GitHub Actions工作流集成
解决方案设计
自定义Jest环境
通过创建自定义的Jest环境类,可以拦截测试事件。当检测到test_done事件且测试包含错误时,将失败状态写入配置文件。这种设计避免了全局变量或环境变量的使用,确保了不同执行上下文间的状态共享。
浏览器实例管理
在BaseUser类中维护所有浏览器实例的引用。通过静态属性instances存储所有创建的实例,使得在测试失败时可以遍历所有活动实例进行截图操作。
截图处理流程
- 为每个失败的测试生成唯一的文件名,包含测试规格名和时间戳
- 创建专门的截图目录存储失败截图
- 对每个浏览器实例执行全页面截图
- 关闭浏览器实例前确保截图完成
实现细节
截图命名策略
采用specName-timestamp-instanceNumber.png的命名格式,确保每个截图都能准确对应到特定的测试和浏览器实例。特殊字符会被替换为下划线以保证文件系统兼容性。
多实例处理
支持同时处理多个浏览器实例的截图,每个实例都会生成独立的截图文件。这在并行测试场景下尤为重要,可以完整还原测试失败时的多窗口状态。
移动端适配
解决方案同样适用于移动端测试,能够捕获移动设备视口下的页面状态,为响应式布局的调试提供可视化参考。
实际效果
实现后,当验收测试失败时,系统会自动:
- 检测到测试失败事件
- 暂停浏览器关闭流程
- 对所有活动浏览器窗口进行截图
- 将截图保存到指定目录
- 继续正常的测试清理流程
这些截图随后可以通过GitHub Actions工作流作为构件下载,极大简化了远程调试过程。
技术价值
这一改进为Oppia项目的测试体系带来了显著提升:
- 调试效率:开发人员可以直接看到测试失败时的页面状态,无需复现问题
- 协作便利:截图可以方便地分享给团队成员,加速问题解决
- 历史追溯:保留的截图可作为测试历史记录,帮助分析间歇性故障
- 移动兼容:统一的解决方案同时支持桌面和移动端测试场景
总结
通过在Oppia验收测试中实现自动失败截图功能,项目团队获得了与端到端测试同等的调试能力。这一改进基于Jest和Puppeteer的扩展能力,展示了如何通过合理的架构设计解决测试工具链中的痛点问题。该方案不仅提升了Oppia项目的测试效率,也为类似技术栈下的测试增强提供了可借鉴的实现模式。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
compass-metrics-modelMetrics model project for the OSS CompassPython00