Android Gradle在非调试版本上运行测试

Max*_*ell 21 android gradle android-gradle-plugin

我有一个包含三种不同构建类型的项目:debug,beta和release.我的测试包总是为调试版本创建,但QA使用beta版本,我们希望QA在其大量设备上运行这些测试.

我正在尝试为QA创建一个测试apk,它由与beta版本相同的密钥签名.通过Android-Gradle文档,我没有看到任何告诉我我不能这样做的东西,但我不认为无论如何配置它.无论如何我可以配置组装测试apk时使用哪个密钥库?或者有没有办法创建一个未签名的测试apk?

JRa*_*ond 47

您现在可以将此指向另一个目标,我不知道何时发生这种情况,但是来自文档:

目前只测试了一种构建类型.默认情况下,它是调试构建类型,但可以使用以下命令重新配置:

android {
    ...
    testBuildType "staging" 
}
Run Code Online (Sandbox Code Playgroud)

  • @xialin如果我使用`testBuildType“ release”`,则androidTest文件夹中的Espresso类不再编译。似乎找不到Espresso依赖项。 (4认同)
  • 如果有多种口味,会测试哪种口味?是否有testBuildFlavor设置以及构建类型? (2认同)
  • 这对我有用。我设置`testBuildType“ release”`以便针对发布版本进行测试 (2认同)
  • @Caleb gradle app:任务应该显示特定于风味的测试任务.示例:connected <Variant> DebugAndroidTest和test <Variant> ReleaseUnitTest (2认同)

Sco*_*rta 14

这是对你的问题的一个不完整的答案,因为它记录了你不能做的事情,但是在你的项目中connectedAndroidTest运行androidTest测试的任务是硬编码来运行debug构建类型,我没有看到一种方法将其指向不同的构建类型.

接受建议是否有办法在Gradle中列出任务依赖?并检查任务依赖树,如果您运行:

./gradlew tasks --all
Run Code Online (Sandbox Code Playgroud)

你在输出中得到这个:

Verification tasks
------------------
app:check - Runs all checks. [app:lint]
app:connectedAndroidTest - Installs and runs the tests for Build 'debug' on connected devices. [app:assembleDebug, app:assembleDebugTest]
app:connectedCheck - Runs all device checks on currently connected devices. [app:connectedAndroidTest]
app:deviceCheck - Runs all device checks using Device Providers and Test Servers.
Run Code Online (Sandbox Code Playgroud)

该connectedAndroidTest任务的文档声称它运行测试debug,并且任务依赖项(您使用该-all标志看到)确认该任务依赖于assembleDebug.

添加其他构建类型和风格似乎不会影响对内置debug类型的依赖性.

有可能使用比我更大的Gradle-fu,你可以重新连接任务以使测试依赖于不同的构建类型,但这样做很可能是脆弱的,因为它必然依赖于不支持API的东西. Android Gradle插件.

但是,要最直接地回答您的问题,如果您只想对具有不同证书的构建运行测试,则可以更改debug构建上的签名配置以使用beta证书:

android {
    signingConfigs {
        beta {
            keyAlias 'key'
            keyPassword 'password'
            storeFile file('/path/to/beta_keystore.jks')
            storePassword 'password'
        }
    }
    buildTypes {
        debug {
            signingConfig signingConfigs.beta
        }
        beta {
            signingConfig signingConfigs.beta
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我测试了它,我能够以这种方式对使用自定义密钥库的调试版本运行androidTest目标.但是,我怀疑这可以解决您的问题,因为我怀疑您希望针对beta 版本运行测试,而不是使用beta 证书进行调试构建.