Calabash Android 测试工具教程
⚡ 智能摘要
Calabash 是一个开源验收测试框架,它驱动真实的用户界面操作。 Android 以及使用简明英语的 iOS 应用程序 Cucumber 由 Ruby 步骤定义和设备端测试服务器支持的场景。
什么是 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
Calabash on Windows 需要按顺序安装四个先决条件。请在开始下一个步骤之前完全完成每个步骤,因为 calabash-android gem 会检查 Ruby 和 Android 安装过程中使用的 SDK。
第一部分)安装 Java JDK – 请参阅本指南 – /安装-java.html
第二部分)下载并安装 Ruby。
步骤 1)从以下位置下载 Ruby: URL https://rubyinstaller.org/downloads
步骤二)打开exe文件,按照屏幕上的说明操作。安装完成后,您将看到以下屏幕。点击“完成”。
使用 Ruby 启动命令提示符 Windows 10并输入以下命令。
ruby -v
控制台会打印出已安装的解释器版本,如下所示。
第三部分)下载并安装 Android
步骤1)下载 Android Studio at https://developer.android.com/studio
步骤 2)打开 exe 文件,按照屏幕上的说明完成安装。完成后,点击“完成”按钮。
第四部分)安装 Calabash Android
步骤 1)在控制台中输入 gem install calabash-android。安装程序将开始运行,并需要一些时间才能完成。
步骤 2)安装完成后,输入 calabash-android 版本
通过与纽约的 Calabash
安装好 gem 之后,下一步是找到框架文件夹并了解它附带的框架结构。
打开“calabash-android-0.9.0”文件夹。它位于路径 C:\Ruby23\lib\ruby\gems\2.3.0\gems\calabash-android-0.9.0。文件夹名称将根据您在机器上安装的 ruby/calabash 版本同步更改。
打开功能骨架文件夹。留意这个基本框架。
- *.feature 文件包含我们要自动化的场景。
- 功能文件所使用的方法写在“step_definitions”文件夹内的*.rb文件中。
- 常用方法、环境设置、应用程序安装和钩子应该放在“support”文件夹中。
辞职并构建应用程序
- Calabash-android 重新签名 *.apk
- Calabash-android 构建 *.apk
重新签名会将开发者签名替换为调试密钥,以便测试服务器可以对应用程序进行检测,构建步骤会生成该测试服务器,如下面的控制台输出所示。
将设备连接到系统/打开模拟器
检查所连接的设备。输入命令
adb devices
应显示已连接设备列表。如果设备缺失,请按照以下步骤进行 USB 调试和配对: ADB连接指南 解决大多数案件。
如何查找元素定位器
- 打开控制台。输入命令。
calabash-android console "APK Path" start_test_server_in_background
- 上述命令在设备上启动应用程序。要查找元素定位器,请使用以下命令。
query "*"
这将显示当前屏幕上的所有元素定位器。喜欢使用可视化检查器的测试人员可以与此工具交叉检查相同的层次结构。 uiautomator查看器.
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)` 启动。
创建新脚本
打开功能文件并执行以下几行
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 文件。
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 错误及其解决方法
大多数首次运行失败都源于测试服务器所依赖的打包和权限规则,而非测试场景本身。下表列出了最常报告的症状及其已记录的原因。
| 症状 | 可能原因及解决方法 |
| 应用程序在测试开始时立即崩溃 | 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并重复使用相同的 移动测试 器件矩阵和 自动化测试 他们已经在运营这条管道了。
















