结合 Android 仪器测试和后端集成测试

Combine Android instrumentation tests and backend integration tests

我管理复杂的基于 Spring 的后端项目的单元测试和集成测试。测试应通过端到端测试进行扩展,以检查后端与 Android 客户端之间的交互。

一个简单的测试用例应该是 "When an event is triggered on the backend server, there should be a notification shown on the device".

我尝试的第一件事是实施 Android 仪器测试,但在后端交互方面遇到了困难。测试包括调用许多不同的服务和远程数据库操作,我觉得这种繁重的工作不应该发生在 Android 设备上。另一个问题是,让当前的 Spring 测试环境在 Android 环境中工作是一个巨大的 PITA。

我尝试的第二件事是将对 Android 的构建工具 gradle 的调用集成到我的测试逻辑中。这意味着我执行了一个命令行调用,如 ./gradlew app:connectedAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=MyTestClass#notificationCheck 并检查了调用是否有肯定的执行结果。这产生了一些正确的测试结果,但感觉非常缓慢,因为命令行调用的执行时间相当长。

我使用 Android UI Automator 库进行跨应用程序测试。在 Android 设备上模拟进出后端的调用不是一个选项。

如何在我的普通集成测试中包含 Android 检测检查以创建端到端测试?对此有哪些技术解决方案?这种情况的解决方案是否已经存在?

示例测试可能如下所示:

class NotificationEventTest{
    @Autowired
    private MyService service;

    private AndroidDevice device = AndroidDevice.getConnectedDevice();

    @Test
    public void notificationEventTest(){
        service.createEvent();
        boolean success = device.checkNotification(); //instrumentation
        assertThat(success).isTrue();
    }
}

我发现 Appium 符合我的要求。执行一些重量级后端测试并同时在设备上断言响应是完全可能的。