在 AWS Device Farm、Saucelabs、Firebase 测试实验室等中运行 Flutter 集成测试

Posted

技术标签:

【中文标题】在 AWS Device Farm、Saucelabs、Firebase 测试实验室等中运行 Flutter 集成测试【英文标题】:Running Flutter Integration Tests in AWS Device Farm, Saucelabs, Firebase Test Lab etc 【发布时间】:2019-04-17 20:34:15 【问题描述】:

如何在 AWS Device Farm、Saucelabs、Firebase 测试实验室等基础设施中非本地运行 Flutter 集成测试 (flutter_driver)?

Running flutter_driver tests 在我的本地机器上运行顺畅且轻松,但是基于云的移动测试服务没有安装使用 Flutter CLI 命令所需的依赖项。

Flutter 存储库中有几个地方表明这是可能的,但是我很难准确找到实现这一目标需要发生的事情(我对 android 的经验有限& ios 集成测试)。

我找到的一些参考资料: Flutter_gallery 中讨论集成测试的评论:https://github.com/flutter/flutter/issues/18879#issuecomment-400816050

添加 Firebase 测试实验室集成测试的 github 问题:https://github.com/flutter/flutter/issues/11718

我需要在我的 Flutter 应用中添加什么内容才能在 AWS Device Farm、Saucelabs、Firebase 测试实验室等中进行远程集成测试?

感谢您的帮助。

【问题讨论】:

你看到这个flutter.io/docs/testing#continuous-integration-and-testing了吗? 看起来有人在这里尝试过这样做。我还没有测试过这个 repo,但是,它看起来很有希望:github.com/mmcc007/sylph @AlexFallenstedt 这个库实际上是下面最佳答案的确切实现。源码中提到了 【参考方案1】:

尽管我们并未正式支持 AWS Device Farm 上的 Flutter 框架和 Flutter 测试,但我们确实有办法让您使用我们的“自定义环境模式”并预先选择不同的受支持框架来运行这些测试。我的建议是执行以下操作:

我有一个非常小的 Appium Python 虚拟测试,这是一个位于 https://s3-us-west-2.amazonaws.com/aws-devicefarm-support/test_bundle_slim.zip 的受支持的测试框架。从那里下载它,然后使用命令行工具 zip,将本地测试添加到这个 zip 文件中,使用诸如“zip -r ~/Downloads/test_bundle_slim.zip flutter-tests/”之类的命令 转到 AWS Device Farm,设置自动化测试运行,上传您的应用程序,然后进入您选择测试类型的屏幕。选择 Appium Python,上传您的 zip 文件,AWS Device Farm 将接受测试,因为我们将原始虚拟 Appium Python 文件留在了 zip 文件中。 在下面选择“自定义您的测试环境”,下面会出现一个带有 YAML 测试规范文件的新窗口。将以下行放在测试规范的预测试部分中,以代替用于启动 Appium 服务器的现有代码:

代码

  - >-
    if [ $DEVICEFARM_DEVICE_PLATFORM_NAME = "Android" ];
    then
        # Run EC2 setup code here
        curl https://storage.googleapis.com/flutter_infra/releases/beta/linux/flutter_linux_v0.11.3-beta.tar.xz -o flutter_linux_v0.11.3-beta.tar.xz
        tar xf flutter_linux_v0.11.3-beta.tar.xz
    fi

    if [ $DEVICEFARM_DEVICE_PLATFORM_NAME = "iOS" ];
    then
        # Run Mac setup code here
        curl https://storage.googleapis.com/flutter_infra/releases/beta/macos/flutter_macos_v0.11.3-beta.zip -o flutter_macos_v0.11.3-beta.zip
        unzip -qq flutter_macos_v0.11.3-beta.zip
    fi

  - mv flutter ~/flutter
  - echo "export PATH=$PATH:$HOME/flutter/bin">> ~/.bash_profile
  - export PATH=$PATH:$HOME/flutter/bin
  - flutter devices

代码

同样,转到测试规范文件的测试部分并删除python测试命令“bin/py.test”并将其替换为您的Flutter测试命令,例如“flutter drive --target=./flutter-测试/main.dart 保存并关闭此测试规范文件,然后通过选择您的设备并设置其状态来完成自动化运行设置。

祝您在 AWS Device Farm 上测试顺利!我已经确认这些步骤确实可以在我们的测试平台上正确设置 Flutter。

【讨论】:

Anurag Goyal,Flutter 集成测试需要 Android SDK 附带的标准 adb。 Device Farm 使用来自 Amazon 的自定义 adb 覆盖标准 adb,该自定义 adb 禁用端口转发,这是颤振测试所需的功能。 AFAIK,让 Flutter 集成测试运行的唯一方法是使用比共享 Device Farm 贵得多的私有 Device Farm。这是正确的吗? 忽略最后一条消息。我能够在共享的 Android 设备农场上运行颤振集成测试 你试过用 iOS 测试吗?到目前为止我没有任何运气...... AWS Device Farm 是否提供支持?【参考方案2】:

注意:这解决了导致您的问题的假设。不能直接回答您的问题。

可以仅使用模拟器(无需实际设备)在云上运行 Flutter 集成测试。以下文章介绍了如何设置它。这篇文章包括一个关于 Travis-CI 的工作示例。

Flutter unit, widget and integration testing with IOS and Android emulators on Travis-CI

GitHub 上的源代码以及最新构建的链接,包括在 iOS 和 Android 上运行的集成测试结果,可以在 here 找到。随意克隆并用作您自己项目的起点。

如果您正在构建具有广泛分布(大量用户)的复杂应用程序等,您可能想要在实际设备上运行集成测试......

【讨论】:

mmcabe - 您如何将 ios 和 integration_test 插件与 aws 设备场一起使用? (例如,不是 appium,不是 sylph,不是旧的测试驱动框架)

以上是关于在 AWS Device Farm、Saucelabs、Firebase 测试实验室等中运行 Flutter 集成测试的主要内容,如果未能解决你的问题,请参考以下文章

将文件上传到 AWS Device Farm

尝试从 AWS Lambda 但不是桌面访问 AWS Device Farm 时出现 SSL 证书错误

AWS Device Farm目前支持iOS 10.3.3及更低版本的XCTest

AWS Device Farm 应用程序未列出任何设备

将 AWS Device Farm 与 JUnit 5 结合使用

AWS Device Farm 上的 ruby​​-appium-cucumber 问题