ConnectedAndroidTest执行的任务列表是什么?



我想了解更多关于ConnectedAndroidTest Gradle任务。我看到它是用来安装应用程序、测试apks和运行测试的。

但是它的每个步骤是什么呢?(gradle tasks如果有的话)

"gradle build"似乎生成了应用程序apk。什么任务生成测试apk?它(ConnectedAndroidTest)如何安装应用程序和测试apk?测试是怎么开始的?

我的第一个SO回答,请温柔一点;)

但是它的每个步骤是什么呢?(gradle tasks如果有的话)

因此,如果您想要对任务 ConnectedAndroidTest所依赖的内容进行高级概述,只需运行./gradlew connectedAndroidTest./gradlew cAT(没有-q选项)将输出cAT依赖的每个任务的名称,然后再执行。任务本身不能包含其他任务,但可以依赖于它之前的其他任务。

从这个答案来看,gradle build任务实际上是与java相关的,而不是负责构建测试apk的任务。相反,它是assembleAndroidTest任务,在connectedAndroidTest之前完成它。你对connectedAndroidTest是对的,它实际上安装并运行测试apk。但我稍后会讲到怎么做。我的回答的其余部分是更详细的,而不是有效地使用任务,但如果你想了解它是如何工作的,这是有用的。

一些背景
像许多其他Android gradle插件任务一样,connectedAndroidTest实际上是在执行阶段的某个时候放在一起的,因为不同的构建变量(调试、发布、风味1、风味2等)。因此,在配置阶段(当执行大多数构建脚本逻辑时),connectedAndroidTest是不可用的。相反,一旦构建完成,它就被设置为android对象中testVariants属性的connectedInstrumentTest 属性(基本上是一个字段)。

作为澄清的例子,如果您想访问此任务以某种方式操作它(可能在其末尾添加Action),您可以在build.gradle文件中执行以下操作:

android {
  testVariants.all { variant ->
    variant.connectedInstrumentTest.doLast {
      println "This will be executed right after our connectedInstrumentTest!"
      println "The name of the test type: $connectedInstrumentTest.name"
      println "The type of test $connectedInstrumentTest.class"       
    }
  }
}

然后运行./gradlew -q cAT

所以在这里,我添加了一个动作到任何任务的末尾已经建立并分配给connectedInstrumentTest属性,这是嵌套在android对象相当深。这个任务可能是connectedDebugAndroidTest或类似的东西。

任务在做什么?
现在,从我放入最后一个println中的type属性中,我们可以看到任务的类实际上是com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask_Decorated。老实说,我还不太确定_Decorated部分来自哪里,但是谷歌搜索类名称的其余部分为我们提供了任务的基类的源代码。

任务的主要Action称为runTests(),它或多或少地显示了任务是如何完成它所做的事情的。如果您稍微跟踪源代码,您最终会发现adb pm install命令将用于安装apk。

虽然我找不到它,但我怀疑在其他地方使用adb命令adb shell am instrument -w com.package.name/android.support.test.runner.AndroidJUnitRunner命令来最终驱动测试。

所以我希望这不是太令人困惑-我最近才学会这些,所以有些事情可能不是100%。我建议阅读gradle文档,特别是如何创建自定义插件和自定义任务,也可以查看Android gradle插件工具文档。

要回答更一般的问题"任务<taskName>执行的任务列表是什么?",对于任何给定的任务,有两种简单的方法可以找到它。

第一个是:

./gradlew tasks --all | grep <taskName> 

其中<taskName>应该替换为您关心的任何任务。例如,./gradlew tasks --all | grep connectedDebugAndroidTest。请注意,我通过grep来省去手动筛选所有任务列表的麻烦。

第二个是:

使用任务树插件。一旦应用,用法看起来像这样:

./gradlew <taskName> taskTree

或者,像我通常喜欢的那样:

./gradlew <taskName> taskTree --no-repeat -quiet

后一个选项使输出不那么混乱。

您还可以执行./gradlew connectedAndroidTest --dry-run,它将列出它将运行的所有任务,但不会运行任何任务。--dry-run对任何你想分析的gradle任务做同样的事情。

相关内容

  • 没有找到相关文章

最新更新