移動客戶端測試框架梳理和討論
前言
自從智能手機(jī),智能終端,智能設(shè)備開始普及后,測試行業(yè)也出現(xiàn)了大量的移動測試崗位和機(jī)會,iphone是2007年誕生,Android也是差不多時(shí)間開始走向市場,測試行業(yè)的同仁們從那天起,就開始孜孜不倦地研究移動客戶端的測試框架,測試策略或者測試方法。經(jīng)過差不多10年多的發(fā)展,我們現(xiàn)在可以找機(jī)會來做一個(gè)總結(jié)。總之,學(xué)習(xí)就是溫故而知新,要不斷學(xué)習(xí)新的東西才能保證不掉隊(duì)。如果從產(chǎn)品的角度來看,這些測試框架解決了什么問題,給測試從業(yè)者帶來什么價(jià)值?
跨平臺框架梳理和點(diǎn)評
對這些框架橫向比較就會發(fā)現(xiàn),這些框架有以下這些特點(diǎn):
- 跨平臺化,多端支持:無論從支持的平臺還是開發(fā)語言,都有這個(gè)趨勢,比如Appium,基本支持所有的開發(fā)語言。
- 提供用例編寫的IDE:降低腳本開發(fā)門檻,讓工具成為工具,很多年前測試開發(fā)對人員要求還是很高,需要有較強(qiáng)的開發(fā)經(jīng)驗(yàn)才能勝任,而現(xiàn)在從群里面交流的情況看,很多人沒有語言背景,經(jīng)過短暫的學(xué)習(xí)也能勝任一些測試開發(fā)工作。
- 開源化:之前各家大公司都是自己搞一套系統(tǒng)自己用,現(xiàn)在大家都喜歡拿出來和大家一起用,這個(gè)方向很好,對一些小公司來說真是雪里送炭,比如網(wǎng)易就很棒,做的系統(tǒng)不錯,而且全部開源:ATX和Airtest這兩個(gè)框架真的使用者很多。
- CI的支持越來越好:目前所知的框架基本上都支持CI的工具,比如通過Jenkins來驅(qū)動;
- 這一點(diǎn)不是很強(qiáng)烈,但是我還是希望列在這里,目前開放的框架對Python的支持越來越好,或者基本上成為主流,不知道大家是否認(rèn)同;
- 架構(gòu)層次更加清晰:客戶端,服務(wù)端,代理端,每一端干自己的事情,多端合作完成測試
- 報(bào)告的部分也越來越專業(yè):一方面報(bào)告的插件越來越多(比如Htmlreport,allure),圖表在報(bào)告中越來越重要,也畫的越來越專業(yè)。
以上,也希望大家一起總結(jié),從中我們看到未來這個(gè)行業(yè)的發(fā)展趨勢,我們學(xué)習(xí)的方向,還是很值得的一件事。
1. Appium
為啥把這個(gè)放在第一位,雖然我沒有做過市場調(diào)研,也沒有相關(guān)的市場報(bào)告,但是就多年在這個(gè)市場了解的情況來說,appium的市場占有率應(yīng)該是top1。
而且下面很多框架其實(shí)都是借鑒或者和Appium的價(jià)格類似。
Appium的官方網(wǎng)站: http://appium.io/
官方介紹:
Appium is an open source, cross-platform test automation tool for native, hybrid and mobile web and desktop apps. We support simulators (iOS), emulators (Android), and real devices (iOS, Android, Windows, Mac).
TesterHome 也專門給Appium做了一個(gè)專欄,大家可以訪問Appium的中文Wiki網(wǎng)址: https://testerhome.com/wiki/appiumdoccn
以筆者的試用經(jīng)驗(yàn)來看,這里雖然有些坑,但是上手還是很快的,而且網(wǎng)上有大量的文檔可參考,如果是做App的UI或者黑盒測試,應(yīng)該是首選。
2. ATX 框架 - 網(wǎng)易貢獻(xiàn)
ATX的QQ交流群 497460177
ATX Github官方站點(diǎn): https://github.com/NetEaseGame/ATX
系統(tǒng)架構(gòu)圖 : https://testerhome.com/topics/7236
集成IDE Weditor : https://testerhome.com/topics/7978
可以查看UI結(jié)構(gòu)的編輯器 atx-webide: https://github.com/openatx/atx-webide
Android相關(guān)
目前已經(jīng)升級到UiAutomator2,強(qiáng)烈建議用這個(gè),atx的 uiaotomator2 github地址 : https://github.com/openatx/uiautomator2
Android的WebView支持說明 : https://testerhome.com/topics/7232
實(shí)戰(zhàn): 如何測試網(wǎng)易云音樂 : https://testerhome.com/topics/5654
游戲?qū)崙?zhàn)類
游戲測試實(shí)例入門(如何測試網(wǎng)易陰陽師) https://testerhome.com/topics/6218
用 ATX 進(jìn)行簡單的功能冒煙(未知游戲) https://testerhome.com/topics/7995iOS相關(guān)
iOS 真機(jī)如何安裝 WebDriverAgent : https://testerhome.com/topics/7220
iOS 控件操作 API : https://testerhome.com/topics/7204
更詳細(xì)的控件操作API : https://github.com/openatx/facebook-wda
探索類
基于 WebDriverAgent 的 iOS 遠(yuǎn)程控制 https://testerhome.com/topics/8890
關(guān)于ATX系統(tǒng)集成測試 https://testerhome.com/topics/8984
分類匯總 https://testerhome.com/topics/node78
3. Airtest 框架 - 網(wǎng)易貢獻(xiàn)。
這個(gè)框架現(xiàn)在非常流行,QQ群爆滿,原打算是打算給游戲方面,在Google的IO大會也展示過,個(gè)人覺得是目前推廣的最好,門檻更低的一個(gè)版本,應(yīng)該是ATX的進(jìn)化版本(ATX也支持游戲測試).
提供的IDE非常不錯,可以圖像化編寫用例,基本上秒上手。
官網(wǎng)主頁和IDE下載: http://airtest.netease.com/
github地址: https://github.com/AirtestProject/Airtest
入門教程: http://airtest.netease.com/tutorial/Tutorial.html
QQ群:437119175 群人員數(shù)目當(dāng)前快1500
TesterHome也有他的專門精華匯總,我這里就不一一展開
Airtest UI 自動化測試項(xiàng)目 Airtest Project 資源匯總: https://testerhome.com/topics/12486
4. Macaca框架 阿里打造
[官網(wǎng)地址】(https://macacajs.github.io/zh/): https://macacajs.github.io/zh/
說實(shí)話,我對Macaca也搞過一段時(shí)間,但是阿里的人喜歡用js,因此如果你對js比較強(qiáng),這個(gè)框架也是不錯的,其實(shí)原理和AirTest基本一致。
Macaca入門文章: https://testerhome.com/topics/15414
iOS 和 Android 應(yīng)用使用 Macaca 測試的例子。
自動化平臺系列 - 使用 Macaca 測試 iOS 應(yīng)用: https://testerhome.com/topics/4359
自動化平臺系列 - 使用 Macaca 測試 Android 應(yīng)用: https://testerhome.com/topics/4442
5. Robot Framework
如果對英文沒有障礙的話,直接訪問官網(wǎng)地址: https://robotframework.org/
主要開發(fā)語言是Python/Java,更多是面向驗(yàn)收,面向需求的一種測試框架,可以和Appium結(jié)合起來,也可以單獨(dú)運(yùn)行。
另外Robot Framework也可以用于web的接口測試,而且他的測試數(shù)據(jù)非常容易整理和輸入。
github 地址 : https://github.com/robotframework/robotframework
同時(shí)github有個(gè)Robot framework的學(xué)習(xí)工程也比較推薦: https://github.com/up1/course-robotframework
examples: https://robotframework.org/#examples
6. Calabash
官方主頁: http://calabash.sh
是一個(gè)比較老的測試框架,不是很推薦
他基于robotium開發(fā),使用了 cucumber 框架,通過 http 和 json 與模擬器和真機(jī)上安裝的測試 apk 通信,測試 apk 調(diào)用 Robotium 的方法來進(jìn)行 UI 自動化測試,支持行為驅(qū)動開發(fā)(BDD)的自動化測試工具
優(yōu)點(diǎn):
- 封裝了常用的step操作,如滑動、點(diǎn)擊、拖拽、輸入、截圖等
- 支持WebView的識別和用例編寫
- 適應(yīng)于Android各版本
缺點(diǎn): - 不支持跨進(jìn)程的應(yīng)用測試,目前的解決辦法是通過ruby調(diào)用控制臺adb命令來完成跨進(jìn)程的操作
Android 測試框架
1. Robolectric
這個(gè)是谷歌目前非常推崇的一個(gè)測試框架,在某年的IO大會專門有介紹,大家可以自己找找看。
目前國內(nèi)推廣的不是很多,這個(gè)不需要apk就可以在JVM直接跑起來,因此在這方面收到谷歌的推薦,大家都知道如果要編譯apk,然后在跑一次測試要幾乎占用10分鐘左右時(shí)間,這個(gè)也就1~2分鐘左右。
官方網(wǎng)址:http://robolectric.org/
Running tests on an Android emulator or device is slow! Building, deploying, and launching the app often takes a minute or more. That’s no way to do TDD. There must be a better way.
Robolectric is a framework that brings fast and reliable unit tests to Android. Tests run inside the JVM on your workstation in seconds.
國內(nèi)目前使用這個(gè)框架的人少,原因是國內(nèi)企業(yè)不像美國西海岸的企業(yè)那么重視單元測試,單元測試應(yīng)該是程序員的一項(xiàng)必須完成的任務(wù),在提交代碼的時(shí)候必須有這部分測試結(jié)果。
另外在谷歌的測試基本框架中70%是單元測試,20%是Instrumental測試,10%是endtoend的測試,也就是最后的功能黑盒測試,這個(gè)和國內(nèi)目前的實(shí)踐正好相反。
英文沒有問題的,建閱讀以下 Testing Fundamentals
2. ESpresso - 谷歌出品
官網(wǎng)地址: https://code.google.com/p/android-test-kit/wiki/Espresso
其原理是這樣的,在Android中,Activity是承載UI控件的Android基本組件,Espresso則是可操作Activity的Google原生UI自動化框架。
Espresso特點(diǎn)有寫法簡單易入手,不可跨進(jìn)程等(跨進(jìn)程可使用Uiautomator),實(shí)踐中可以和Robolectric結(jié)合起來使用。
學(xué)習(xí)參考https://google.github.io/android-testing-support-library/docs/espresso/index.html。
TesterHome有一篇文章大家也可以看看, [騰訊 TMQ] 當(dāng) Espresso 遇見 Android 單元測試
3. UiAutomator - 谷歌出品
在Android測試沒有不知道這個(gè)東東,這么目前發(fā)展到了UiAutomator2,比第一版更好用些,支持的操作也多了一些,比如手勢操作等。在谷歌的測試框架里面,這個(gè)屬于medium或者large測試,主要用于app的功能/UI測試,不需要app的包,直接從系統(tǒng)dump他們的UI的layout,找到root node之后,下面可以建立一個(gè)數(shù)結(jié)構(gòu),然后就可以找到每一個(gè)widget的ID或者其他屬性,必須借用Accessbility Service.
UiAutomator是目前很多開源框架之本,很多框架都用Python或者其他語言完成一個(gè)wrapper,方便對他的調(diào)用。
或者這么說,PC端各種語言作為客戶端和服務(wù)器(比如Appium)來溝通,Appium服務(wù)端再和手機(jī)的agent溝通下達(dá)測試指令,這些指令再和上面說的對UiAutomator的wrapper類溝通完成最后對UI的控制。
4. Robotium
一個(gè)比較老的框架,目前的影響力越來越小,現(xiàn)在幾乎沒人在用它。
iOS 測試框架
1. UiAutomation - Apple
關(guān)于蘋果的UI testing,之前大家一直用的就是UiAutomation,但是在Xcode8.0之后,Instruments已經(jīng)不再有這個(gè)模塊了。而Apple也不再對它維護(hù)了,推廣使用UITest來替代它。
UIAutomation使用Javascript編寫。基于UIAutomation有擴(kuò)展型的工具框架和驅(qū)動型的框架。擴(kuò)展型框架以JavaScript擴(kuò)展庫方法提供了很多好用js工具,注入式的框架通常會提供一些Lib或者是Framework,要求測試人員在待測應(yīng)用的代碼工程中導(dǎo)入這些內(nèi)容,框架可以通過他們完成對app的驅(qū)動。驅(qū)動型UI Automation 在自動化測試底層使用了UI Automation庫,通過TCP通信的方式驅(qū)動UI Automation來完成自動化測試,通過這種方式,編輯腳本的語言不再局限于JavaScript。
https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/UIAutomation.html
2. XCTest - Apple
Testing Tips & Tricks
Testing is an essential tool to consistently verify your code works correctly, but often your code has dependencies that are out of your control. Discover techniques for making hard-to-test code testable on Apple platforms using XCTest. Learn a variety of tips for writing higher-quality tests that run fast and require less maintenance.
Xcode提供了XCTest框架用以編寫測試代碼。在創(chuàng)建Xcode工程時(shí),Xcode默認(rèn)使用XCTest,并且默認(rèn)創(chuàng)建了Unit Test(單元測試)和 UI Test(界面測試)兩個(gè)Target,我們可以直接使用。
其實(shí)這點(diǎn)和谷歌一樣,谷歌在創(chuàng)建一個(gè)app的時(shí)候,也會有兩個(gè)folder,一個(gè)是Unit test folder;一個(gè)是Instrumentation folder,可以進(jìn)行UI或者功能測試。
有興趣的同學(xué)可以好好看看 2018年的WDC視頻: : https://developer.apple.com/videos/play/wwdc2018/417
3. Frank http://www.testingwithfrank.com/
Frank是iOS平臺一款非常受歡迎的app測試框架,它使用Cucumber語言來編寫測試用例, Frank包含一個(gè)強(qiáng)大的“app inspector”--Symbiote,可以用它來獲得運(yùn)行中app的詳細(xì)信息,便于開發(fā)者將來進(jìn)行測試回顧。 它允許使用Cucumber編寫結(jié)構(gòu)化英語句子的測試場景。 Frank要求測試時(shí)在應(yīng)用程序內(nèi)部編譯,這意味著對源代碼的改變是強(qiáng)制性的。操作方式為使用Cucumber和JSON組合命令,將命令發(fā)送到在本地應(yīng)用程序內(nèi)部運(yùn)行的服務(wù)器上,并利用UISpec運(yùn)行命令。
優(yōu)點(diǎn): 測試場景是在Cucumber的幫助下,用可理解的英語句子寫的。 強(qiáng)大的Symbiote實(shí)時(shí)檢查工具。 活躍的社區(qū)支持。 不斷擴(kuò)大中的庫。
缺點(diǎn): 對手勢的支持有限。 在設(shè)備上運(yùn)行測試有點(diǎn)難。 修改配置文件需要在實(shí)際設(shè)備上運(yùn)行。 記錄功能不可用。
4. KIF http://www.oschina.net/translate/ios-ui-testing-with-kif
KIF是Keep It Functional項(xiàng)目的縮寫,是一款iOS app功能性測試框架,使用Objective-C語言編寫,對蘋果開發(fā)者來說非常容易上手,更是一款開發(fā)者廣為推薦的測試工具。KIF tester使用私有API來了解App中的視圖層級。但缺點(diǎn)是運(yùn)行較慢。
5. Kiwi https://github.com/kiwi-bdd/Kiwi/wiki/Getting-Started-with-Kiwi-2.0
Kiwi是對XCTest的一個(gè)完整替代,使用xSpec風(fēng)格編寫測試。 Kiwi帶有自己的一套工具集,包括expectations、mocks、stubs,甚至還支持異步測試。它是一個(gè)適用于iOS 開發(fā)的Behavior Driven Development(BDD)庫,優(yōu)點(diǎn)在于其簡潔的接口和可用性,易于設(shè)置和使用,非常適合新手開發(fā)者。Kiwi使用Objective-C語言編寫,易于IOS開發(fā)人員上手。
總結(jié)(IOS)
IOS自動化測試框架繼承關(guān)系如下。 XCTest與 Xcode 的 IDE 直接集成,使用簡單, 但其不支持stub和mock, 所以單使用XCTest框架的較少。 Kiwi是一個(gè)iOS平臺十分好用的行為驅(qū)動開發(fā)BDD的測試框架,有著非常漂亮的語法,可以寫出結(jié)構(gòu)性強(qiáng),非常容易讀懂的測試。 UI Automation是Apple官方提供的UI自動化測試的解決方法,但接口不夠豐富。
KIF、Frank、Calabash都是通過使用代碼的形式來模擬事件觸發(fā),使得被測代碼就像是由用戶行為所觸發(fā)的一樣。但這樣的代價(jià)是插入一個(gè)額外層的復(fù)雜度。
IOS測試框架中支持BDD的有calabash 和Kiwi。
可選用的單元測試框架有Kiwi,Specta,Quick等,而KIF,Subliminal和calabash更適用于UI級驗(yàn)收測試。
跨平臺開源測試框架PK
從產(chǎn)品的角度看,一個(gè)框架(當(dāng)做一個(gè)產(chǎn)品)首先看解決了什么問題?或者說解決了什么痛點(diǎn)需求,再看如何解決?還要看用戶反饋如何?后續(xù)發(fā)展和迭代等等一起來進(jìn)行評價(jià)。
另外,下面的比拼只是對跨平臺(Android/IOS/Web)的幾款產(chǎn)品進(jìn)行比拼,純粹支持Android或者Apple的略過。
工具 | Appium | ATX | Airtest | Macaca | Robot Framework | Calabash |
---|---|---|---|---|---|---|
安裝 | 中等 | 中等 | 中等 | 中等 | 簡單 | 簡單 |
多語言 | 幾乎全部 | Python/Java | Python為主 | JS為主 | JS為主 | Ruby/Objective-C |
用例開發(fā)IDE | 無 | 無 | 有 | 無 | 無 | 無 |
上手難易度 | 中等 | 中等 | 低 | 中等 | 高 | 高(會ruby語言的人少) |
腳本錄制 | 有 | 有 | 有 | 有 | 無 | 無 |
測試報(bào)告 | 有 | 有 | 有 | 有 | 有 | 無 |
熱度和社區(qū)支持 | 高 | 高 | 高 | 中 | 中 | 低 |
CI的支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
Web支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不 |
展望未來
根據(jù)以上的信息收集,論壇調(diào)查和反饋,結(jié)合個(gè)人的思考,簡單談一下幾個(gè)未來發(fā)展方向,請多多拍磚:
1)Android以后會用Kotlin,更簡潔,因此未來的Android測試框架要支持Kotlin。
2)提供用例編寫IDE不是必須的,但是nice to have,讓你的使用者忠誠度更高,的確加速用例編寫的效率和降低了門檻,這應(yīng)該是個(gè)發(fā)展方向。其實(shí)對Android來說也不難,AirTest集成了minicap和minitouch,這個(gè)IDE基本就完成了一半。
3)目前大部分測試框架都是給測試人員的,基本上都是UI測試,其實(shí)我希望在Unit test上是否有效率更高的產(chǎn)品出來,幫助開發(fā)工程師寫高質(zhì)量,覆蓋率更高的單元測試。
4)測試結(jié)果和測試報(bào)告和CI平臺集成也是一個(gè)重要特征,要滿足Devops的需求,成為app pipeline的一個(gè)重要環(huán)節(jié)。
以上,其實(shí)無論選擇哪款測試框架,只有精通了基本都可以滿足你的需要。
但是如果在初學(xué)和剛剛接觸的時(shí)候,對他們有更多,更詳細(xì)的了解,貨比三家,選擇自己更適合的框架可能會事半功倍。希望這里提供的資料和對比給你帶來有益的幫助,由于時(shí)間倉促或者知識淺薄,歡迎指正和批評。