使用 Gradle 运行特定的 Android 仪器测试

Posted

技术标签:

【中文标题】使用 Gradle 运行特定的 Android 仪器测试【英文标题】:Run specific Android instrumentation test with Gradle 【发布时间】:2017-04-01 06:31:31 【问题描述】:

我需要从控制台使用 gradle 执行某些 android 测试用例(类或方法)。 它位于 src/androidTest/java/com/example/CertainTest.java

Android Studio 通过复杂的adb shell am instrument 提供此功能。

是否可以仅通过 Gradle 调用某些 Android 测试?

我读过关于How to run only one test class on gradle、Test from the Command Line 的信息,但这样做的方式是否相当复杂。

这是 Android Studio 启动特定测试类的方式:

Launching Tests
$ adb push /.../app/build/outputs/apk/app-debug.apk /data/local/tmp/com.example.andrii.espressotutorial
$ adb shell pm install -r "/data/local/tmp/com.example.andrii.espressotutorial"
    pkg: /data/local/tmp/com.example.andrii.espressotutorial
Success
$ adb push /.../app/build/outputs/apk/app-debug-androidTest.apk /data/local/tmp/com.example.andrii.espressotutorial.test
$ adb shell pm install -r "/data/local/tmp/com.example.andrii.espressotutorial.test"
    pkg: /data/local/tmp/com.example.andrii.espressotutorial.test
Success
Running tests
$ adb shell am instrument -w -r   -e debug false -e class com.example.andrii.espressotutorial.ExampleInstrumentedTest2 com.example.andrii.espressotutorial.test/android.support.test.runner.AndroidJUnitRunner
Client not ready yet..
Started running tests
Tests ran to completion.

【问题讨论】:

也许只是将这些 adb 命令包装到自定义 gradle 任务中。 检查这个问题***.com/questions/21288448/… 这能回答你的问题吗? Running a specific instrumentation unit test with Gradle 【参考方案1】:

你可以这样写一个 gradle 任务:

在主 gradle 文件中

apply from: "$project.rootDir/tools/script-integration-tests.gradle"

然后在项目目录下创建一个目录tools和一个文件script-integration-tests.gradle。然后像这样用测试类名称填充它。

apply plugin: 'com.android.application'

task integrationTest(type: Exec) 
    def adb = android.getAdbExe().toString()
    commandLine "$adb", 'shell', 'am', 'instrument', '-w', '-r', '-e',
            'debug', 'false', '-e', 'class', 'de.app.id.PullRequestTests',
            'de.app.id.app_test.debug.test/android.support.test.runner.AndroidJUnitRunner'

【讨论】:

然后将集成测试作为 gradle 任务运行 ./gradlew intergrationTest

以上是关于使用 Gradle 运行特定的 Android 仪器测试的主要内容,如果未能解决你的问题,请参考以下文章

理解使用Gradle编译打包Android apk

使用gradle构建Android应用程序时如何删除特定权限?

每个变体的 Android Gradle 自定义任务

Android Gradle - 仅针对特定任务过滤掉变体

Android:如何让gradle让特定的依赖关系脱机而其他人在线?

如何使用 Gradle 和 JUnit 5 仅运行特定测试?