目录
最近研究移动端 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 的功能非常强大,将继续学习和实践。