什么是Android Test Orchestrator?

时间:2017-09-01 02:58:28

标签: android testing android-espresso

Google最近发布了Android测试支持库1.0。阅读overview后,我对Android Test Orchestrator感到困惑。

它说

  

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

您能解释一下使用相同的仪器流程会导致哪些类型的问题?

  

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

根据我的经验,一次测试崩溃不会阻止其他测试用例运行。请指出我在这里误解的内容?

来自Android Testing Orchestrator developer guide

  

为了完整性,Android Test Orchestrator会在每次测试后运行pm。

所以Android Test Orchestrator会在每次测试后运行 pm clear [test_package_name] ,对吗?

通过我的测试,每次测试后都不会执行 pm clear [app_package_name] 。这意味着将不会清除被测应用程序的数据。因此,测试用例可能仍然存在彼此依赖关系。例如:

  • 测试用例A存储SharedPreference键值
  • 在测试用例A之后运行的测试用例B可以读出测试用例A存储的值

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

3 个答案:

答案 0 :(得分:11)

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

  

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

如上所述,AndroidJUnitRunner在相同的检测过程中运行,因此基本上您的测试运行状态为满,如果您的测试对进程状态有某种依赖性,这可能会造成严重破坏。在Android测试编排器中,每个测试都在自己的进程中运行,因此依赖性不是问题。

  

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

这里遇到的崩溃是流程崩溃,而不是活动/应用程序崩溃。您可以通过插入一个测试System.exit(0);来测试这一点。通常,这会停止整个测试运行,而在Android测试协调器中,测试会按预期继续进行。

  

为了完整性,Android Test Orchestrator会在每次测试后运行pm。

这是谷歌的疏忽,已经从official documentation收回,可以观察here

基本上,使用Android测试协调器的优势在于每个测试的独立过程,这可以提高稳定性并确保完全执行测试。

答案 1 :(得分:0)

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

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

  1. 偶尔的崩溃会停止整个测试套件。
  2. 测试重叠。

答案 2 :(得分:0)

协调器可以防止崩溃以中断整个测试,例如。本机崩溃。 但这可能会减慢测试速度