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

问题描述 投票:0回答:4

我有一个具有三种不同构建类型的项目:调试、测试版和发布。我的测试包始终是为调试版本创建的,但 QA 使用 beta 版本,我们希望 QA 在其大量设备上运行这些测试。

我正在尝试创建一个用于 QA 的测试 apk,该 apk 与 beta 版本使用相同的密钥进行签名。浏览 Android-Gradle 文档,我没有看到任何内容告诉我不能执行此操作,但我没有看到任何配置此操作的信息。无论如何,我可以配置在组装测试 apk 时使用哪个密钥库吗?或者有没有办法创建一个未签名的测试apk?

android gradle android-gradle-plugin
4个回答
52
投票

您现在可以将其指向不同的目标,我不知道这是什么时候发生的,但是来自文档:

目前仅测试了一种构建类型。默认是debug 构建类型,但这可以通过以下方式重新配置:

android {
    ...
    testBuildType "staging" 
}

15
投票

这是对您的问题的不完整答案,因为它记录了您不能做什么,但是

connectedAndroidTest
任务(即在项目中运行
androidTest
测试的任务)被硬编码为针对
debug
构建运行类型,而且我没有找到将其指向不同构建类型的方法。

听取 Is there a way to list task dependency in Gradle? 的建议并检查任务依赖关系树,如果运行:

./gradlew tasks --all

你在输出中得到这个:

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.

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
        }
    }
}

我对其进行了测试,并且能够针对以这种方式使用自定义密钥库的调试版本运行 androidTest 目标。但是,我怀疑这可以解决您的问题,因为我怀疑您想针对 beta build 运行测试,而不是使用 beta certificate 运行测试。


2
投票

要为您的构建变体添加测试源集,请按照以下步骤操作:

  • 在左侧的“项目”窗口中,单击下拉菜单,然后 选择项目视图。
  • 在相应的模块文件夹中, 右键单击 src 文件夹,然后单击新建 > 目录。
  • 对于目录名称,输入“androidTestVariantName”。例如, 如果您有一个名为“MyFlavor”的构建变体,则目录名称 应该是“androidTestMyFlavor”。然后点击确定。
  • 右键单击新目录,然后单击新建 > 目录。进入 “java”作为目录名称,然后单击“确定”。

现在您可以按照上述步骤添加新测试,将测试添加到这个新的源集中。当您到达“选择目标目录”对话框时,选择新的变体测试源集。

src/androidTest/
源集中的仪器测试由所有构建变体共享。为应用程序的“MyFlavor”变体构建测试 APK 时,
Gradle
结合了
src/androidTest/
src/androidTestMyFlavor/
源集。

另一种方法是将以下行放入默认配置中。

目前仅测试了一种构建类型。默认情况下它是调试构建类型,但可以通过以下方式重新配置:

android {
    ...
    testBuildType "staging"
}

0
投票

如果您希望它依赖于选定的构建变体,您可以检查任务名称:

def isReleaseTestBuild = gradle.startParameter.taskRequests.toString().contains("ReleaseAndroidTest")

android {
    if (isReleaseTestBuild) {
        testBuildType "release"
    }
...
}

现在您可以调用

./gradlew connectedDebugAndroidTest
./gradlew connectedReleaseAndroidTest
或仅通过 Android Studio 使用选定的构建变体运行

© www.soinside.com 2019 - 2024. All rights reserved.