什么是Android测试协调器?

什么是Android测试协调器?,android,testing,android-espresso,Android,Testing,Android Espresso,谷歌最近发布了Android测试支持库1.0。在阅读了本文之后,我对Android测试编排器有点困惑 上面说 通常,AndroidJUnitRunner在同一检测过程中运行所有测试,这可能会导致许多问题 您能否解释一下使用相同的检测过程会导致哪些类型的问题 如果一个测试崩溃,它会阻止测试套件的其余部分运行 根据我的经验,一个测试崩溃不会阻止其他测试用例运行。请指出我在这里误解了什么 从 为了完整性,Android测试协调器在每次测试后运行pm clear 所以Android Test Orche

谷歌最近发布了Android测试支持库1.0。在阅读了本文之后,我对Android测试编排器有点困惑

上面说

通常,AndroidJUnitRunner在同一检测过程中运行所有测试,这可能会导致许多问题

您能否解释一下使用相同的检测过程会导致哪些类型的问题

如果一个测试崩溃,它会阻止测试套件的其余部分运行

根据我的经验,一个测试崩溃不会阻止其他测试用例运行。请指出我在这里误解了什么

为了完整性,Android测试协调器在每次测试后运行pm clear

所以Android Test Orchestrator将在每次测试后运行pm clear[Test\u package\u name],对吗

通过我的测试,pm clear[app\u package\u name]不会在每次测试后执行。这意味着测试中的应用程序数据将不会被清除。所以测试用例可能仍然相互依赖。例如:

  • 测试用例A存储一个SharedReference键值
  • 在测试用例A之后运行的测试用例B可以读取测试用例A存储的值

总的来说,经过一些试验,我没有发现Android Test Orchestrator有任何优势。有人能帮我解决我的困惑吗?谢谢。

在研究了一下这个问题后,我可以提供以下答案:

通常,AndroidJUnitRunner在同一检测过程中运行所有测试,这可能会导致许多问题

如前所述,AndroidJUnitRunner运行在同一个插装进程上,因此基本上您的测试运行的状态是完全的,如果您的测试对进程状态有某种依赖性,这可能会造成严重破坏。在Android test orchestrator中,每个测试都在自己的流程中运行,因此依赖关系不是问题

如果一个测试崩溃,它会阻止测试套件的其余部分运行

这里讨论的崩溃是流程的崩溃,而不是活动/应用程序的崩溃。您可以通过在一个测试中插入您的测试
System.exit(0)来测试这一点通常,这将停止整个测试运行,而在Android test orchestrator中,测试将按预期继续

为了完整性,Android测试协调器在每次测试后运行pm clear

这是谷歌的一个疏忽,正如可以观察到的那样,谷歌已经从市场上撤回


基本上,使用Android test orchestrator的优势在于每个测试都有单独的过程,这可以提高稳定性并确保测试的完整执行。

Android test orchestrator是一种工具,允许您在自己的检测调用中运行应用程序的每个测试。 这意味着每个测试(用@test注释的方法)将在AndroidJUnitRunner的单独实例上运行

它解决了什么问题? 在处理UI测试时,我们发现了在CI上或本地运行时不时出现的两个主要问题:

  • 偶尔会发生中断整个测试套件的崩溃
  • 测试重叠

  • Orchestrator可以防止崩溃中断整个测试,例如本机崩溃。
    但是它可能会减慢测试速度

    FWIW您可以让orchestrator在每次测试后运行
    pm clear
    ,方法是在
    defaultConfig
    部分中添加模块gradle文件:
    TestInstrumentationRunneArguments clearPackageData:“true”
    感谢您共享google groups链接。从那时起,我接触到了谷歌的问题追踪者,该问题于2018年11月21日在这里提交