You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CI中针对PR自动选择性运行关联的Espresso测试?

优化PR阶段Espresso测试耗时的可行方案

针对PR前全量Espresso测试耗时过长的问题,除了递归grep变更引用的方式,还有这些更高效、可靠的方案:

  • 基于代码依赖与覆盖率的智能测试筛选
    不用手动grep,直接利用工具分析变更代码的依赖关系和测试覆盖率:

    • 借助Gradle的测试过滤能力,结合静态依赖分析工具,自动识别变更类关联的所有测试类(比如变更UserViewModel时,找到所有引用它的Espresso测试用例);
    • 用JaCoCo生成的覆盖率数据反向匹配,只执行覆盖了变更代码的测试用例,精准缩小测试范围,比单纯找引用更全面,能覆盖间接依赖的场景。
  • 分层测试策略
    把Espresso测试拆成三个层级:

    • 冒烟测试:只覆盖登录、主页面加载这类最核心的流程,PR阶段必跑,耗时控制在10-15分钟;
    • 核心功能测试:覆盖高频使用的业务模块,PR阶段可选或按需触发;
    • 全量测试:放到夜间定时构建或发布前执行,不占用PR审核的时间。
      这样既保证PR阶段的基础质量,又避免全量测试的耗时。
  • 测试并行化执行
    即使要跑部分测试,也可以通过并行执行压缩总耗时:

    • 在Gradle配置里设置maxParallelForks,让测试在本地多进程并行;
    • 在CI平台把测试按模块或测试类拆分,分配到多个runner同时执行,比如把订单模块、用户模块的测试分开跑,总耗时能降到原来的1/3甚至更低。
  • 增量测试缓存复用
    利用Gradle的测试结果缓存和CI的缓存机制:

    • Gradle会自动缓存未变更测试的执行结果,只要测试类和依赖的代码没改动,直接复用之前的测试通过状态;
    • 用Testify这类专门的UI测试工具,它能基于代码变更自动判断哪些测试需要重新执行,还支持UI快照的增量对比,进一步减少重复测试的工作量。
  • 规范驱动的测试关联
    统一测试类命名规则(比如MainActivity对应MainActivityEspressoTest),结合静态分析工具(自定义Lint规则)强制业务类和测试类的关联:

    • 变更某个业务类时,直接匹配对应的测试类执行,比grep更精准,还能避免遗漏;
    • 新增业务类时,Lint自动检查是否有对应的测试类,从源头保证测试关联的完整性。

内容的提问来源于stack exchange,提问作者IChung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 19:16:07