Appium 中国行分享总结:当测试遇上机器人

阅读数:3019 2015 年 7 月 23 日

话题:测试移动DevOps语言 & 开发

7 月 11 日,由TesterHome 社区主办的中国移动测试大会在北京举行,国内资深测试专家陈晔、恒温、芈峮、徐达峰等齐聚一堂,另外还有来自知名自动化测试框架Appium的开发者 Jonathan Lipps 和 Dan Cuellar 给大家分享了 Appium 和它背后的一些有趣的小秘密,最有意思是 Dan 还现场演示了 Appium 与机器人结合的真机测试场景。这是 Appium 开发者第一次走进国内分享,相信这次大会能促进国内外移动测试行业更多交流,让国内的移动测试行业和国外整体水平接轨,以下是对这两个演讲的总结。

Appium 介绍

Jonathan Lipps是 Sauce Labs 的工程主管,同时也是 Appium 目前的项目负责人及总架构师。

Appium 是原生和混合移动移动应用自动化测试的跨平台解决方案,支持 iOS、Android 本地应用以及 Hybrid 和 Mobile Web 应用的测试,支持真机和模拟测试,支持本地和云端部署。它从 2012 年发布第一个版本,经过两年多的迅猛发展,到目前已经到 1.4.8 版本,拥有 100 多名贡献者。更多 Appium 的历史可参看这里

Appium 的设计哲学如下:

  • 测试和最终发布的 APP 应该是相同的
  • 能够使用任何语言和框架来写测试
  • 使用标准化的自动化测试规范和 API
  • 为打造一个繁荣的开源社区而努力

Appium 的特性和它未来的发展路线都必须遵循这些设计哲学,它们确保 Appium 始终向正确的方向前进。

Appium 在底层使用 Apple 和 Google 的自动化测试框架来进行测试。分别如下:

  • iOS 上使用 Instruments 和 UIAutomation 进行测试,未来会支持 iOS 9 版本以上使用 Apple 最新发布的 XCUITest 框架。
  • Android 4.2.1 版本以上使用 UiAutomator,更早版本的 Android 上使用 Instrumentation 以及 Selendroid,未来会统一使用 Google 发布的 DroidDriver 进行测试。
  • 在协议上采用 Selenium WebDriver API,这是受到广泛认可的浏览器自动化测试标准,并且是 W3C 标准草案,Appium 在它的基础上基于移动特性做了一些扩展,并且在和 Selenium 团队合作将这些扩展容纳到标准之内。

在使用上,Appium 采用 C/S 架构,客户端用于封装 WebDriver API,读取用各种语言编写的测试脚本并转换为测试命令发给服务端,目前支持的语言有 Java、JS、Python、Ruby、PHP、 Objective-C、Perl。服务端使用 Node.js 搭建 HTTP Sever 接受测试指令并发送给测试目标。服务端能够部署本地和云端,目前使用 Appium 搭建云测试的有Sauce Labs和国内的淘测试等。

接下来 Jonathan 介绍了一些编写 Appium 的技术细节,包括 Desired Capabilities、Sessions、寻找界面元素以及与界面元素 /WebView/Device 的交互。目前在 Android 上还支持同时测试多个设备。

对于测试人员来说,在本地部署 Appium 可以很方便的进行本地测试开发,但对于持续集成的流程不够友好。在云端部署 Appium 可以改变这一点。

Jonathan 介绍了一些 Sauce Labs 的设计理念和使用方法,在本地使用 Appium 进行测试是串行的,如果要测试大量设备,只能一个一个的测,需要消耗很多时间,Sauce Labs 将每个 Session 放到不同的虚拟机里,因此可以进行并行的测试。这也是目前云测试服务的理念。不过,目前国内大多数云测试服务使用 Robotium 框架,仅支持 Android 原生应用的测试,和 Appium 比起来在功能上有所不如。原 Appium 使用者切换到 Sauce Labs 很简单,只需将 appiumServer 从本地改为 Sauce Labs 提供的地址即可。此外 Sauce Labs 还支持测试指令的安全传输。

最后,Jonathan 介绍了 Appium 的未来计划。 在即将到来的 Appium 1.5 中,开发团队将对 Appium 服务端进行重构,使用 ES6 来编写代码以获得更简洁清晰的结构,同时有更好的拓展性。未来 Appium 还会继续其跨平台理念,支持 Windows Phone、BlackBerry 等平台的应用测试。关于 Appium 的开发进展可以查看它 Github 上的里程碑,Jonathan 也欢迎国内测试人员参与到 Appium 的开发当中来。

Appium 的发展历程与开源项目运营经验

接下来是Dan Cuellar的分享,他是 Appium 的创始人,目前是 FOODit 的首席测试工程师。他分享了 Appium 的发展历程、运营这样一个开源项目的经验、Appium 的十个小秘密,以及激动人心的 Appium 机器人。

