App Testing 代理 (Android)

App Testing 代理是一个由 Gemini in Firebase 提供支持的测试用例生成、管理和执行代理。您可以用自然语言定义测试目标,代理会使用 AI 来了解和浏览您的应用,模拟用户互动,并提供详细的测试结果。

App Testing 代理如何使用您的数据

App Testing 代理由 Gemini in Firebase 提供,并适用相同的条款。如需详细了解 Gemini in Firebase 如何使用您的数据,请参阅 Gemini in Firebase 如何使用您的数据

须知事项

如果您尚未在 Firebase 中注册您的应用,请进行注册。

如果您没有使用任何其他 Firebase 产品,只需创建一个项目并注册您的应用,无需为您的应用添加任何 SDK。不过,如果将来决定使用其他产品,请务必完成使用 Firebase 控制台添加 Firebase 中的所有步骤。

创建测试用例

为了运行 AI 引导的测试,App Testing 代理会使用您的自然语言测试用例来针对您的应用执行测试。

每个测试用例都细分为多个步骤,这些步骤将按顺序执行。借助步骤,您可以将测试用例拆分为多个阶段,每个阶段都有各自的断言。代理可以在任何一个步骤期间执行多项操作。

您可以通过以下两种方式创建测试用例:使用 YAML 文件或使用 Firebase 控制台。借助 YAML 文件,您可以自行管理测试用例,通常是在启用了版本控制的源代码库中进行管理。或者,Firebase 控制台可以远程存储您的测试用例以及 App Distribution 数据。

使用 YAML 文件

以下示例展示了一个定义了两个测试用例的 YAML 文件:

tests:
- displayName: Login as guest
  id: login-as-guest
  steps:
  - goal: Log in as a guest
    finalScreenAssertion: The home screen is visible
- displayName: View biography card birth date
  prerequisiteTestCaseId: login-as-guest
  steps:
  - goal: Open the article on "Bob Dylan"
    hint: Use the search function to find it
    finalScreenAssertion: >-
      The article is opened and the title "Bob Dylan" is visible.
  - goal: Find Bob Dylan's birthday in the article
    hint: >-
      Look for the "Born" section in the infobox on the right side of the page.
    finalScreenAssertion: >-
      The text "May 24, 1941" is visible on the screen.

您可以在单个文件中整理测试组,也可以在多个文件中分隔这些测试套件。您可以向测试添加 ID,然后使用 prerequisiteTestCaseId 引用该 ID,从而添加前提条件测试用例。

使用 App Distribution 控制台

或者,您也可以在 Firebase 控制台中创建和管理测试用例。如需创建测试用例,请打开 Firebase 控制台App Distribution 页面,然后执行以下步骤:

  1. 测试用例标签页上,点击新建测试用例。如果您不想创建自己的测试用例,可以修改或使用提供的测试用例示例
  2. 添加测试用例对话框中,为测试用例命名。名称用于标识测试,但会被代理忽略。
  3. (可选)选择一个包含设置步骤的前提条件测试用例,用于在主测试之前运行。如果前提条件测试失败,整个测试将被标记为失败。前提条件测试和主要测试的步骤和结果将一起显示在测试结果中。
  4. 考虑点击添加其他步骤按钮,来将测试拆分为多个步骤。
  5. 为每个步骤指定一个目标,用于说明应用测试代理在该步骤中应执行的操作。
  6. (可选)添加提示以提供更多信息,以帮助应用测试代理在该步骤中了解和浏览您的应用。
  7. 添加最终屏幕断言,以帮助应用测试代理确定何时已成功完成该步骤。此断言应仅指屏幕上显示的内容。
  8. 完成自定义测试后,点击保存

测试用例示例

下面举例说明如何使用 App Testing 代理创建测试用例:

测试标题

首页加载

目标

加载首页

提示

跳过所有新用户引导屏幕。关闭所有弹出式窗口。无需登录。

最终页面断言

应用主页面在屏幕上可见,所有图片均已加载完成,且未显示任何错误。

运行测试

测试的运行方式取决于您创建和管理测试用例的方式。如果您使用 YAML 文件定义测试用例,则可以使用 Firebase CLI 运行这些测试。如果您在 App Distribution 控制台中创建测试用例,则可以从控制台或通过某个 App Distribution CLI 工具运行这些测试用例。

使用 YAML 文件

可以使用 Firebase CLI 执行在 YAML 文件中定义的测试用例。

  1. 安装或更新至最新版本的 Firebase CLI。建议您下载特定于您的操作系统的 CLI 对应的独立二进制文件。
  2. 登录并测试您是否可以访问自己的项目。请注意,如果您是在 CI 环境中使用 Firebase CLI,则还可以使用服务账号或使用 login:ci 进行身份验证。
  3. 运行 apptesting:execute 命令。例如:

    firebase apptesting:execute \
      --app=1:1234567890:android:0a1b2c3d4e5f67890 \
      --test-dir=./mytests \
      ./app/build/outputs/apk/debug/app-debug.apk
    
