- 移动开发
- 开发工具
【免费下载链接】calabash-android
Automated Functional testing for Android using cucumber
Calabash-Android 是一款免费的开源 Android UI 自动化测试工具,它让你用类自然语言的 Cucumber(Gherkin)语法来描述测试场景,自动完成"点击按钮、输入文本、断言界面"等 Android UI 自动化测试全流程。无论你是刚接触移动端测试的开发者,还是想给 CI 流水线补充界面级验证的团队,这份概览都能帮你在 5 分钟内搞清楚它是什么、能干什么、以及如何上手。
一、Calabash-Android 是什么?
简单来说,Calabash-Android 解决的是"如何像真实用户一样操作 App"的问题:
- 自动化功能测试:模拟用户点击、滑动、输入、滚动等操作,验证 App 行为是否符合预期;
- 原生与混合应用都支持:既可以测试原生 Android 应用,也能覆盖 WebView 中的混合页面;
- 类自然语言用例:基于 Cucumber 框架,测试用例用
Given / When / Then书写,产品经理和测试人员都能读懂; - 丰富的预定义步骤:内置大量开箱即用的步骤(断言、输入、按钮、导航、截图等),不用从零写代码。
项目入口在 README.md,官方文档拆分为 installation.md(安装指南)和 ruby_api.md(Ruby API)两部分。
📌 背景提示:该项目最初由 Microsoft(Xamarin)主导开发,现已是社区维护的免费开源项目,遵循 Eclipse 公共许可证(见 LICENSE)。
二、工作原理:测试服务器架构
Calabash-Android 采用客户端-服务器架构,这是理解它的关键:
| 角色 | 说明 |
|---|---|
| 客户端(Ruby) | 运行在你的电脑上,通过 HTTP 与设备通信,执行你的测试脚本 |
| 测试服务器(Test Server) | 一个自动构建并安装到设备的 instrumentation APK,随被测应用一起运行 |
当你执行测试命令时,Calabash 会自动安装"测试服务器"到设备/模拟器上。测试服务器拥有特殊权限,可以深度访问应用内部的视图树,从而精确地查找控件、读取文本、模拟手势。每次测试新的应用包(APK)或升级 Calabash 版本时,它都会自动重新构建这个测试服务器。
💡 一个常见坑:被测应用需要声明
android.permission.INTERNET权限,否则测试服务器无法正常通信,App 可能在启动后立即崩溃。详见 README.md 的 Troubleshooting 章节。
三、它能做什么?核心能力清单
🎯UI 元素查询(UIQuery):按 id、文本、类名、索引等条件查找界面上的任意控件,还能直接读取它的属性(文本、坐标、是否可用等)。
🖱️手势与交互:点击、长按、滑动、滚动、拖拽、Flick(快速轻扫)等完整手势支持,见 gestures.rb。
⌨️文本输入:向输入框填入文本、清空输入框,支持按索引、id 或 contentDescription 定位。
📅复杂控件操作:日期选择器、时间选择器、Spinner、复选框、进度条、上下文菜单等都有专门步骤。
📍模拟定位(Location Mocking):可以模拟设备 GPS 位置,测试地图类功能。
📸截图:断言失败时自动截图,也支持环境变量SCREENSHOT_PATH自定义截图保存路径。
🤖UIAutomator2 扩展:以with_uiautomator: true启动测试服务器后,还可以与系统级元素(如通知栏、状态栏)和其他应用交互。
完整的预定义步骤清单见 canned_steps.md。
四、一键安装步骤:环境准备
按照 installation.md 的指引,你需要准备 4 样东西:
- Ruby ≥ 2.0(推荐用 rbenv 或 rvm 管理,切勿用 sudo 安装 gem)
- Java Development Kit(JDK),可通过
JAVA_HOME环境变量指定 - Android SDK,并设置
ANDROID_HOME环境变量 - Bundler(Ruby 的依赖管理工具)
安装本身只需要两行命令(在项目的 Gemfile 中声明calabash-android和cucumber两个依赖后):
gem install bundlerbundle install
之后所有命令都通过bundle exec前缀执行。项目还整理了一份 ENVIRONMENT_VARIABLES.md,列出了APP_PATH、MAIN_ACTIVITY、SCREENSHOT_PATH等控制运行时行为的环境变量,非常适合 CI 环境配置。
五、快速上手:从骨架到跑通第一个用例
官方提供了"生成测试骨架"的命令calabash-android gen,它会一键创建一个标准 Cucumber 项目结构:
- features/:存放
.feature测试文件 - features/step_definitions/calabash_steps.rb:引入全部预定义步骤
- features/support/env.rb 等:应用安装与生命周期钩子
- my_first.feature:你的第一个测试用例
骨架中的示例用例(my_first.feature)只有寥寥几行,就能看懂 Calabash 用例的写法:
Scenario: As a valid user I can log into my app When I press "Login" Then I see "Welcome to coolest app ever"想看到更完整的例子,可以研究集成测试目录里的 main.feature,里面覆盖了模拟定位、输入文本、WebView 交互、滚动、Flick 等场景;配套的测试应用源码在 NativeTestApp 下,每个界面都对应一个 Activity,非常适合作为学习样例。
跑测试同样简单——一条命令:
calabash-android run <你的apk文件>Calabash 会自动安装测试服务器和你的应用,然后逐场景执行,失败时自动截图留证。
六、项目结构导览
| 路径 | 内容 |
|---|---|
| ruby-gem/lib/calabash-android/ | 核心 Ruby 源码:步骤定义、手势、查询、辅助工具 |
| ruby-gem/lib/calabash-android/steps/ | 按场景分类的预定义步骤(日期、定位、地图、截图等) |
| ruby-gem/features-skeleton/ | 新项目模板(gen命令生成物的来源) |
| ruby-gem/integration-tests/ | 完整的集成测试示例(含测试应用) |
| ruby-gem/spec/ | 单元测试 |
| changelog/ | 各版本变更说明 |
| CHANGELOG.md | 完整版本历史(从 0.5 到 0.9.x) |
七、适合谁用?选型建议
✅适合:希望用类自然语言维护 UI 测试的团队;已有 Cucumber 经验、想统一跨端(iOS/Android)测试语法的团队;需要轻量、免费、可自托管的界面自动化方案的开发者。
⚠️注意:该项目已进入社区维护阶段,官方文档以仓库内 documentation/ 目录为主;升级 0.5 版本以上时需注意部分旧动作被移除(迁移指引见 migrating_to_calabash_0.5.md)。
八、小结
Calabash-Android 的核心价值可以用三句话概括:
- 免费开源,Cucumber 类自然语言用例,团队人人都能读懂;
- 测试服务器架构深入应用内部,查询与断言能力远超外部驱动方案;
- 上手成本低:一条命令生成骨架,一条命令跑起第一个 UI 自动化测试。
如果你正在为 Android App 寻找功能自动化测试方案,不妨从 documentation/installation.md 开始,10 分钟内就能让第一个用例在真机上跑起来。🚀
- 移动开发
- 开发工具
【免费下载链接】calabash-android
Automated Functional testing for Android using cucumber
相关推荐
为什么CasperJS仍是前端自动化测试的首选工具?
为什么CasperJS仍是前端自动化测试的首选工具? 在前端自动化测试领域,尽管有许多新兴工具不断涌现,但CasperJS作为一款成熟稳定的导航脚本和测试工具,
测试网页爬虫MyOne-iOS:打造你的专属《一个》客户端,从入门到精通的完整指南
MyOne iOS:打造你的专属《一个》客户端,从入门到精通的完整指南 MyOne iOS是一款精心打造的《一个》阅读应用客户端,为追求纯净阅读体验的iOS用户
Twitter Web Exporter终极指南:无需API密钥的浏览器脚本数据导出工具
Twitter Web Exporter终极指南:无需API密钥的浏览器脚本数据导出工具 你是否曾为备份Twitter数据而烦恼?是否想要批量导出推文、书签和关
开发工具网页爬虫
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考