Calabash Android 测试工具教程

⚡ 智能摘要

Calabash 是一个开源验收测试框架,它驱动真实的用户界面操作。 Android 以及使用简明英语的 iOS 应用程序 Cucumber 由 Ruby 步骤定义和设备端测试服务器支持的场景。

  • 🔸 定义: Calabash 在真实设备和模拟器上,自动执行针对原生和混合移动应用程序的点击、文本输入和断言操作。
  • ☑️ 语言栈: 场景是用 Gherkin 特性文件编写的,匹配的方法位于 step_definitions 中的 Ruby 文件中。
  • BDD基础: 行为驱动开发允许企业主、开发人员和测试人员在任何脚本存在之前就行为达成一致。
  • 🧪 设置顺序: Java 然后是 JDK,然后是 Ruby,然后 Android Studio然后是 calabash-android gem,使用版本命令进行了验证。
  • 🛠️ 执行流程: 重新签名 APK,构建测试服务器,连接设备,查询定位器,然后运行功能文件。
  • 📊 当前状态: Calabash 已存档且不再维护,因此新项目通常会选择 Appium, Espresso 或者改用 XCUITest。

Calabash 测试工具教程 Android 显示 Cucumber 驱动移动应用程序的功能文件

什么是 Calabash?

Calabash 是一个开源的 Acceptance 测试与验证 允许你编写和执行 iOS 测试的框架,以及 Android 应用。

它是一个自动化用户界面框架,允许使用 Ruby 编写测试。 Cucumber.

Calabash 其工作原理是在移动应用程序中启用自动用户界面交互,例如按下按钮、输入文本、验证响应等。它可以配置为在不同平台上运行。 Android 和 iOS 设备,提供实时反馈和验证。

⚠️ 版本说明: Microsoft 终止了其对……的贡献 Calabash 在最终的 iOS 11 和 Android 8 个版本,以及 calabash-android 仓库 现在该项目自称正在寻找维护者。以下流程详解保留原文,现代的替代方案将在最后一节中介绍。

Calabash 自动化?

在安装任何东西之前,最好权衡一下框架带来的收益与维护成本。

优势 缺点
它有助于提高产量/生产力。 需要熟练编写自动化测试脚本。
提高质量或提高质量的可预测性 调试测试脚本是一个主要问题。
提高流程或产品的稳健性(一致性)。 如果采用回放方法,测试维护成本很高。
提高产出的一致性并降低劳动力成本和费用 如果测试脚本测试更多屏幕,则测试数据文件的维护会很困难

Calabash 和 BDD

  • Calabash is 行为驱动开发 (BDD)它与……相同 测试驱动开发 (TDD)但是,它不是创建测试来描述 API 的形状,而是指定应用程序的行为。
  • BDD 是一个由多个利益相关者参与进来,对需要构建的内容达成共同理解的过程。
  • BDD 有助于构建正确的软件并从企业主的角度进行设计。

下图展示了如何 Calabash 套件采用分层结构,从顶层可供业务人员阅读的功能文件一直到最底层的设备交互。

Calabash BDD 层图,显示了功能文件、步骤定义和设备自动化层。

如何安装 Calabash

Calabash on Windows 需要按顺序安装四个先决条件。请在开始下一个步骤之前完全完成每个步骤,因为 calabash-android gem 会检查 Ruby 和 Android 安装过程中使用的 SDK。

第一部分)安装 Java JDK – 请参阅本指南 – /安装-java.html

第二部分)下载并安装 Ruby。

步骤 1)从以下位置下载 Ruby: URL https://rubyinstaller.org/downloads

RubyInstaller 下载页面列出了可用的 Ruby 版本 Windows

步骤二)打开exe文件,按照屏幕上的说明操作。安装完成后,您将看到以下屏幕。点击“完成”。

Ruby 安装向导完成屏幕,完成按钮高亮显示。

使用 Ruby 启动命令提示符 Windows 10并输入以下命令。

ruby -v

控制台会打印出已安装的解释器版本,如下所示。

在 Ruby 命令提示符中显示已安装的 Ruby 版本号

第三部分)下载并安装 Android

步骤1)下载 Android Studio at https://developer.android.com/studio

Android Studio 安装向导正在运行 Windows 在安装过程中

步骤 2)打开 exe 文件,按照屏幕上的说明完成安装。完成后,点击“完成”按钮。

Android Studio 安装完成屏幕,并显示完成按钮。

第四部分)安装 Calabash Android

步骤 1)在控制台中输入 gem install calabash-android。安装程序将开始运行,并需要一些时间才能完成。

安装 calabash-android gem 及其依赖项时的控制台输出