apptesting:execute [options] [/path/to/app/binary]
--app

必需:您的应用的 Firebase 应用 ID。您可以在 Firebase 控制台的常规设置页面上找到此应用 ID。

--app 1:1234567890:android:0a1b2c3d4e5f67890

--test-dir

包含测试用例 YAML 文件的目录的路径。该命令将在此目录下以递归方式进行搜索,因此您可以视需要将文件整理到子目录中。如果未设置,则默认使用“./tests”。

--test-devices
--test-devices-file

您要将 build 分发给应用测试代理功能的测试设备。

您可以采用以分号分隔的测试设备列表的形式指定测试设备:

--test-devices "model=tokay,version=36,locale=en,orientation=portrait;model=b0q,version=33,locale=en,orientation=portrait"

或者,您可以指定一个纯文本文件的路径,该文件包含以分号分隔的测试设备列表:

--test-devices-file "/path/to/test-devices.txt"

您可以使用 gcloud CLI 查找可用的设备型号。

--test-non-blocking

如果设置,该命令将启动测试,然后立即返回,而不会等待测试完成。

--test-file-pattern

一种正则表达式模式。系统将仅执行与此模式匹配的文件中包含的测试。

--test-name-pattern

一种正则表达式模式。系统将仅执行显示名称与此模式匹配的测试。

/path/to/app/binary

可选:应用的二进制文件的路径。如果省略,智能体将使用上传到 App Distribution 的指定应用的最新版本。

使用 App Distribution 控制台

如需运行存储在 App Distribution 中的测试用例,您可以使用 Firebase 控制台、Firebase CLI 或 App Distribution 的 Gradle 或 Fastlane 插件。

使用 YAML 文件导入和导出测试用例

如果您想在 Firebase 控制台之外管理测试用例,从 YAML 文件导入测试用例会很有用。此外,将测试用例导出后在项目之间迁移这些用例也很有用。您可以使用 LLM 来优化现有测试用例或创建新的测试用例。您可以在 Firebase 控制台的“测试用例”页面中导入和导出测试用例,也可以使用 Firebase CLI 以编程方式执行此操作。如需查看 YAML 测试用例的示例,请参阅创建 YAML 测试用例

查看测试结果

您可以前往版本页面,选择一个特定版本,然后进入该版本的应用测试代理标签页以查看测试结果。查看详情按钮会打开“测试结果”对话框,并显示应用的任何问题、屏幕截图,以及 Gemini 在测试过程中执行的操作。

如果测试包含重放的操作,您可以查看原始的 AI 引导测试运行或清除缓存。

如需详细了解测试结果,请参阅下表:

图标 名称 说明
spark AI 操作 表示应用测试代理使用 Gemini 决定采取某项操作或结束相应步骤。
重放 已重放操作 表示 App Testing 代理重放了之前成功运行测试中的操作。
spark AI 断言 表示应用测试代理在重放之前成功运行同一测试中的操作后,使用 Gemini 验证了最终屏幕断言。

调试您的测试结果

如果测试结果与预期不同,您可以在“测试结果”页面上使用查看详情下方的显示代理视图切换开关来调试测试。代理视图会显示 App Testing 代理在使用应用的无障碍功能信息时能够检测到的屏幕元素。如果您想更详细地查看代理看到的内容,可以从操作溢出菜单下载该信息。

您还可以在“测试结果”页面上使用查看制品按钮查看测试结果的所有视频、日志和其他 Cloud 制品。

已知问题和限制

App Testing 代理预览版存在一些已知限制:

  • 由于 App Testing 代理使用生成式 AI 测试您的应用,它有时会遵循相同指令,但执行不同的操作。
  • 应用测试代理仅支持以下操作:点按、输入文本、向上/向下/向左/向右滑动、长按、拖放、返回和等待。
  • App Testing 代理在执行仅包含单个步骤但需要多个操作才能完成的测试时遇到问题。将复杂任务分解为多个较短的步骤可以提升性能。
  • App Testing 代理有时无法滚动来显示屏幕外的其他元素。如果没有可滚动的视觉指示,这种情况会更频繁地发生。作为临时解决方法,可以使用“提示”字段来建议滚动。
  • App Testing 代理有时会遇到计数问题,例如执行某个操作的特定次数。
  • 如果启用了 FLAG_SECURE,App Testing 代理将无法导航您的应用。它不会显示应用的屏幕截图,而只会显示空白屏幕。

测试配额

在预览版期间,AI 引导测试会在配额限制内免费提供。默认配额限制为每个 Firebase 项目每月 200 次测试。

请注意,如果您选择在多台设备上运行多个测试用例,或在多台设备上运行同一测试用例,这将计为多次测试。例如,如果您在 2 台设备上运行 2 个测试用例,则总共计为 4 次测试。

如需将配额提高到超过默认限制,请与 Firebase 支持团队联系,并提供您的应用场景。