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

创建Android基线配置文件时如何清除应用测试数据?

解决Android基线配置文件测试每次运行前清除应用数据的问题

以下是几个可行的解决方案:

1. 手动删除DataStore Preferences文件

因为问题根源是DataStore存储的初始化状态导致界面变化,直接删除对应的数据文件最直接。在测试类的@Before方法中执行删除操作,确保每次测试前数据都被清空:

@Before
fun clearAppData() {
    val targetContext = InstrumentationRegistry.getInstrumentation().targetContext
    // 替换为你的DataStore名称,即创建时传入的name参数
    val dataStoreName = "user_preferences"
    val dataStoreDir = File(targetContext.filesDir, "datastore")
    
    // 删除主数据文件及相关journal文件
    File(dataStoreDir, "$dataStoreName.preferences_pb").takeIf { it.exists() }?.delete()
    File(dataStoreDir, "$dataStoreName.preferences_pb.journal").takeIf { it.exists() }?.delete()
    File(dataStoreDir, "$dataStoreName.preferences_pb.journal.tmp").takeIf { it.exists() }?.delete()
}

2. 利用BaselineProfileRule的setupBlock回调

在collect方法中指定setupBlock,让它在每次基线采集迭代前执行清除操作,确保测试环境干净:

@get:Rule
val baselineProfileRule = BaselineProfileRule()

@Test
fun generateBaselineProfile() {
    baselineProfileRule.collect(
        packageName = "com.your.app.package",
        setupBlock = {
            // 执行pm clear命令,注意去掉adb前缀,且必须关闭输入流确保命令执行完成
            InstrumentationRegistry.getInstrumentation().uiAutomation.executeShellCommand(
                "pm clear com.your.app.package"
            ).close()
        }
    ) {
        // 这里编写你的基线配置操作逻辑
        startActivityAndWait()
        onView(withId(R.id.init_destination_btn)).perform(click())
        // ...其他界面操作
    }
}

之前命令无效是因为多了adb shell前缀,且未关闭返回的InputStream,导致命令无法完整执行。

3. 修正build.gradle的配置

确保clearPackageData参数配置在正确位置,基准测试的instrumented测试runner参数需要放在模块的defaultConfig下:

android {
    defaultConfig {
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        testInstrumentationRunnerArguments += [
            "clearPackageData": "true"
        ]
    }
}

如果基准测试使用单独的product flavor,要把配置放到对应的flavor块中,避免配置未生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:45:35