步骤 2)安装完成后,输入 calabash-android 版本

控制台确认已安装的 calabash-android gem 版本

通过与纽约的 Calabash

安装好 gem 之后,下一步是找到框架文件夹并了解它附带的框架结构。

打开“calabash-android-0.9.0”文件夹。它位于路径 C:\Ruby23\lib\ruby\gems\2.3.0\gems\calabash-android-0.9.0。文件夹名称将根据您在机器上安装的 ruby​​/calabash 版本同步更改。

打开功能骨架文件夹。留意这个基本框架。

Calabash 包含 support 和 step_definitions 目录的功能骨架文件夹

  • *.feature 文件包含我们要自动化的场景。
  • 功能文件所使用的方法写在“step_definitions”文件夹内的*.rb文件中。
  • 常用方法、环境设置、应用程序安装和钩子应该放在“support”文件夹中。

辞职并构建应用程序

  • Calabash-android 重新签名 *.apk
  • Calabash-android 构建 *.apk

重新签名会将开发者签名替换为调试密钥,以便测试服务器可以对应用程序进行检测,构建步骤会生成该测试服务器,如下面的控制台输出所示。

执行 calabash-android resign 和 build 命令生成测试服务器的控制台输出

将设备连接到系统/打开模拟器

检查所连接的设备。输入命令

adb devices

应显示已连接设备列表。如果设备缺失,请按照以下步骤进行 USB 调试和配对: ADB连接指南 解决大多数案件。

adb devices 命令列出一个已连接的设备 Android 按序列号操作设备

如何查找元素定位器

  • 打开控制台。输入命令。
    calabash-android console "APK Path"
    start_test_server_in_background
  • 上述命令在设备上启动应用程序。要查找元素定位器,请使用以下命令。
    query "*"

这将显示当前屏幕上的所有元素定位器。喜欢使用可视化检查器的测试人员可以与此工具交叉检查相同的层次结构。 uiautomator查看器.

Calabash 控制台打印当前应用程序屏幕的查询元素树

Calabash 项目结构和预定义步骤

无需手动复制 gem 文件夹,该框架可以为您生成一个可运行的项目。在项目目录中运行生成器即可创建标准 gem 文件夹。 Cucumber 布局的每个 Calabash 套房期望。

calabash-android gen

生成的树状图将 BDD 套件的三个关注点区分开来:

  • 特征/ ——小黄瓜大厦的各种设想之一 。特征 每个用户旅程都对应一个文件。
  • 特征/步骤定义/ — 与每个 Gherkin 行匹配的 Ruby 方法,包括捆绑的 calabash_steps.rb。
  • 功能/支持/ — 环境配置以及在各种情况下安装、启动和关闭应用程序的钩子。

自带的 calabash_steps.rb 文件比乍看之下更重要。它提供了一系列现成的英文步骤,因此在编写任何自定义方法之前,第一个场景就可以执行按钮点击、文本输入和断言可见字符串等操作。只有当流程超出这些预设步骤的适用范围时,才需要自定义步骤。

有两个项目级别的设置值得尽早了解。默认情况下,屏幕截图会保存在当前工作目录中,而环境变量 SCREENSHOT_PATH 会将它们重定向到其他位置,这样可以保持共享机器上构建产物的整洁。与系统对话框或其他应用程序交互需要 UIAutomator2 后端,可通过 `start_test_server_in_background(with_uiautomator: true)` 启动。

创建新脚本

打开功能文件并执行以下几行

登录功能文件已在编辑器中打开,显示了 Gherkin 场景步骤。

Feature: Login feature
  Scenario: As a valid user I can log into my app
    When I press "Login"
    And I enter my username
    And I enter my password
    Then I see "Welcome to coolest app ever"

打开步骤定义文件并将方法定义为 *.rb 文件。

Ruby 步骤定义文件映射ping 一条通往 Gherkin 线 Calabash 元素查询

Given /^I am on the login windows$/ do
   wait_for(:timeout =>100) { element_exists("* id:'loginInput;")}
   check_element_exists("* id:'loginInput;")
end

执行测试项目

要执行测试项目,请使用以下命令

calabash-android run "APK Path" "feature file Path" --tags "tag name"

Cucumber 程序会在执行每个步骤时打印出来,一次成功的运行会以这里显示的场景和步骤总数结束。

Calabash 运行输出显示了针对该设备执行的每个 Gherkin 步骤。

Calabash 执行完毕后,控制台会汇总报告已通过的场景和步骤计数。

相当常见 Calabash 错误及其解决方法

