转载

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

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上公布,感兴趣的读者可以关注。

正文到此结束
Loading...