Appium 專案歷史
Appium 自 2012 年以來一直以某種形式存在。它一直由不同的個人和組織領導,甚至已在 3 種不同的程式語言中實作!歡迎深入了解 Appium 如何成為今天的模樣...
早期靈感¶
Dan Cuellar 在 2011 年擔任 Zoosk 的測試經理,當時他遇到一個問題。iOS 產品的測試通過長度越來越難以控制。減少測試是一種選擇,但會帶來額外的風險,特別是透過 iOS App Store 審查流程取得修補程式需要花好幾天。他回想起自己從事網站工作的日子,並意識到自動化就是答案。
Dan 調查了現有的工具環境,結果發現所有工具都有重大的缺點。Apple 提供的工具 UIAutomation 要求以 JavaScript 編寫測試,而且不允許即時除錯或解釋。它還必須在 Xcode 分析工具 Instruments 中執行。其他第三方工具使用私有 API,並要求將 SDK 和 HTTP 伺服器嵌入到應用程式中。這似乎非常不可取。
丹恩對現有的選項不滿意,因此請他的經理給他一些額外時間,看看他是否能找到更好的方法。他花了 2 個星期四處試驗和探索,看看是否有辦法使用已核准的 Apple 技術自動化 iOS 應用程式。他嘗試的第一個實作是使用 AppleScript,利用 OS X 可用性 API 傳送訊息給 Mac UI 元素。這在某種程度上有效,但永遠無法在實際裝置上運作,更別提其他缺點了。
因此他心想,如果我能讓 UIAutomation 架構像直譯器一樣即時執行,會怎麼樣?他研究了一下,並確定他所需要做的就是找到一種方法,在 UIAutomation javascript 程式中接收、執行和回覆指令。他使用 Apple 提供的執行 shell 指令的工具程式,能夠依序讀取文字檔來接收指令,使用 eval()
執行輸出,並使用 python
將它們寫回磁碟。然後他準備了以 C# 編寫的程式碼,實作 Selenium 風格的語法來撰寫依序的 javascript 指令。iOSAuto 就此誕生。
Selenium Conference 2012¶
丹恩獲選在倫敦舉辦的 Selenium Conference 2012 中演講,主題是完全不同的議題。在簡報中,他展示了使用 Selenium 語法的 iOS 自動化,示範撰寫與平台無關的測試,使用具有共同介面的個別特定於平台的頁面物件。令他驚訝的是,酷炫的測試架構會因為 iOS 測試像 WebDriver 測試一樣執行而退居其次。幾個人建議他在稍後的大會中進行簡短演講,詳細說明它的運作方式。
在大會的第二天,丹恩走上舞台進行簡短演講。Selenium 的共同創辦人傑森·哈金斯主持了簡短演講。丹恩在載入簡報時遇到技術困難,傑森差點就要跳到下一個簡短演講。在最後一刻,螢幕亮了起來,丹恩開始了他的簡報。他說明了他的實作細節和運作方式,懇求貢獻者,五分鐘後就結束了。群眾禮貌性地鼓掌,他離開了舞台。
電話鈴響¶
在 Selenium Conference 四個月後,傑森打電話給丹恩。傑森一直在為 Sauce Labs 的客戶開發 iOS 測試支援。傑森記得丹恩的簡短演講,認為這個專案可能對傑森的工作有幫助,但丹恩的原始程式碼並未公開。傑森請丹恩見面。那一週稍晚,丹恩在舊金山的一間酒吧與傑森見面,並向他展示了 iOS Auto 的原始程式碼。
傑森長期以來一直是開源軟體的倡導者,他鼓勵丹恩在開源授權下釋出他的程式碼。八月時,丹恩在 GitHub 上以 C#釋出了原始程式碼。傑森鼓勵丹恩變更程式語言,讓這個專案對潛在的貢獻者更有吸引力。丹恩上傳了一個新的 Python 版本。九月時,傑森新增了一個網路伺服器,並開始透過 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 以快速且高效的網路伺服器後端聞名,而 Appium 最終只是一個高度專業化的網路伺服器。此外,他們也決定 JavaScript 作為一種語言,其可近性足夠讓 Appium 能夠成長為一個比桌上其他選項擁有更多開源開發人員的大型社群。
在短短幾天內,該團隊利用 Appium 上現有的工作,製作了一個具有與先前 Python 版本一樣多功能的新版本 Appium。Appium 基本架構的基礎已經奠定,而我們從那時起便成功地持續建構它。在這個衝刺的幾週後,Jonathan Lipps 正式被指定為專案負責人,他開始制定策略,思考如何讓更多社群人士參與 Appium 的開發。
Appium 走遍世界¶
最後,Jonathan 決定讓 Appium 在盡可能多的開發人員面前亮相(在研討會和聚會上),是吸引使用者和貢獻的最佳方式。Appium 以其新面貌在2013 年 Google 測試自動化研討會上首次亮相。2013 年稍晚,Appium 在美國各地以及英國、波蘭、葡萄牙和澳洲的研討會和聚會上發表。值得注意的是,Jonathan 讓 Appium在樂團中擔任樂器,而 Dan Cuellar 為 Selenium 研討會製作了一個有趣的Appium 影片蒙太奇。
但在所有這些發表和研討會期間,專案持續開發中。2013 年初,我們發布了 Android 和 Selendroid 支援,讓 Appium 成為第一個真正的跨平台自動化架構。該專案也持續吸引使用者和貢獻者,到 2013 年底,我們已經有超過 1,000 個提交。
邁向 Appium 1.0¶
Appium 開始大幅成長與成熟。2014 年 5 月,我們發布了 Appium 1.0,這成為 Appium 發展歷程中的里程碑。Appium 獲得了各種獎項,並成為最受歡迎的開源跨平台行動自動化架構。穩定性獲得提升、錯誤獲得優先處理並修正,並新增了功能。Sauce Labs 增加捐贈給 Appium 的開發人員數量,但整個社群仍持續參與專案的指導與貢獻,專案治理也持續公開進行,在公開的郵件清單和 GitHub 的問題追蹤器上。
Appium 保護傘擴大¶
最後,很明顯地,Appium 程式碼庫並未針對大型的分布式有時貢獻者團隊進行最佳化。我們作為一個提交者團隊,把握機會從頭改寫 Appium,使用較新版本的 JavaScript 語言,並重新設計 Appium 的架構,讓使用者或第三方開發人員可以輕鬆建置自己的 Appium「驅動程式」。我們希望讓新貢獻者更容易熟悉 Appium 程式碼庫,並看到 Appium 新增了由核心團隊以外的團體所新增的對新平台的支援。這個願景已經開始實現,像 Microsoft 和 Youi.tv 等團體為 Appium 新增了 Windows 桌面應用程式自動化和 Youi.tv 應用程式自動化的驅動程式。誰知道接下來會新增哪些平台呢?
Appium 獻給大家¶
2016 年底,Sauce Labs 將 Appium 捐贈為專案給JS Foundation,以向全世界證明 Sauce 承諾 Appium 將持續為開源。JS Foundation 是非營利的開源管理組織,負責持有開源專案的著作權,並確保專案在社群中擁有長久且成功的任期。由於我們轉移到非營利基金會,我們希望這將更廣泛地為新貢獻者開啟大門,無論是個人或代表現在有興趣讓 Appium 持續前進的眾多公司之一。
最後,JS Foundation 合併到OpenJS Foundation,而 Appium 目前是基金會中的影響力專案。
Appium 2.0¶
Appium 2 於 2023 年發布,其重點從單一專案轉移至 Appium 作為一個生態系統。任何人都可以開發和分享驅動程式和外掛程式,為遠遠超出 iOS 和 Android 的平台開啟自動化相關開發的各種可能性。