大多数首次运行失败都源于测试服务器所依赖的打包和权限规则,而非测试场景本身。下表列出了最常报告的症状及其已记录的原因。

症状 可能原因及解决方法
应用程序在测试开始时立即崩溃 APK 文件缺少 android.permission.INTERNET 权限,测试服务器需要此权限才能接受命令。请在 APK 文件中声明此权限。 AndroidManifest.xml 并重新构建。
按钮和文字对点击没有反应 未声明 targetSdkVersion。请添加 uses-sdk 条目,指定应用程序构建时所依据的 SDK 版本。
测试服务器无法连接到应用程序。 该 APK 没有使用调试密钥重新签名。请运行重新签名命令,然后重新构建后再运行。
运行时未列出任何设备 USB调试功能已关闭或驱动程序缺失。请先确认adb devices输出中是否显示序列号。
步骤失败,并出现未定义步骤错误。 Gherkin 文本与 step_definitions 中的任何正则表达式都不匹配。请复制建议的代码片段。 Cucumber 打印并实现它。

两个清单条目可以修复前两行。请在重新签名 APK 之前添加它们。

<uses-permission android:name="android.permission.INTERNET" />
<uses-sdk android:targetSdkVersion="SDK_VERSION" />

超时失败通常是环境因素而非功能因素造成的。运行缓慢的模拟器、应用程序冷启动或后台同步都可能导致屏幕加载时间超过 wait_for 的超时时间,因此在重写实际正确的步骤之前,应先提高超时时间。

Is Calabash 仍在维护?现代移动测试的替代方案

Calabash 已停止积极开发。 Microsoft 在支持完最终版 iOS 11 后停止了贡献。 Android 该项目已发布 8 个版本,目前已成为一个已归档的开源代码库,且无人维护。现有套件仍可在旧设备上运行,但新的开发工作应在受支持的框架上进行。

骨架 平台 最适合
Appium Android 和iOS 跨平台套件 Java, PythonRuby 或 Java脚本,以及最接近的替代品 Calabash 球队。
Espresso Android 仅由 用 Kotlin 或 Kotlin 编写的快速进程内测试 Java 由应用程序开发者自行决定。
XCUI测试 仅限iOS 本地人 Xcode 套房,是已退役套房的后续支持。 UI自动化框架.
Maestro 和 Detox Android 和iOS 针对抗故障和 React Native 应用程序的新型开源项目。

BDD 的习惯本身可以顺利迁移。Gherkin 特性文件保持不变,只有步骤定义主体会发生变化,因为 Cucumber 它位于驱动程序之上,而不是内部。迁移团队通常会保留功能文件,并针对 Ruby 步骤进行重写。 Appium并重复使用相同的 移动测试 器件矩阵和 自动化测试 他们已经在运营这条管道了。

常见问题

是的。一个独立的 calabash-ios gem 通过相同的 Ruby 和 Cucumber 它与该层共享弃用状态。 Android gem,因此当前的 iOS 开发工作最好使用 XCUITest 或其他工具。 Appium.

机器学习模型现在可以自动修复损坏的定位器,通过比较运行历史记录来标记不稳定的场景,并将崩溃报告集中起来,以便最严重的缺陷能够优先显现。至于应该断言什么,最终的判断权仍然掌握在测试人员手中。

Copilot 能很好地处理重复部分,例如 wait_for 代码块的包装。ping 这是一个元素查询。它无法知道您应用程序的元素标识符,因此请将生成的每个步骤视为草稿,并与实时查询结果进行验证。

Cucumber 是一个通用的 BDD 运行器,它读取 Gherkin 并调用 Ruby 方法。 Calabash 是这些方法调用的移动自动化库。 Cucumber 决定运行什么程序; Calabash 执行点击、文本输入和断言操作。

默认情况下,屏幕截图会写入当前工作目录,并按运行顺序命名。在运行之前设置 SCREENSHOT_PATH 环境变量,可以将屏幕截图重定向到指定的文件夹,从而使持续集成工件与源代码分离。

序号 Calabash 对已编译的 APK 进行插桩,这就是重新签名步骤存在的意义。源代码访问权限可以帮助您添加稳定的元素标识符,但框架本身只需要一个允许它重新签名和插桩的构建版本。

是的。因为执行过程只需一次命令行调用,所以任何构建服务器都可以在 APK 生成后调用它。 Jenkins 该作业通常会放弃 APK,启动模拟器,运行标记的功能并归档报告。

保持 Gherkin 功能文件不变,仅重写步骤定义体。 Appium 客户端。元素查询变成了定位策略,而安装应用程序的钩子变成了驱动程序设置中所需的功能。

总结一下这篇文章: