首页
/ Oppia项目中实现验收测试失败截图功能的实践

Oppia项目中实现验收测试失败截图功能的实践

2025-06-04 13:28:46作者:温玫谨Lighthearted

背景介绍

在自动化测试领域,测试失败时的调试一直是一个挑战。特别是在Web应用的验收测试中,当测试用例失败时,开发人员往往难以快速定位问题原因。Oppia项目作为一个在线学习平台,其测试套件包含端到端测试和验收测试两种类型。虽然端到端测试已经实现了失败时自动截图的功能,但验收测试尚未具备这一能力。

技术挑战

验收测试与端到端测试在技术实现上存在差异。Oppia的端到端测试使用WebdriverIO框架,而验收测试则基于Jest和Puppeteer组合。要实现类似的失败截图功能,需要解决几个关键技术问题:

  1. 如何捕获测试失败事件
  2. 如何在浏览器关闭前获取页面截图
  3. 如何管理多个浏览器实例的截图
  4. 如何将截图与GitHub Actions工作流集成

解决方案设计

自定义Jest环境

通过创建自定义的Jest环境类,可以拦截测试事件。当检测到test_done事件且测试包含错误时,将失败状态写入配置文件。这种设计避免了全局变量或环境变量的使用,确保了不同执行上下文间的状态共享。

浏览器实例管理

在BaseUser类中维护所有浏览器实例的引用。通过静态属性instances存储所有创建的实例,使得在测试失败时可以遍历所有活动实例进行截图操作。

截图处理流程

  1. 为每个失败的测试生成唯一的文件名,包含测试规格名和时间戳
  2. 创建专门的截图目录存储失败截图
  3. 对每个浏览器实例执行全页面截图
  4. 关闭浏览器实例前确保截图完成

实现细节

截图命名策略

采用specName-timestamp-instanceNumber.png的命名格式,确保每个截图都能准确对应到特定的测试和浏览器实例。特殊字符会被替换为下划线以保证文件系统兼容性。

多实例处理

支持同时处理多个浏览器实例的截图,每个实例都会生成独立的截图文件。这在并行测试场景下尤为重要,可以完整还原测试失败时的多窗口状态。

移动端适配

解决方案同样适用于移动端测试,能够捕获移动设备视口下的页面状态,为响应式布局的调试提供可视化参考。

实际效果

实现后,当验收测试失败时,系统会自动:

  1. 检测到测试失败事件
  2. 暂停浏览器关闭流程
  3. 对所有活动浏览器窗口进行截图
  4. 将截图保存到指定目录
  5. 继续正常的测试清理流程

这些截图随后可以通过GitHub Actions工作流作为构件下载,极大简化了远程调试过程。

技术价值

这一改进为Oppia项目的测试体系带来了显著提升:

  1. 调试效率:开发人员可以直接看到测试失败时的页面状态,无需复现问题
  2. 协作便利:截图可以方便地分享给团队成员,加速问题解决
  3. 历史追溯:保留的截图可作为测试历史记录,帮助分析间歇性故障
  4. 移动兼容:统一的解决方案同时支持桌面和移动端测试场景

总结

通过在Oppia验收测试中实现自动失败截图功能,项目团队获得了与端到端测试同等的调试能力。这一改进基于Jest和Puppeteer的扩展能力,展示了如何通过合理的架构设计解决测试工具链中的痛点问题。该方案不仅提升了Oppia项目的测试效率,也为类似技术栈下的测试增强提供了可借鉴的实现模式。

登录后查看全文
热门项目推荐

热门内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
176
260
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
858
507
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
182
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
255
299
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
331
1.08 K
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
397
370
note-gennote-gen
一款跨平台的 Markdown AI 笔记软件,致力于使用 AI 建立记录和写作的桥梁。
TSX
83
4
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
kernelkernel
deepin linux kernel
C
21
5