如何在每次“发布”构建之前使用gradle执行Android测试?
我在Android Studio的AndroidTests目录下有一些安装了Android的测试工具。当然,我可以手动执行测试,但是我需要在每次构建之后执行套件中的所有测试(“发布”类型的构建,而不是在正常的调试构建过程中)。我需要这样做,因为我想在发布新应用的apk之前验证新代码对测试。怎么做?我谷歌它,但我没有找到一个合适的解决方案呢。如何在每次“发布”构建之前使用gradle执行Android测试?
有什么想法?
最后我设法做到了。我已经添加了以下配置我的build.gradle文件在我的Android Studio项目:
// 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。
我想你应该潜入一个特定的主题:Continuous Integration
。
这将允许您在每次构建或提交之后运行测试套件,构建变体,在Google Play上发布以及更多...从经典Jenkins CI
开始,这可能不是最精致和易于使用的,我的意思是用户友好的工具,但与Travis
或Circle CI
相比,它提供了巨大的配置可能性,良好的应用程序社区和免费使用。
开始这篇文章:http://www.vogella.com/tutorials/Jenkins/article.html
其他工具:我已经使用Travis
我Github
项目,但Circle CI
或Green House CI
可能也是不错的选择。
希望这将有助于
一般来说,你可以定义一个依赖使用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
在本地主机上运行单元测试。
yeahh我认为这样的东西,但什么是“测试”?不被gradle识别。我需要在某处指定它吗? – Daniele
@Daniele使用试验运行单元测试或connectedAndroidTest运行机器人测试 –
确定我加入此:tasks.whenTaskAdded {任务 - > 如果(task.name ==“assembleRelease”) task.dependsOn(“connectedAndroidTest” ) }现在它似乎工作,但问题是没有测试执行死于签名证书问题。问题是connectedAndroidTest针对“构建”类型而不是“发布”类型的构建运行测试。在这里找到更多的信息:http://stackoverflow.com/questions/23923218/android-gradle-running-tests-on-non-debug-builds。不清楚现在该做什么。 – Daniele
是的你是对的,但我现在不需要,因为我只是开发一个简单的应用程序。我现在不需要CI,我只是一个独立开发者。无论如何感谢参考,但我正在寻找不同的东西,我想我问的东西应该有一个简单的答案,但也许不是。 :-) – Daniele
詹金斯是一个伟大的开源工具,如果你愿意改变一份工作,那么他的技能很棒。我已经是特拉维斯用于我的非常小的项目,检查我的github,尼克是一样的我的用户名 – piotrek1543