如何在每次“发布”构建之前使用gradle执行Android测试?

4

我在Android Studio的AndroidTests目录下有一些安卓设备测试。当然,我可以手动执行这些测试,但我需要在每次构建后执行套件中的所有测试("release"类型的构建,而不是普通的调试构建)。我需要这样做,因为我希望在发布新应用的apk之前通过测试来验证新代码的准确性。如何实现呢?我尝试了谷歌搜索,但还没有找到合适的解决方案。

有什么想法吗?

3个回答

12

我终于成功了。我已经将以下配置添加到我的Android Studio项目的build.gradle文件中:

// execute android tests before realising a new apk
tasks.whenTaskAdded { task ->
    if (task.name == 'assembleRelease')
        task.dependsOn('connectedAndroidTest')
}

android {
signingConfigs {
    release {
        keyAlias 'key'
        keyPassword 'password'
        storeFile file('/path/to/release_keystore.jks')
        storePassword 'password'
    }

}
buildTypes {
    debug {
        signingConfig signingConfigs.release
    }
    release {
        signingConfig signingConfigs.release
    }
}

在完成这个步骤后,当构建发布版 APK 时我能够运行所有的 Android 测试。如果测试失败,则不会构建任何 APK。


connectedAndroidTest 会构建和测试 Debug APK,而不是 Release APK。如果你在 Release APK 中使用了 minifyEnabled true,那么这一点可能非常重要。 你是否找到了一种方法,使其测试你原本打算部署的 Release APK? 例如使用 testBuildType "staging"。 - engilyin
当我选择“Build -> Generate Signed APK/AAB”时,这个应该工作吗?我尝试了一下,但是没有运行任何测试。 - netcyrax

3

通常情况下,您可以使用dependsOn方法为任务定义依赖关系。

例如:

task A << {
    println 'Hello from A'
}

task B << {
    println 'Hello from B'
}

B.dependsOn A

你将获得:
> gradle -q B
Hello from A
Hello from B

在您的情况下,您可以指定:
assemble.dependsOn test

如果您只想为发布版本指定依赖项:

assembleRelease.dependsOn test

使用方法:
使用connectedAndroidTest命令在连接的模拟器或设备上运行测试。
使用test命令在本地主机上运行单元测试。

是的,我认为差不多就是这样,但是“test”是什么意思?Gradle没有识别它。我需要在某个地方指定它吗? - Daniele
@Daniele 使用 test 来运行单元测试或使用 connectedAndroidTest 来运行 Android 测试。 - Gabriele Mariotti
好的,我添加了以下代码: tasks.whenTaskAdded { task -> if (task.name == 'assembleRelease') task.dependsOn('connectedAndroidTest') }现在它似乎可以工作了,但问题是由于签名证书问题,没有执行任何测试。问题在于connectedAndroidTest运行针对“build”类型而不是“release”类型的构建进行测试。在此处找到更多信息:https://dev59.com/CWAg5IYBdhLWcg3wI4PD。现在不清楚该怎么做。 - Daniele
这条消息意味着同一个应用程序已经安装在设备上,但是使用另一个证书进行签名(可能是因为您正在尝试安装发布版本,而默认情况下使用调试证书签名的应用程序)。 - Gabriele Mariotti

0

我认为你应该深入研究一个特定的主题:持续集成

这将允许您在每次构建或提交后运行测试套件、构建变体、在Google Play上发布等等...从经典的Jenkins CI开始,它可能不是最精致和易于使用的,我的意思是用户友好的工具,但与TravisCircle CI相比,它提供了巨大的配置可能性,良好的应用程序社区,并且是免费使用的。

从这篇文章开始:http://www.vogella.com/tutorials/Jenkins/article.html

其他工具:我已经在我的Github项目中使用Travis,但Circle CIGreen House CI也可能是不错的选择。

希望这能帮到你


是的,你说得对,但我现在不需要这个,因为我只是在开发一个简单的应用程序。我现在不需要CI,我只是一个独立开发者。无论如何,感谢您提供的参考资料,但我正在寻找不同的东西,我认为我正在询问一个应该有简单答案的问题,但也许不是。 :-) - Daniele
Jenkins是一个非常棒的开源工具,如果你想换工作的话,掌握这个技能会非常有帮助。我已经在我的一些小项目中使用Travis了,可以在我的Github上查看,我的昵称和用户名相同。 - piotrek1543

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接