什么是Android Test Orchestrator?

cmo*_*opm 10 testing android android-espresso

谷歌最近发布了Android测试支持库1.0.阅读概述后,我对Android Test Orchestrator感到困惑.

它说

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

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

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

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

并且来自Android Testing Orchestrator开发人员指南,

为了完整性,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的任何优势.有人可以帮助解决我的困惑吗?谢谢.

zwe*_*bie 15

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

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

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

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

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

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

这是谷歌的监督,已经从官方文档中撤回,这可以在这里观察到.

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

  • FWIW 你可以让协调器在每次测试后运行 `pm clear`,方法是在 `defaultConfig` 部分添加到你的模块 gradle 文件:`testInstrumentationRunnerArguments clearPackageData: 'true'` (2认同)