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

如何通过Gradle执行模块中特定文件夹下的所有集成测试(UI测试)

实现Android集成测试(UI Test)的指定目录执行与报告生成

完全可以实现你的需求,以下是具体思路和操作步骤:

一、配置Gradle识别自定义测试目录

默认Android UI测试的源码目录是androidTest,你的测试放在test/integrationtest下,需要先让Gradle将其识别为UI测试源目录,有两种配置方式:

方式1:扩展默认AndroidTest源集

在moduleA/build.gradle(Groovy)或build.gradle.kts(Kotlin)中添加:

Groovy 语法

android {
    sourceSets {
        androidTest {
            // 将integrationtest目录加入UI测试源码路径
            java.srcDirs += file('test/integrationtest')
            // 如果有资源文件,也需要添加
            resources.srcDirs += file('test/integrationtest/resources')
        }
    }
}

Kotlin DSL 语法

android {
    sourceSets {
        named("androidTest") {
            java.srcDirs("test/integrationtest")
            resources.srcDirs("test/integrationtest/resources")
        }
    }
}

方式2:创建独立的集成测试任务

如果需要将集成测试与默认UI测试完全分离,可以自定义一个独立的任务:

Groovy 语法

android {
    sourceSets {
        integrationTest {
            java.srcDir file('test/integrationtest')
            resources.srcDir file('test/integrationtest/resources')
            // 继承主模块和UI测试的依赖
            compileClasspath += sourceSets.main.compileClasspath
            runtimeClasspath += sourceSets.main.runtimeClasspath
            compileClasspath += configurations.androidTestImplementation
            runtimeClasspath += configurations.androidTestRuntimeOnly
        }
    }
}

// 创建集成测试任务,关联Android测试环境
task integrationTest(type: com.android.build.gradle.internal.testing.utp.AndroidTestTask) {
    sourceSets = [android.sourceSets.integrationTest]
    // 指定测试变体(比如debug/release)
    variant = android.testVariants.find { it.name == 'debug' }
    // 启用设备连接模式(必须有可用模拟器或真机)
    connected = true
}

// 依赖前置编译任务
integrationTest.dependsOn assembleDebug, assembleDebugAndroidTest

Kotlin DSL 语法

android {
    sourceSets {
        create("integrationTest") {
            java.srcDir("test/integrationtest")
            resources.srcDir("test/integrationtest/resources")
            compileClasspath += sourceSets.main.get().compileClasspath
            runtimeClasspath += sourceSets.main.get().runtimeClasspath
            compileClasspath += configurations.androidTestImplementation.get()
            runtimeClasspath += configurations.androidTestRuntimeOnly.get()
        }
    }
}

tasks.register<com.android.build.gradle.internal.testing.utp.AndroidTestTask>("integrationTest") {
    sourceSets.set(listOf(android.sourceSets.getByName("integrationTest")))
    variant.set(android.testVariants.find { it.name == "debug" })
    connected.set(true)
}

tasks.named("integrationTest") {
    dependsOn("assembleDebug", "assembleDebugAndroidTest")
}

二、执行指定目录的测试用例

根据配置方式不同,执行命令分为两种:

方式1(扩展默认AndroidTest源集)

使用默认的UI测试任务,通过--tests参数按包路径过滤(假设integrationtest下的测试类包名对应目录结构,比如com.yourapp.moduleA.integrationtest):

./gradlew connectedDebugAndroidTest --tests 'com.yourapp.moduleA.integrationtest.**'
  • connectedDebugAndroidTest:根据你的变体调整(比如connectedReleaseAndroidTest)
  • **:匹配该包下所有类及子包的测试用例

方式2(独立集成测试任务)

直接运行自定义的任务即可,无需额外过滤(因为任务已经关联了指定目录的源码):

./gradlew integrationTest

如果需要进一步过滤单个类或方法,同样支持--tests参数:

./gradlew integrationTest --tests 'com.yourapp.moduleA.integrationtest.TestFileA'
./gradlew integrationTest --tests 'com.yourapp.moduleA.integrationtest.TestFileA.testXXX'

三、生成与获取测试报告

Gradle Android测试任务默认会自动生成两种格式的报告:

  1. HTML报告:路径为moduleA/build/reports/androidTests/connected/(方式1)或moduleA/build/reports/integrationTest/connected/(方式2),可直接在浏览器打开查看详情。
  2. JUnit XML报告:路径为moduleA/build/test-results/androidTests/connected/(方式1)或moduleA/build/test-results/integrationTest/connected/(方式2),适合Jenkins等CI工具解析。

在Jenkins中,你可以:

  • 通过"Publish HTML reports"插件发布HTML报告
  • 通过"JUnit"插件解析XML报告,展示测试统计结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:03:13