分布式应用程序的Android集成测试(最佳实践)

时间:2016-02-19 10:24:08

标签: android testing automated-tests integration-testing distributed-system

我正在尝试编写Android应用程序的集成测试。该应用程序将某些数据存储在 Google Cloud Datastore ,然后在运行该应用的不同设备之间进行交换。

这实际上是我想要测试的 - 数据交换工作正常吗? 当一台设备将数据保存到数据存储区时,其他设备是否正确查看,等等?

我正在检查各种Android测试工具,但似乎没有一个支持这个测试用例。大部分时间我都在玩Robolectric来遮蔽应用程序中所有不必要的部分并仅测试必要但我遇到了几个麻烦:

  • Robolectric似乎无法正常运行多个线程。由于我的应用程序在后台线程中向数据存储区发送数据,这是一个主要问题。
  • Robolectric似乎总是在一个JVM中运行测试(如果我在这里错了,请告诉我)。由于我的应用程序使用了几个静态字段,因此模拟多个设备并不容易共享此静态字段并不容易。

基本上,我需要在每个设备上同时运行2个(或更多设备)上的测试,但执行不同的命令,但它们完全无缝且正确地工作。

我已经通过

解决了这个问题
  • 带来'TestActivity',我已经为这两个设备实施了测试程序;这个活动用户界面有两个按钮(测试A;测试B),它们都是通过在这两个不同的设备上点击它们来呈现的,我能够运行测试。
  • 同步这两个设备有一个小小的挑战,但是我付出了一点努力,我也解决了这个问题。
  • 我还必须暂时用TestActivity替换AndroidManifest.xml中的主要活动,以显示测试用户界面而不是应用程序用户界面。

enter image description here

我的问题如下。

  1. 这种做法是否正确?现有的测试框架是否都不支持同时在2个或更多“设备”上运行测试?它不一定是真正的Android设备(或仿真器),JVM就足够了(就像Robolectric一样)。我只需要在更多JVM上同时测试复杂的分布式逻辑。或至少模拟这样的运行(我的应用程序中有静态字段。)
  2. 如何将这些测试与主要应用程序一起保留?我不得不在应用程序中实现几个hack,因此测试可以访问内部结构(用于测试初始化​​和验证)。我还必须实现TestActivity并将其作为主要活动。我不想检查这些更改并构建我的主应用程序,因为它们将保留在那里。我已经意识到应用程序(apk)不能依赖于另一个apk(测试应用程序将依赖于主应用程序,并且只会带来测试所需的一些额外功能); apk只能依赖于库(aar)。这是否意味着我唯一的选择是从我当前的apk创建一个aar然后带2个apks - 一个是主要的(可能什么都不包含,只是AndroidManifest.xml),另一个将实现测试;两个apks都依赖于我的aar?

0 个答案:

没有答案