打造企業級移動測試云平臺
一、背景
移動技術發展到現階段,原生、混合式技術發展的足夠成熟,可以無縫融合。而隨著移動技術的發展和革新,移動領域的測試技術和實踐也有了一定發展:工具不再像早期一樣幾家獨大,選擇性越來越多;從淺嘗輒止的實驗階段到真實項目中的自動化測試落地。這些實踐在一定程度上提升了測試反饋效率,在迭代交付的過程中出色的完成了質量保證的工作,但在相對漫長的實踐過程中,我們依然可以總結一些痛點:
1. 移動自動化測試的執行效率遠不及Web應用
有過Web自動化測試經驗的同學對于Selenium肯定不會陌生,Web端的并發測試使得測試在有限資源的情況下按照我們的期望并發執行。而且由于keychain等問題,很難在測試用例之間做到互不影響、對于測試環境的清理和準備也有很大難度。
2. 很難全面覆蓋繁雜的測試設備
Web自動化測試關注的測試環境相對單純,針對不同項目、產品和市場,無非是對不同的瀏覽器和操作系統有不同程度的支持。而對于不同瀏覽器也有不同的driver來支持。而在移動測試中,很難做到對眾多廠商和不同操作系統設備進行模擬。
3. 移動自動化框架很難支持到回歸測試顆粒度
在移動端(以iOS為例),受限于Apple的機制,大部分框架很難覆蓋到與iOS系統/第三方App交互的場景,例如系統通知跳轉、實時通訊應用信息發送等場景。而若無法覆蓋核心功能,那么自動化測試的落地實則是在給自己和團隊挖坑,得不償失。
這些問題在隨著WebDriverAgent的成熟以及XCode 9的新特性 —— Multiple concurrent simulators的出現,得到了極大程度的解決,我們可以像對Web應用一樣,對移動端應用在不同的simulator上并發執行測試用例,極大提升了測試反饋效率。而且,測試人員不再受限從而可以編寫覆蓋率更高的測試用例。
二、除了普適性問題之外企業對移動測試方案潛在的需求
在項目的具體實施過程中,除了我們經常被這些普遍存在的細節問題困擾之外,企業或組織級客戶已經對移動端自動化測試提出了更高的要求。在一次機會給客戶講解移動端自動化測試趨勢時發現,新的框架的確會使客戶眼前一亮,但是,在實踐上的優勢無非是你比其他人先研究了什么,這樣的領先微乎其微,在交流過程中觀察到客戶更大的痛點是:
如何同時覆蓋到更多物理設備?如何更好的構建和重用基礎設施?如何跨地域高效使用測試資源?
帶著這幾個問題,我們對比了一些現有的可用方案,例如AWS device farm。Device farm是針對移動App提供的測試服務,用戶可以對在AWS托管的基于iOS和Android物理設備測試原生和混合應用。用戶既可以使用各種測試框架來做自動化測試,也可以遠程訪問設備進行應用程序的測試和調試。
但是該解決方案也是有一定局限性的,當測試運行期間同時執行測試的設備***只有五個,而運行測試的時間也被限制到60分鐘。當然上述的限制可以根據需要適當的放松,但是企業和用戶不得不承擔價值不菲成本。
與AWS device farm類似,SauceLabs和Xamarin也提供類似的平臺,那SauceLabs的服務舉例,如果想使用***運行時間,支持24個并發運行設備,模擬器用戶需要每月承擔3576刀,而如果想使用真實設備進行測試,大概需要每月花費7200刀。這種昂貴的成本對于企業很難承受,而且重要的是這種資源是無法復制,企業不得不持續為云服務支付高昂的費用。
安全性也是企業需要考慮的問題,用戶不得不在云測試平臺上傳自己的IPA或APK。我們當然可以信賴AWS的安全機制。一些對安全性要求較高的企業來說,更想規避這樣的風險。
三、打造私有移動真機測試平臺
通過分析,對于客戶的需求大概涵蓋幾點:真實設備、并發、成本、安全、可重用。鑒于這些需求,我們把目標進行拆分:
1. 設備管理——服務發現與注冊
在該實例中我們使用WebDriverAgent作為測試框架,需要運行在每一個物理設備上,我們可以把這些物理設備當作Agent集群。這些集群設備就是我們運行WebDriverAgent的服務終端,我們可以通過很簡單的程序讓WebDriverAgent自動在設備上運行。通過服務發現與注冊機制,把WebDriverAgent服務注冊在通過Ansible管理的Proxy上。而服務發現與注冊不單單解決了復雜的設備管理,而且可以解決分布式團隊合作時設備跨地域有效利用的問題。
2. 平臺數據可視化
對于一個測試平臺來說,如何把所有可用的服務(機器)、服務狀態、自動重啟和crash報告等數據可視化給企業終端用戶,是極為重要的。那老牌Apache zookeeper來說,提供了友好的服務可視化管理功能并且可以根據用戶需求進行二次開發。重要的是,這些底層基礎設施服務可以在之后的任何一個移動測試項目中被重用。
3. 自動化測試運行和報告生成
自動化測試平臺雖然提供了強大的服務(設備)管理、服務可視化等功能。而自動化測試的核心需求依然是如何保障測試的獨立性、穩定性、易維護性、重用性和覆蓋率。通過WebDriverAgent跨語言測試框架,我們可以像架構Web自動化測試一樣來開發針對移動端的測試工程。但需要注意的是移動測試不同的是真實物理設備,而不是計算機的某個進程。另外,如何接觸測試場景的相互依賴、保證測試間的獨立性,以及如何清理測試環境,需要大家在進行移動端架構的時候事先考慮。
這樣一來,我們如果可以解決這三個問題,就可以不受昂貴的成本限制,為企業量身定做適合自己的業務規模的移動測試私有云了,不但為企業和組織機構構建了大型測試服務平臺,同時也解決了之前提到的普適性問題。
四、總結
隨著DevOps的發展,軟件工程的開發、部署、上線、應急預案等都被自動化監控和處理。如果我們依然停留在“成熟”的解決方案而缺少思考,那么留給QA/測試人員的發展空間越來越少。
我們需要通過對測試技術細節的不斷歸納、對比和練習,抓住領域發展趨勢和真正的客戶訴求,結合其他非測試技術,幫助自己在測試技能上有所突破,同時幫助自己提升構思和落地解決方案的能力。
【本文是51CTO專欄作者“ThoughtWorks”的原創稿件,微信公眾號:思特沃克,轉載請聯系原作者】