Appium 项目历史
Appium 自 2012 年以来一直以各种形式存在。它一直由不同的个人和组织领导,甚至用 3 种不同的编程语言实现!欢迎了解有关 Appium 如何发展成为今天的它的一切...
早期灵感¶
Dan Cuellar 是 Zoosk 的测试经理,在 2011 年,他遇到了一个问题。iOS 产品的测试通过时间越来越长。减少测试是一个选择,但会带来额外的风险,尤其是在 iOS App Store 审核流程中需要几天时间才能完成补丁。他回想起自己在网站上的工作经历,意识到自动化是答案。
Dan 调查了现有的工具,结果发现所有工具都存在重大缺陷。Apple 提供的工具 UIAutomation 要求测试用 JavaScript 编写,并且不允许实时调试或解释。它还必须在 Xcode 分析工具 Instruments 中执行。其他第三方工具使用私有 API,并且需要将 SDK 和 HTTP 服务器嵌入应用程序中。这似乎非常不可取。
对现有的选择不满意,Dan 向他的经理要求一些额外的时间,看看他是否能找到更好的方法。他花了 2 个星期四处摸索,看看是否有办法使用 Apple 批准的技术来自动化 iOS 应用程序。他尝试的第一个实现使用 AppleScript 通过 OS X 可访问性 API 向 Mac UI 元素发送消息。这在一定程度上有效,但永远无法在真实设备上运行,更不用说其他缺点。
所以他想,如果我能让 UIAutomation 框架像解释器一样实时运行呢?他研究了一下,发现他只需要找到一种方法来接收、执行和回复来自 UIAutomation javascript 程序中的命令。使用 Apple 提供的用于执行 shell 命令的实用程序,他能够cat
顺序排列的文本文件来接收命令,eval()
输出以执行它们,并使用python
将它们写回磁盘。然后,他在 C# 中准备了代码,该代码实现了 Selenium 风格的语法来编写顺序排列的 javascript 命令。iOSAuto 诞生了。
Selenium 大会 2012¶
Dan 被选中在伦敦的 Selenium 大会 2012 上发表关于完全不同主题的演讲。作为他演讲的一部分,他展示了使用 Selenium 语法的 iOS 自动化,以演示编写使用具有通用接口的单独平台特定页面对象的平台无关测试。令他惊讶的是,酷炫的测试架构将被 iOS 测试像 WebDriver 测试一样运行的壮观景象所掩盖。一些人建议他在会议的后期进行闪电演讲,以解释其工作原理。
在会议的第二天,Dan 走上舞台进行闪电演讲。Selenium 的共同创始人 Jason Huggins 主持了闪电演讲。Dan 遇到了技术问题,无法加载他的演示文稿,Jason 几乎不得不转到下一个闪电演讲。在最后一刻,屏幕亮了,Dan 跳进了他的演示文稿。他解释了他的实现的细节以及它的工作原理,恳求贡献者,五分钟后就结束了。人群礼貌地鼓掌,他走下了舞台。
电话响起¶
Selenium 大会结束后四个月,Jason 给 Dan 打了电话。Jason 一直在为 Sauce Labs 的客户开发 iOS 测试支持。Jason 回想起 Dan 的闪电演讲,认为该项目可能对 Jason 的工作有用,但 Dan 的源代码没有公开。Jason 要求 Dan 见面。那周晚些时候,Dan 在旧金山的一家酒吧与 Jason 会面,并向他展示了 iOS Auto 的源代码。
Jason 是一位长期倡导开源的倡导者,他鼓励 Dan 在开源许可下发布他的代码。在 8 月,Dan 在 GitHub 上发布了 C# 源代码。Jason 鼓励 Dan 更改语言,使该项目对潜在贡献者更具吸引力。Dan 上传了 Python 的新版本。在 9 月,Jason 添加了一个 Web 服务器,并开始通过 HTTP 实现 WebDriver 线协议,使 iOS Auto 可以通过任何语言的任何 Selenium WebDriver 客户端库进行脚本化。
移动测试峰会¶
Jason 决定该项目应该在 11 月的移动测试峰会上展示,但建议该项目首先改个名字。许多想法被抛出,他们最终确定了 AppleCart。一天后,当他浏览 Apple 关于版权和商标的一些指南时,Jason 注意到在 Apple 将为其商标辩护的名称示例部分,第一个示例是“AppleCart”。他给 Dan 打电话,告知他这种情况,他们一起集思广益了一段时间,然后 Jason 找到了答案。Appium... 应用程序的 Selenium。
Sauce Labs 和 Node.js¶
2013 年 1 月,移动测试峰会结束不久,Sauce Labs 决定全力支持 Appium 并提供更多开发人员力量。成立了一个工作组来评估当前状态以及如何最好地推进该项目。该团队(包括现任项目负责人 Jonathan Lipps)决定 Appium 需要重生,最终选择 Node.js 作为要使用的框架。Node 作为快速高效的 Web 服务器后端而闻名,归根结底,Appium 只是一个高度专门的 Web 服务器。他们还决定,JavaScript 作为一种语言足够易于访问,因此 Appium 将能够在 JavaScript 中吸引比其他选择更大的开源开发人员社区。
在短短几天内,该团队利用 Appium 上现有的工作,并发布了 Appium 的新版本,其功能与之前的 Python 版本一样多。Appium 基本架构的基础已经奠定,我们一直在成功地构建它。在这个冲刺开始几周后,Jonathan Lipps 被正式指定为项目负责人,他开始制定策略,如何让更多社区成员参与 Appium 的开发。
Appium 走遍世界¶
最终,Jonathan 决定,让 Appium 在尽可能多的会议和聚会上展示给开发人员,是吸引用户和贡献者的最佳方式。Appium 的新版本在2013 年 Google 测试自动化大会上首次亮相。2013 年晚些时候,Appium 在美国各地以及英国、波兰、葡萄牙和澳大利亚的会议和聚会上进行了展示。值得注意的是,Jonathan 让 Appium 在乐队中担任乐器,而 Dan Cuellar 为 Selenium 大会制作了一段有趣的Appium 视频蒙太奇。
但在所有这些演示和会议期间,该项目仍在不断发展。2013 年初,我们发布了 Android 和 Selendroid 支持,使 Appium 成为第一个真正的跨平台自动化框架。该项目也继续吸引用户和贡献者,到 2013 年底,我们已经获得了超过 1000 次提交。
通往 Appium 1.0 的道路¶
Appium 开始显着增长和成熟。2014 年 5 月,我们发布了 Appium 1.0,这是 Appium 开发中的一个里程碑。Appium 获得了各种奖项,并成为最受欢迎的开源跨平台移动自动化框架。稳定性得到提高,错误得到优先处理和修复,并添加了功能。Sauce Labs 增加了它捐赠给 Appium 开发的开发人员数量,但整个社区仍然参与指导该项目并为其做出贡献,项目治理继续公开进行,在公共邮件列表和 GitHub 的问题跟踪器上进行。
Appium 伞形架构扩展¶
最终,我们意识到 Appium 代码库并不适合由一个庞大的、分布式的、有时是贡献者组成的团队进行优化。我们抓住机会,作为提交者团队,从头开始重写 Appium,使用更现代的 JavaScript 语言版本,并重新设计 Appium 的架构,以便用户或第三方开发者可以轻松地构建自己的 Appium “驱动程序”。我们希望让新贡献者更容易上手 Appium 代码库,并看到除了核心团队之外的其他团队为 Appium 添加对新平台的支持。这个愿景已经开始实现,例如微软和 Youi.tv 分别为 Appium 添加了 Windows 桌面应用程序自动化和 Youi.tv 应用程序自动化的驱动程序。谁知道接下来会添加哪些平台呢?
Appium 为人民¶
2016 年底,Sauce Labs 将 Appium 捐赠给 JS 基金会,以向世界表明 Sauce 对 Appium 始终保持开源的承诺。JS 基金会是一个非营利性开源管理组织,负责持有开源项目的版权,并确保它们在社区中拥有长久而成功的任期。通过迁移到非营利性基金会,我们希望为新贡献者打开更多大门,无论是个人还是代表现在对 Appium 的发展感兴趣的众多公司之一。
最终,JS 基金会并入了 OpenJS 基金会,Appium 目前是该基金会的一个影响力项目。
Appium 2.0¶
Appium 2 于 2023 年发布,它将重点放在 Appium 作为生态系统而不是单个项目上。任何人都可以开发和共享驱动程序和插件,为平台的自动化相关开发开辟了无限可能,远远超出了 iOS 和 Android。