写点什么

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:554776
用户头像

发布了 134 篇内容, 共 89.4 次阅读, 收获喜欢 375 次。

关注

评论

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

翻转链表算法、自动化测试框架robot-framework、两款iOS 在手机端debugging 工具Flex、啄木鸟、加密技术 高可用系统的度量 高可用系统的架构 高可用系统的运维 John 易筋 ARTS 打卡 Week 15

John(易筋)

ARTS 打卡计划 高可用系统的架构 翻转链表 自动化测试Robot 手机调试工具Flex

麦叔告诉你,Linux下安装nginx都踩了那些坑

麦叔

nginx Linux

面经手册 · 第8篇《LinkedList插入速度比ArrayList快?你确定吗?》

小傅哥

Java 数据结构 小傅哥 面试题 linkedlist

数字化转型需要低/零代码平台的支持

代码制造者

低代码 数字化转型 企业信息化 零代码 编程开发

雪花算法把玩

ElvinYang

k8s-client-go源码剖析(二)

LanLiang

go Kubernetes 源码剖析

软件产品的创新与宇宙奇点大爆炸

常平

方法论 产品思维 架构思维

5G边缘计算:开源架起5G MEC生态发展新通路

华为云开发者社区

开源 5G 边缘计算 公有云 EdgeGallery

区块链支付系统开发方案,usdt跑分系统搭建

WX13823153201

pandas ~基础pandas

南辞

Python

【读书笔记一】《企业IT架构转型之道-阿里巴巴中台战略思想与架构实战》

Man

中台 阿里 中台战略

Flink检查点、保存点及状态恢复-13

小知识点

scala 大数据 flink

Docker 镜像的备份恢复迁移

哈喽沃德先生

Docker 容器 微服务 镜像 容器技术

mPaas研发流程和线上运维介绍

阿里云金融线TAM SRE专家服务团队

ios android

基于Apache Doris的小米增长分析平台实践

DorisDB

数据分析 用户增长 apache doris 分析型数据库 用户行为分析

OpenKruise:Kubernetes 核心控制器 Plus

郭旭东

Kubernetes 云原生 OpenKruise

JVM 内存模型、字节码、垃圾回收面试要点

escray

学习 面试 垃圾回收 字节码 面试现场

一文带你深扒ClassLoader内核,揭开它的神秘面纱!

我没有三颗心脏

Java ClassLoader java基础 类加载器

LeetCode题解:155. 最小栈,单个栈同时存储最小值,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

架构师训练营第十二周总结

张明森

oeasy教您玩转linux010109clear清屏

o

30年技术积累,技术流RTC如何成为视频直播领域的黑马?

华为云开发者社区

云计算 AI 5G RTC 华为云

大事情!中国限制 AI 算法出口。网友:这是要阻止XX“下跪”

程序员生活志

一个空格引发的“救火之旅” - 记一次 SOFA RPC 的排查过程

阿里云金融线TAM SRE专家服务团队

Redis常见问题--单线程

是老郭啊

nosql redis 线程

Spring整合WebSocket

牛初九

高并发系统三大利器之降级

java金融

oeasy教您玩转linux010108到底哪个which

o

一键洞察全量SQL ,远离性能异常

华为云开发者社区

数据库 sql 大数据 数据治理 华为云

银行大数据新玩法,构建“一湖两库”金融数据湖

华为云开发者社区

大数据 数据湖 FusionInsight MRS DWS

Redis常见问题--哈希冲突

是老郭啊

哈希表 Redis项目

NLP领域的2020年大事记及2021展望

NLP领域的2020年大事记及2021展望

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