最近研究移动端 App 自动化测试,对比多种测试框架后,对 MonkeyTalk 产生了兴趣,记录自己的一些学习心得,希望其他有兴趣的人一起研究。TesterHome 管理员建立了一个MonkeyTalk Wiki 合集,欢迎大家一起补充完善。
MonkeyTalk 是什么?
MonkeyTalk 是一个简单易用,而且跨平台的自动化测试框架,通过录制和回放易于阅读和维护的测试脚本来对 Android,iOS,Hybrid App 进行自动化测试。
MonkeyTalk 测试框架包括两个主要的部分:MonkeyTalk 集成开发环境和 MonkeyTalk Agents。
- MonkeyTalk 集成开发环境是一个基于 Eclipse 的工具集合,包含录制,回放,编辑和管理功能测试用例的功能看,同时还支持在模拟器或者设备上执行测试脚本对 iOS 和 Android 应用程序进行自动化测试。
- MonkeyTalk Agents 是一个 lib 库,分为 iOS 和 Android 版本,开始测试前,要将该 lib 库加到我们的被测 app 中。这样我们的 Agent 才能记录和回放我们对 App 的操作步骤。每个操作步骤被定义为一句 MonkeyTalk 命令。
MonkeyTalk 有什么特性?
节省时间,费用以及提高团队的产出是我们引入 MonkeyTalk 进行自动化测试的终极目标。MonkeyTalk 也被设计得非常易于使用,无需任何编码经验,即可快速入门。同时,如果你是一位经验丰富的自动化测试工程师,你也可以使用它来建立你自己的自动化测试框架。
- 支持模拟器和真机测试,无需越狱或 root
- 支持跨平台录制和回放,通过 MonkeyTalk,你可以快速开始你的自动化测试,无需任何培训。如果你的 iOS 和 Android App 使用同一套 UI,你甚至可以录制一套用例,然后在两个平台同时回放。
- 全面的触摸和手势支持,MonkeyTalk 能识别几乎所有的触屏和手势交互,如点击,拖拽和滑动事件。
- 提供集成开发环境,你可以通过 MonkeyTalk IDE 创建,运行,编辑你的测试脚本,操作非常简单。
- 支持 API 扩展,你可以使用 MonkeyTalk 语言,Javascript 或者 Java 对测试步骤进行编程,然后通过外部框架,如 Junit 来管理和执行你的测试用例。
- 支持多方式执行脚本,MonkeyTalk 提供了一个完整的 Ant 任务执行方案来执行用例和管理测试结果。你还可以通过命令行来启动你的测试脚本。将 MonkeyTalk 的打包,安装和脚本执行通过 Ant 任务来执行,从而可以构成一套完整的自动化测试体系。
- MonkeyTalk 不仅回放用户操作,还可以验证他们的执行结果。你可以验证任何对象的控件,图像,文本等属性。与其他自动化工具不同的是,MonkeyTalk 采用真正的面向对象的技术,就像它能进入你的 App,从而看到你的状态。
- 支持数据扩展,MonkeyTalk 可以读取 CSV 文件中的数据来构造不同输入多次执行相同的测试用例,还可以分别验证不同的测试结果。
- 强大的报告生成能力,MonkeyTalk 可以产生详细的 HTML,XML,xUnint 格式的报告,报告中还包含失败用例的截图。我们还可以通过 Java API 对测试报告进行自定义。
如何使用 MonkeyTalk 进行自动化测试?
下载 MonkeyTalk IDE
- 官网下载不知道什么原因已经关闭了,幸好在关闭前已经下载好了,地址在我的百度网盘(密码见一楼)。下载下来的 zip 包包含 MonkeyTalk 的集成开发环境和 Agents,还有一个简单的示例。
- 然后解压缩,一定要记住你的存放目录。
- 如果你使用 Mac,将整个 MonkeyTalkIDEProfessional 文件夹移动到 Applications 目录下,然后双击 MonkeyTalk.app 即可运行
- 如果是 Windows 平台,移动到 Program Files 文件夹,然后双击 MonkeyTalk.exe 运行,需要注意的是建立工程时,你的 workspace 目录最好不要建在 Program Files 目录下。
安装 MonkeyTalk Agent 到被测 App
见我之前写的MonkeyTalk Agent 安装方法介绍。
建立新工程
见 doctorQ 写的学习 MonkeyTalk 以及实践。
录制测试脚本
- 连接真机或者模拟器,一旦你的被测 app 开启了,MonkeyTalk 可以通过 USB 或者 Wifi 连接到你的设备,用 HTTP 协议进行通信。目前 Android 可以支持两种连接方式,而 iOS 真机测试只能通过 wifi 进行连接。
- 点击录制按钮,开始录制。在操作面板上分别有录制,回放,停止三个按钮。
- 操作你的 app,操作步骤会实时反馈在 IDE 中,操作完后点击停止录制。当你点击回放按钮后,刚才录制的操作步骤会在你的 app 上重复一遍。在回放之前,最好给每个命令加入一个超时时间来确保执行完成。
关于 MonkeyTalk 命令
MonkeyTalk 把用户操作的每个动作记录为一个命令,格式如下:
Component MonkeyId Action Argument TimeOut ThinkTime ShouldFail....
Component 是指 UI 元素的类型,例如 Button 或者 Input 控件,不同平台命名方式有所不同。
MonkeyId 是用来唯一标识一个元素的特殊标识符。例如,一个 OK 按钮和一个 Cancel 按钮。如果你要匹配某一种类型元素的第一个元素,可以使用 (*) 的方式。
Action 是指 UI 交互,例如点击或者输入事件。
Arguments 是用来描述动作的其他属性,比如输入到一个 Input 中的文本。
TimeOut 是用来定义一个执行的超时时间,确保该命令执行完毕。
ThinkTime 是命令执行前的等待时间,我们也可以用它来等待上一个命令执行完毕。
ShouldFail 是用来定义该命令是否默认应该执行失败。
上述记录的命令也可以通过 MonkeyTalk IDE 直接转化成 MonkeyTalk 语言。点击 MonkeyTalk 选项卡即可切换到脚本编辑器,你可以像编辑文本一样对它进行修改。
MonkeyTalk 的验证机制
在脚本回放的过程中,MonkeyTalk 需要验证某个特定的 UI 元素是否存在来决定是否继续执行下一步操作。如果你期待的元素不存在,MonkeyTalk 将立即报错。例如,你定义了这样一段脚本:点击 OK 按钮,但当前页面上没有 OK 按钮,脚本就会执行失败。下面是一个示例:
#set slider to 8000
Slider * Select 8000
#verify that label called "CurrentValue" displays 8000
Label CurrentValue Verify 8000
总结
这里只是对 MonkeyTalk 进行一个简单的介绍,MonkeyTalk 的功能非常强大,将继续学习和实践。