Appium 虽然有着先进的理念和强大的功能,但它也不是一下子就广为人知的,Dan 和其它创始人为了推广项目付出了很多精力,以下是他们采用的一些方法:

  • 解答了论坛中所有关于该项目的问题;
  • 解答了 StackOverflow 中所有关于该项目的问题;
  • 在尽可能多的会议中发表演讲;
  • 积极向感兴趣的公司介绍我们;
  • 活跃在 Twitter 及其他社交媒体。

这些方法也值得国内开源作者的借鉴。

经过这些手段,Appium 逐渐为人所知,参与项目的志愿者多起来,这时项目出现了失控,Dan 甚至一度不能提交代码,还因为其它演讲者已经发表了关于 Appium 主题演讲,而被大会拒绝接纳。不过 Dan 认为失控是好现象,志愿者们为 Appium 提供了 Android 和和各种语言脚本的支持,并且无需亲自去回答每一个问题了。不过为了控制失控现象,项目必须更加规范,比如提交的代码必须编写单元测试、撰写高质量的发布说明和提交说明。

对于发起一个开源项目,Dan 总结了一些正确的做法:

  • 全程使用开源技术
  • 把代码放到 GitHub
  • 撰写文档
  • 共享你的演讲文档及视频
  • 在论坛中公开得回应问题

当出现分歧时,事先约定一致认可你们的思想及目标将会很有帮助,分歧和冲突最好公开讨论解决。如果分歧实在难以解决,那么就创建分支吧,对于项目来说,失去一些开发者是个损失,但也不是什么大不了的,存在多个类似的项目并不是一件坏事,竞争带来进步,用户喜欢有可选择。最终,最了不起的那个会胜出。

对于 Appium 为何能够成功,Dan 总结道:从第一天开始,他们就有一个清晰的指导思想和目标,尽可能多的吸纳成员,打造一个活跃的社区。另外,支持尽可能多的语言和平台,使用已经存在的、大家熟悉的工具。他们所有的决定都是为了使他们成为一个活跃的社区,他们为之奉献,去出席参加每一个可以与 Appium 相关的会议、论坛,在第一年里,他们回答了社区中每一个问题。有了正确的方向和目标,再加上努力,这就是 Appium 成功的秘诀。

Appium 的 10 个小秘密

接下来,Dan 分享了 Appium 的 10 个小秘密:

  1. AppleScript。Appium 最初是使用 AppleScript 作为脚本的,AppleScript 是 OS X 上的自动化脚本,不过局限性比较大。
  2. 在云端。目前使用 Appium 做云测试的公司除了 Sauce Labs 之外,还有 Testingbot、TestObject、testdroid 等。
  3. Mac Apps。Dan 还编写了用 Appium 测试 OS X 平台应用的工具。在 iOS 9 之后,使用新的测试框架,Appium 将更好的支持 Mac 应用的测试。
  4. Recorder。Appium 可以记录用户的交互自动生成脚本。
  5. 升级服务,而不用升级 App。Appium 在架构上将更加松耦合,未来不用下载新的客户端,而只用升级服务就行了。
  6. 多个 Server。Appium 支持启动多个 Server,可以做不同的测试,这也是 Appium 支持云端部署的原理。
  7. 获奖。Appium 获得了 InfoWorld 和 BlackDuck 的 2014 年度开源项目大奖,这些荣誉说明 Appium 受到了广泛的认可。
  8. Objective-C。Appium 支持用 Objective-C 编写的脚本,当然,这个比较冷门。
  9. Selendroid。一开始 Appium 不支持 Android4.2 以下设备的测试,后来集成了Selendroid来完成这个工作。
  10. Appium 机器人。Dan 在现场演示了 Appium 与机器人的结合,运行测试脚本即可驱动机器手在真机上点击,甚至输入文字。它的原理是使用三点定位获取真机物理坐标对应的屏幕坐标,然后根据 Appium 指令获取操作的界面元素坐标,发送给开发板,然后开发板上的程序操作机器手去点击。

Dan 之前甚至使用 Appium 操作机器人发出了第一条由机器人发出的 Twitter。(不过在国内演示时打不开 Twitter,你懂的。)

最后,Dan 以乔布斯的一段话作为结尾,送给国内的测试人员:

一但你发现一个简单的事实,生命就能变的更宽广。这个事实就是──所有环绕在你周围,被你称之为「生活」的东西,是被那些并不比你要聪明的人所建构出来的。你可以改变它、可以影响它、可以打造属于你自己的东西,并提供给其他人使用。

一旦你明白了这个事实,你就再也不会像从前一样了。

如果你想了解更多两位开发者的分享,可以在 StuQ 在线查看演讲 PPT,演讲的视频也将在整理完成后在 StuQ 上公布,感兴趣的读者可以关注。