在 EAS Build 上运行 E2E 测试

编辑页面

了解如何使用 Maestro 在 EAS Build 上设置并运行 E2E 测试。


For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.

已弃用: 这是我们 EAS Build E2E 测试指南的旧归档版本。在此查看最新版本的指南

在本指南中,你将学习如何使用 Maestro 在 EAS Build 上创建并运行 E2E 测试,Maestro 是用于在移动应用中运行 E2E 测试的最受欢迎的工具之一。

此示例演示了如何使用 默认 Expo 模板 配置你的 EAS Build Maestro E2E 测试工作流。对于你自己的应用,你需要调整这些流程以匹配应用的 UI。

观看:如何在 EAS Build 上运行 E2E 测试
观看:如何在 EAS Build 上运行 E2E 测试

使用 Maestro 在 EAS Build 上设置并运行端到端测试,为你的应用自动化 UI 测试。

1

初始化一个新项目

如果你已经有现有的 Expo 项目,可以跳过此步骤。

使用以下命令创建一个新项目:

Terminal
# 初始化一个新项目
npx create-expo-app@latest eas-tests-example

# 进入项目目录
cd eas-tests-example

2

配置 EAS Build

如果你的项目已经配置好 EAS Build,可以跳过此步骤。

以下命令会在 Expo 服务器上为你的应用创建一个新项目,并在项目根目录中创建 eas.json

Terminal
eas init

eas build:configure

3

禁用新的 Android 构建基础设施

前往 项目设置 并禁用 新的 Android 构建基础设施

遗憾的是,由于缺少启动 Android 模拟器所需的虚拟化支持,新的构建基础设施与 E2E 测试不兼容。我们正在为在 EAS 上运行各种测试探索更好的解决方案。

4

添加示例 Maestro 测试用例

以下是使用默认 Expo 模板创建的应用的 UI 外观:

让我们为示例应用创建两个简单的 Maestro 流程。首先在项目目录根目录下创建一个名为 maestro 的目录。该目录将包含你要配置的流程,并且应与 eas.json 处于同一级别。

在其中创建一个名为 home.yml 的新文件。此流程将启动应用,并断言主屏幕上可见文本 “Welcome!”。

maestro/home.yml
appId: dev.expo.eastestsexample # 这是一个示例 app id。请将其替换为你的 app id。 --- - launchApp - assertVisible: 'Welcome!'

接下来,创建一个名为 expand_test.yml 的新流程。此流程将打开示例应用中的 “Explore” 屏幕,点击可折叠项 “File-based routing”,并断言屏幕上可见文本 “This app has two screens”。

maestro/expand_test.yml
appId: dev.expo.eastestsexample # 这是一个示例 app id。请将其替换为你的 app id。 --- - launchApp - tapOn: 'Explore.*' - tapOn: '.*File-based routing' - assertVisible: 'This app has two screens.*'

5

在本地运行 Maestro 测试

要在本地运行 Maestro 测试,请按照 安装 Maestro 中的说明安装 Maestro CLI。

将你的应用安装到本地 Android 模拟器或 iOS 模拟器中。打开终端,进入 Maestro 目录,并运行以下命令以使用 Maestro CLI 启动测试:

Terminal
maestro test maestro/expand_test.yml

maestro test maestro/home.yml

下面的视频展示了 maestro/expand_test.yml 流程的成功运行:

6

创建用于运行 Maestro E2E 测试的自定义构建工作流

在 EAS Build 上运行 Maestro E2E 测试的最简单方法是创建一个 自定义构建工作流。此工作流将构建你的应用并在其上运行 Maestro 测试。

首先,向项目中添加一个自定义构建配置文件。在项目中、与 eas.json 同级的位置创建一个目录 .eas/build。这两个目录的路径和名称对于 EAS Build 识别项目是否包含自定义构建配置都很重要。

在其中创建一个名为 build-and-maestro-test.yml 的新配置文件。该文件定义了你想要运行的自定义构建工作流配置。工作流包含在自定义构建过程中执行的步骤。此自定义构建配置将执行 eas/build 自定义函数组来创建构建,然后执行 eas/maestro_test,这是一个一体化的自定义函数组,它会安装 Maestro、准备测试环境(Android 模拟器或 iOS 模拟器),并使用由 flow_path 输入指定的流程测试应用。

.eas/build/build-and-maestro-test.yml
build: name: Create a build and run Maestro tests on it steps: - eas/build - eas/maestro_test: inputs: flow_path: | maestro/home.yml maestro/expand_test.yml

现在通过添加一个名为 build-and-maestro-test 的新 构建配置 来修改 eas.json。它将用于运行来自 build-and-maestro-test.yml 文件的自定义构建配置。此配置将构建你的应用的模拟器/仿真器版本,并在其上运行 Maestro 测试。

警告 我们观察到,如果在带有 Xcode 15.0 或 15.2 的镜像上运行,Maestro 测试经常会超时。请使用 latest 镜像 以避免任何问题。

eas.json
{ "build": { %%placeholder-start%%... %%placeholder-end%% "build-and-maestro-test": { "withoutCredentials": true, "config": "build-and-maestro-test.yml", "android": { "buildType": "apk", "image": "latest" }, "ios": { "simulator": true, "image": "latest" } } } %%placeholder-start%%... %%placeholder-end%% }

7

构建你的应用并在 EAS Build 上运行 E2E 测试

要使用 build-and-maestro-test 配置执行自定义构建,在构建你的应用后运行 Maestro E2E 测试,请运行以下命令:

Terminal
eas build --profile build-and-maestro-test

当流程失败时,任何 Maestro 产物都会自动作为构建产物上传。这包括保存在 ~/.maestro/tests(默认位置)的截图。你可以从构建页面下载它们。

更多内容

如果你想构建更高级的自定义构建工作流,请参阅 自定义构建 schema 参考 以了解更多信息。

要进一步了解 Maestro 流程以及如何编写它们,请参阅 Maestro 文档

故障排查

如果你在 EAS Build 上为 E2E 测试启动 Android 模拟器时遇到以下错误信息:

Failed to configure emulator: emulator with required ID not found.

这很可能是因为你的项目启用了新的构建基础设施。前往 项目设置 并禁用 新的 Android 构建基础设施