2. 开发环境搭建

开发环境是 Compose UI 自动化测试的起点,也是后续所有章节的基础。本章以 Android Studio 为核心工具,覆盖从 SDK 配置、Gradle 依赖管理到模拟器/物理设备准备的全流程,并引入 Compose 测试库的核心依赖。完成本章配置后,你将获得一个可直接编写并运行 Compose 测试用例的最小工程。

2.1 环境全景

整个开发环境分为四个层次:

  • 基础层:JDK 17+、Android SDK(API 33+)、Android Studio Hedgehog 或更高版本。
  • 构建层:Gradle 8.2+、AGP 8.2+、Kotlin 1.9+。
  • 测试框架层:JUnit 4/5、Compose UI Test、Espresso 可选。
  • 运行层:模拟器(Android Virtual Device)或已启用开发者选项的物理设备。

下图概括了各层之间的关系与配置入口:

Compose 自动化测试开发环境搭建流程 JDK 17+ & AS 基础工具链 Android SDK API 33+ Gradle 8.2+ AGP 8.2+ / Kotlin 1.9+ 模拟器/真机 调试模式配置 Compose UI Test androidTest依赖 & 调试运行 首次运行测试 JUnit Runner 关键说明 • 右侧“验证运行”节点代表编写一个最简单的测试类并执行。 • “设备准备”节点包含模拟器创建与物理设备 USB 调试开启。 • 所有版本号以 2025 年主流稳定版本为准,兼容性可查官方文档。 • 若使用物理设备,需额外安装对应 OEM USB 驱动。

2.2 Android Studio 配置要点

打开 Android Studio 后,通过 Settings → Languages & Frameworks → Android SDK 确认以下组件已安装:

组件最低版本/要求用途
Android SDK PlatformAPI 33 (Android 13)编译与运行测试目标
Android SDK Build-Tools34.0.0构建工具链
Intel HAXM / Windows Hypervisor最新模拟器加速
Android Emulator32.1.15+运行模拟器实例
提示:若使用 Apple Silicon Mac,请安装 ARM 版本的模拟器系统镜像,并确保 Android Studio 为 Hedgehog 或更新版本,以获得原生性能支持。

2.3 Gradle 依赖配置

在模块级 build.gradle.kts 中添加 Compose 测试所需的依赖。以下是一个标准的配置模板(注意版本号应与项目所用 Compose BOM 一致):

// 最顶层 build.gradle.kts (Project)
plugins {
    id("com.android.application") version "8.2.2" apply false
    id("org.jetbrains.kotlin.android") version "1.9.22" apply false
}

// 模块级 build.gradle.kts (Module :app)
android {
    compileSdk = 34
    defaultConfig {
        minSdk = 24
        targetSdk = 34
        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }
    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.10"
    }
}

dependencies {
    // Compose BOM 统一版本
    val composeBom = platform("androidx.compose:compose-bom:2024.02.00")
    implementation(composeBom)
    implementation("androidx.compose.ui:ui")
    implementation("androidx.compose.ui:ui-tooling")
    implementation("androidx.compose.foundation:foundation")

    // Compose UI Test 核心库 (androidTest)
    androidTestImplementation(composeBom)
    androidTestImplementation("androidx.compose.ui:ui-test-junit4")

    // 测试辅助库
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
    androidTestImplementation("androidx.test:rules:1.5.0")

    // Debug 模式下可用的 UI 测试工具
    debugImplementation("androidx.compose.ui:ui-test-manifest")
}
常见错误:忘记添加 testInstrumentationRunner 会导致运行测试时提示 “No instrumentation runner found”。请确保 defaultConfig 块中包含该配置。另外,ui-test-manifest 仅在 debug 变体下有效,若发布版本运行测试会报错。

2.4 模拟器与物理设备准备

2.4.1 模拟器 (AVD)

通过 Android Studio 的 Device Manager 创建一台模拟器:

  1. 点击工具栏的 “Device Manager” 图标,或选择 Tools → Device Manager。
  2. 点击 “Create device”,选择硬件配置(推荐 Pixel 6 或 API 33+ 的通用设备)。
  3. 选择系统镜像:建议使用 API 34 (x86_64) 并勾选 “Use Google Play” 如果测试需要 Google 服务。
  4. 分配足够的存储空间(至少 2GB 内部存储)并确认。
性能优化:启用 Quick Boot 可大幅缩短模拟器启动时间。首次创建后关闭模拟器即保存快照,后续启动仅需 5-10 秒。

2.4.2 物理设备

将物理手机连接至电脑,并执行以下步骤:

  • 开启 开发者选项:设置 → 关于手机 → 连续点击 “版本号” 7 次。
  • 开启 USB 调试:开发者选项 → USB 调试。
  • 连接 USB 线后,在设备上允许 “允许 USB 调试?” 弹窗。
  • 命令行验证连接:adb devices 应显示设备序列号及 “device” 状态。
调试技巧:若 adb devices 显示 “unauthorized”,请重新插拔 USB 线并确保设备已解锁。某些 OEM 机型(如小米、华为)需要额外在开发者选项中关闭 “MIUI 优化” 或 “启用监控”。

2.5 Compose 测试库引入检查与常见问题

完成依赖引入后,可以通过 Gradle Sync 确认无红色提示。若同步成功,在 app/src/androidTest/java/ 目录下创建第一个测试文件:

package com.example.composetest

import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import org.junit.Rule
import org.junit.Test

class ExampleComposeTest {
    @get:Rule
    val composeTestRule = createComposeRule()

    @Test
    fun myTest() {
        composeTestRule.setContent {
            // 此处放置一个简单的 Composable
            androidx.compose.material3.Text("Hello, World!")
        }
        composeTestRule.onNodeWithText("Hello, World!").assertExists()
    }
}

右键测试方法选择 “Run” 即可在连接的设备上执行。

2.6 常见错误速查表

错误现象可能原因解决方案
java.lang.NoClassDefFoundError: androidx.compose.ui.test.junit4.ComposeTestRule缺少 ui-test-junit4 依赖在 androidTestImplementation 中添加该依赖并同步
Could not find method createComposeRule()Compose BOM 版本过低或未引入检查 BOM 版本 ≥ 2024.01.00
adb: device unauthorized物理设备未授权重新插拔并确认设备亮屏,必要时撤销 USB 调试授权后重试
Emulator fails to boot with "The emulator process for AVD was killed"缺少 HAXM 或内存不足安装 Intel HAXM(Windows)或使用 ARM 镜像;增加模拟器内存
Gradle sync failed: Could not resolve androidx.compose:compose-bom网络问题或 jcenter() 已停用在 settings.gradle.kts 中添加 google() 和 mavenCentral()

2.7 部署与验证

配置完成后,建议运行一个空测试验证整体链路:

  1. 选择一个模拟器或物理设备(确保设备状态为 “online”)。
  2. 在 Android Studio 中打开 ExampleComposeTest,点击类左侧的绿色运行箭头选择 “Run”。
  3. 观察 Gradle Console 输出,确认测试通过(绿色条)。
稳定性建议:如果模拟器运行缓慢,请降低屏幕分辨率(如 1080p)并分配至少 2 个 CPU 核心。物理设备建议使用 USB 3.0 端口以保证数据传输速度。