GMTC全球大前端技术大会(北京站)门票9折特惠截至本周五,点击立减¥480 了解详情
写点什么

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

2015 年 7 月 23 日

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

2015 年 7 月 23 日 05:554854
用户头像

发布了 164 篇内容, 共 91.6 次阅读, 收获喜欢 381 次。

关注

评论

发布
暂无评论
发现更多内容

架构师实战营 模块六总结

Geek_0669f7

HarmonyOS的万里长征和万里长城

脑极体

【通俗易懂】虚拟DOM,如何更高效DIFF

Daniel

Diff 6月日更 6 月日更

Scrum Patterns : MetaScrum(译)

Bruce Talk

敏捷开发 译文 Agile Scrum Patterns

工作流引擎Activiti使用进阶!详细解析工作流框架的高级功能使用示例

攻城狮Chova

安全 事件监听 多租户 6 月日更

Java语言概述以及环境搭建

若尘

java编程 六月日更

食品行业一季度快速复苏,户外广告投放上涨!

󠀛Ferry

6月日更

未来,能源枯竭可以逆转吗?

白洞计划

并发王者课-黄金3:雨露均沾-不要让你的线程在竞争中被“饿死”

秦二爷

Java 多线程 并发

架构师实战营 模块六作业(拆分电商系统为微服务)

Geek_0669f7

架构实战营

中国数字化转型为全球带来机遇

CECBC区块链专委会

架构实战营-作业六

大可

【Flutter 专题】105 图解自定义 ACEPageMenu 滑动菜单 (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6 月日更

请阐述一下computed和methods有什么区别?

法医

Vue 前端 6 月日更

JAVA设计模式系列--单例模式

加百利

Java 后端 设计模式 单例模式 6 月日更

未来,能源枯竭可以逆转吗?

脑极体

Python训练营笔记 从变量到异常处理 Day3

万里无云万里天

Python 6月日更

SpringCloud Gateway 路由转发性能优化

Aaron

性能优化 动态路由 SpringCloud Gateway JMH性能基准测试

五种服务部署升级策略,你也许会用的到

架构精进之路

6 月日更 服务升级

MySQL基础之十一:创建表

打工人!

MySQL 6月日更

TempDB 的使用和性能问题

悟空聊架构

sql 性能调优 6 月日更 TempDB

策略模式怎么玩?

卢卡多多

设计模式 策略模式 六月日更

【音视频】基于声网的多人视频通话功能建设

轻口味

android 音视频 IM 实时音视频 声网

架构实战营 - 模块 6- 作业

请弄脏我的身体

架构实战营

SpringCloud Gateway 路由数量对性能的影响研究

Aaron

性能优化 动态路由 SpringCloud Gateway JMH性能基准测试

Single-Spa构建第一个微前端项目

devpoint

Vue 微前端 6 月日更

【LeetCode】第一个错误的版本Java题解

HQ数字卡

算法 LeetCode 6月日更

HTTP 长连接和短连接

看山

TCP/IP HTTP协议

话题讨论|如何看待腾讯试点强制6点下班

石云升

话题讨论 加班文化 6月日更

Python——数值列表

在即

6月日更 六月日更

模块六作业 - 拆分电商系统为微服务

张大彪

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