MonkeyTalk 移动 App 自动化测试

Haibo · 2015年09月13日 · 最后由 么么拉 回复于 2016年02月25日 · 5184 次阅读
本帖已被设为精华帖!

最近研究移动端 App 自动化测试,对比多种测试框架后,对 MonkeyTalk 产生了兴趣,记录自己的一些学习心得,希望其他有兴趣的人一起研究。TesterHome 管理员建立了一个MonkeyTalk Wiki 合集,欢迎大家一起补充完善。

MonkeyTalk 是什么?

MonkeyTalk 是一个简单易用,而且跨平台的自动化测试框架,通过录制和回放易于阅读和维护的测试脚本来对 Android,iOS,Hybrid App 进行自动化测试。
monkeytalk
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 IDE

安装 MonkeyTalk Agent 到被测 App

见我之前写的MonkeyTalk Agent 安装方法介绍

建立新工程

见 doctorQ 写的学习 MonkeyTalk 以及实践

录制测试脚本

  • 连接真机或者模拟器,一旦你的被测 app 开启了,MonkeyTalk 可以通过 USB 或者 Wifi 连接到你的设备,用 HTTP 协议进行通信。目前 Android 可以支持两种连接方式,而 iOS 真机测试只能通过 wifi 进行连接。 connect
  • 点击录制按钮,开始录制。在操作面板上分别有录制,回放,停止三个按钮。 按钮 录制
  • 操作你的 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 的功能非常强大,将继续学习和实践。

共收到 26 条回复 时间 点赞
Haibo #27 · 2015年09月13日 Author

网盘密码:cxrr

感谢分析, MonkeyTalk 是目前商用上较为成功的产品了。TesterHome 一直希望有人来普及这块。

也是免费开源吧?混合应用 webview 如何?

Haibo #24 · 2015年09月13日 Author

#3 楼 @hellozzz MonkeyTalk 目前不开源了,貌似以前是开源的,但网上没找到源代码。另外,对于 Hybrid 应用也是支持的。

请问有 Windows 版的吗,你网盘上的貌似是 mac 的


这是我解压之后的目录,没有 exe 文件,搜索了也找不到
PS:windows 平台

@zjjx_ty 对,我也是这样。

#7 楼 @wodeta33 你们先看看 README 吧。
没记错应该在那个 MonkeyTalkIDEProfessional 文件夹里面。

#8 楼 @chenhengjie123 README 的内容如下

在根目录下,不在 MonkeyTalkIDEProfessional 文件夹

@chenhengjie123 我知道在那个文件夹下面,并没有.exe 文件,貌似就是 mac 的

还是要请楼主上传一个 windows 版本的

#7 楼 @wodeta33 @zjjx_ty 我当初是在 mac 平台下学习 MonkeyTalk,就没有下载 windows 版本的 zip 包,没想到现在官网下载已经关了。不过也还是有解决方案的,我们可以自己二次开发,我已经在本地用 web 平台实现了该功能,后续会把解决方案分享出来。

你好,请问你们现在有使用 monkeyTalk 用于产品测试么?

win,mac,linux 都支持,很牛逼的产品哦。。。

看到楼主分享很多毕业靓照。。。。呵呵

被收购了。。。
On June 30, 2015, Oracle signed an agreement to acquire the intellectual property of CloudMonkey LLC products including MonkeyTalk Community, MonkeyTalk Pro, and LabManager. The transaction closed on August 6, 2015.

https://www.oracle.com/corporate/acquisitions/cloudmonkey/index.html

链接:http://pan.baidu.com/s/1i36MOZj 密码:0lqc

monkeytalkpro-2.0.9-beta

找到了以前下载到网盘的 win(32bit、64bit)、linux 共三个版本。

有在实际项目中实践吗?它的稳定性和准确性怎么样?

@huangke 为什么需要 license

这个 monkeytalk 配合 android studio 集成到 gradle 项目当中一直无法 sync 成功,能试的办法全试了一遍。。github 上随便拉下来的一个简单的项目能 sync 成功,非常的蛋疼,有何想法?#12 楼 @penghaibo203
Error:(49, 0) Gradle DSL method not found: 'monkeytalkCompile()'
Possible causes:

@wodeta33 之前官方论坛有说过办法,好像删除掉什么东西。。。。忘记了,现在官网挂了也找不到了。。

#18 楼 @huangke 有 licence 吗?或者直接发个破解版

monkeyTalk 可以用来跑 monkey 吗?

学习到很多,谢谢!

Haibo MonkeyTalk Java API 使用教程 中提及了此贴 06月26日 17:51
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册