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