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

Baseline Profile生成多次触发及测试超时问题咨询

关于Baseline Profile生成多次触发及用户旅程测试超时的问题解答

一、测试后续迭代超时的原因及解决办法

问题出在首次完成引导后,应用会保留「已完成引导」的状态(比如存在SharedPreferences标记),后续迭代启动应用时不会再进入引导流程,但你的测试代码还在等待引导步骤,自然就超时了。

解决思路是确保每次执行用户旅程时,应用都是全新状态:

  • 方法一:在每次执行前清除应用数据,直接重置到初始状态
    @Test
    fun generate() {
        val targetAppId = InstrumentationRegistry.getArguments().getString("targetAppId")
            ?: throw Exception("targetAppId not passed as instrumentation runner arg")
        
        rule.collect(
            packageName = targetAppId,
            includeInStartupProfile = true
        ) {
            // 每次执行前清除应用数据
            InstrumentationRegistry.getInstrumentation().uiAutomation.executeShellCommand("pm clear $targetAppId").close()
            
            pressHome()
            startActivityAndWait()
            goThruOnboarding()
            // 其他核心流程操作
        }
    }
    
  • 方法二:在引导流程方法里先判断状态,已完成则重置标记
    fun goThruOnboarding() {
        val preferences = ApplicationProvider.getApplicationContext<Context>().getSharedPreferences("onboarding", Context.MODE_PRIVATE)
        if (preferences.getBoolean("completed", false)) {
            preferences.edit().putBoolean("completed", false).apply()
        }
        // 执行引导步骤:点击下一步、同意协议等
    }
    

二、Baseline Profile多次触发的原因

这是正常行为,不用慌。生成Baseline Profile时,系统会自动重复执行你定义的用户旅程(一般3-5次),目的是收集更全面、稳定的热点代码路径——单次执行可能会遗漏一些编译优化点,多次迭代能确保核心流程的所有关键逻辑都被捕获。

如果觉得执行次数超出预期,可以检查gradle配置里是否重复绑定了baselineProfiles任务,或者测试规则的collect方法有没有额外的重复执行配置。

三、关于Google官方示例的疑惑

官方示例确实做了简化,因为它的核心目的是演示Baseline Profile的基本生成流程,不会覆盖实际项目里的复杂场景(比如状态管理、多路径覆盖、异常处理等)。实际项目中你需要根据业务补充:

  • 测试环境的状态重置逻辑(就是上面解决超时的方法)
  • 多核心用户旅程的覆盖(比如首页滚动、核心功能操作)
  • 异常场景的兼容处理(比如网络请求失败时的流程)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 15:33:19