簡(jiǎn)介
本篇分析了近期試用的幾款iOS自動(dòng)化測(cè)試工具
背景
- 市場(chǎng)背景
- 蘋果官方只提供底層庫(kù)XCUITest,需要開(kāi)發(fā)
- iOS平臺(tái)自動(dòng)測(cè)試工具少,各大云市場(chǎng)上自動(dòng)遍歷功能都多有限制企業(yè)無(wú)法自由定制.
- 測(cè)試常見(jiàn)問(wèn)題:
- UI自動(dòng)化只能覆蓋核心業(yè)務(wù)邏輯,新功能來(lái)不及上自動(dòng)化
- 產(chǎn)品業(yè)務(wù)測(cè)試量較大,新版發(fā)布后,老功能來(lái)不及全面回歸,容易漏測(cè)
- 時(shí)間長(zhǎng),強(qiáng)度大的工作后,人容易產(chǎn)生疲乏,對(duì)數(shù)字的位數(shù),文字的顯示等錯(cuò)誤信息的敏感度下降
- 產(chǎn)品的界面深度很深,且包含大量的展示信息功能
- 專項(xiàng)測(cè)試回歸難度大:內(nèi)存泄漏、健壯性測(cè)試、弱網(wǎng)等測(cè)試太多
這個(gè)時(shí)候我們需要一種手段,可以達(dá)到兩方面的目的:
- code less: UI自動(dòng)化用例維護(hù)成本降到最低
- automate: 盡可能的自動(dòng)化覆蓋回歸業(yè)務(wù)
工具對(duì)比
SwiftMonkey
SwiftMonkey是一款基于蘋果XCTest框架為基礎(chǔ)的隨機(jī)生成操作Action的測(cè)試框架,只支持iOS端。
參考鏈接:SwiftMonkey Github
工作原理介紹
通過(guò)代碼隨機(jī)生成操作事件,使用蘋果官方XCTest框架執(zhí)行操作,在Xcode10.1之前使用蘋果的私有api 如XCEventGenerator.tapAtTouchLocations 故執(zhí)行速度極快,在Xcode10.1之后只能使用public API,速度在1秒3-5個(gè)操作。
總結(jié)
- 優(yōu)點(diǎn):
由于monkey在測(cè)試過(guò)程中的“隨機(jī)”性,且執(zhí)行速度快,可以用來(lái)做App壓力測(cè)試 - 缺點(diǎn):
不滿足我們的兩個(gè)自動(dòng)遍歷需求:可控性和可定制
因?yàn)槎贪迕黠@,用于自動(dòng)遍歷上效果不佳,但是做為壓力測(cè)試和崩潰檢測(cè)工具還是不錯(cuò)的。
NoSmoke 2.0
NoSmoke 是一款基于source-XML-tree/OCR 為基礎(chǔ)的多端UI自動(dòng)化測(cè)試框架,支持Android iOS。
參考鏈接:NoSmoke 2.0
工作原理介紹
爬蟲程序通過(guò)OCR 掃描客戶端App 窗口圖片對(duì)可操作點(diǎn)進(jìn)行分析,規(guī)避了大量的xml 計(jì)算成本,從而提升效率.

總結(jié)
- 優(yōu)點(diǎn):
- 自動(dòng)遍歷App進(jìn)行UI測(cè)試,并提供測(cè)試報(bào)告
- 可控制,提供攔截鉤子,針對(duì)特殊的情景自定義操作事件
- 支持多端運(yùn)行: iOS, Android
- 缺點(diǎn):
- 使用OCR的掃描方式過(guò)于依賴掃描的精準(zhǔn)度,且目前使用的工具對(duì)中文識(shí)別的友好度低,會(huì)出現(xiàn)掃描出錯(cuò),一個(gè)句子被截?cái)酁閿?shù)段等情況
由于NoSmoke2.0使用的OCR tesseract對(duì)于中文的識(shí)別效果不佳導(dǎo)致各種異常,所以目前對(duì)于中文app的支持不佳,難以使用。
AppCrawler
一個(gè)基于Appium框架的自動(dòng)遍歷app爬蟲工具. 支持android和iOS, 支持真機(jī)和模擬器. 最大的特點(diǎn)是靈活性. 可通過(guò)配置來(lái)設(shè)定遍歷的規(guī)則.
參考鏈接:AppCrawler Github,Appium 介紹
工作原理介紹
框架結(jié)構(gòu)
- appcrawler底層引擎
- appium
- WebDriverAgent
- iOS 9.3 及以上 XCUITest
- iOS 9.3 及以下 UIAutomation
- WebDriverAgent
- appium
appcrawler流程

總結(jié)
- 優(yōu)點(diǎn):
- 跨平臺(tái)性:AppCrawler是基于appium開(kāi)發(fā)的,所以支持Android和IOS
- 可控性:對(duì)測(cè)試的頁(yè)面,控件類型的選擇,測(cè)試的深度等都可自由控制
- 可定制:可自定義操作,如輸入,滑動(dòng)等
- 缺點(diǎn):
- 運(yùn)行速度較慢:AppCrawler是基于appium開(kāi)發(fā)具備了跨平臺(tái)的優(yōu)點(diǎn),但是也因?yàn)檫@層封裝造成了運(yùn)行速度相對(duì)較慢
- 使用門檻高:正因?yàn)槭褂渺`活性的問(wèn)題,也造成了使用門檻的提高,主要基于yaml文件中使用appium的相關(guān)技術(shù)知識(shí)進(jìn)行配置,這就對(duì)使用者有了一定的技術(shù)要求