如何通过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测试任务默认会自动生成两种格式的报告:
- HTML报告:路径为
moduleA/build/reports/androidTests/connected/(方式1)或moduleA/build/reports/integrationTest/connected/(方式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
相关产品推荐
相关产品推荐

