UI測試可以找到應(yīng)用UI并與之交互施掏,以驗證UI元素的屬性和狀態(tài)帖烘。
UI測試包括UI錄制亮曹,它可以生成代碼測試應(yīng)用UI。UI錄制是編寫UI測試快速入門的好方法秘症。
測試報告提供了關(guān)于UI測試的詳細(xì)信息照卦,包括測試失敗時UI狀態(tài)的快照。
UI取決于兩大核心技術(shù):XCTest框架和可訪問性乡摹。
XCTest提供UI測試框架役耕,集成到Xcode。創(chuàng)建和使用UI測試拓展了你對XCTest的使用和創(chuàng)建單元測試的認(rèn)知趟卸。創(chuàng)建UI測試target蹄葱,創(chuàng)建UI測試類和UI測試方法作為項目的一部分。使用SCTest斷言驗證預(yù)期的結(jié)果是否正確锄列。也可以通過Xcode服務(wù)和xcodebuild持續(xù)集成。XCTest完全兼容Objective-C和Swift惯悠。
可訪問性是允許殘疾用戶和其他用戶體驗到iOS和OS X豐富的用戶體驗的核心技術(shù)邻邮。它包括一個豐富的語義數(shù)據(jù)集,在應(yīng)用使用中克婶,用戶可以使用筒严〉と可訪問性與UIKit和AppKit交互,并提供API允許你微調(diào)暴露給外部用戶使用的行為鸭蛙。UI測試可以使用該數(shù)據(jù)執(zhí)行其函數(shù)摹恨。
在源代碼中創(chuàng)建UI測試與創(chuàng)建單元測試類似。為應(yīng)用創(chuàng)建一個UI測試target娶视,然后Xcode創(chuàng)建一個默認(rèn)UI測試組合實現(xiàn)文件晒哄,在實現(xiàn)文件中有測試方法模版例子。當(dāng)你創(chuàng)建UI測試target肪获,可以指定測試哪個app寝凌。
用戶測試通過尋找應(yīng)用的UI對象,合成事件并將他們發(fā)送到這些對象孝赫,并提供豐富的API使你可以檢查UI對象的屬性和狀態(tài)较木,并與預(yù)期狀態(tài)對比。
要求
UI測試取決于開發(fā)工具和OS平臺的服務(wù)和API青柄。你需要Xcode7伐债, OS X 10.11 EI Capitan和iOS 9 (或更新版本)。UI測試保護(hù)隱私:
iOS設(shè)備需要啟用開發(fā)并連接到一個受信的主機(jī)致开。
OS X需要給予特殊的Xcode助手應(yīng)用權(quán)限峰锁。在第一次使用UI測試時會收到此提示。
iOS設(shè)備需要啟用開發(fā)并連接到一個受信的主機(jī)喇喉。OS X需要給予特殊Xcode助手應(yīng)用權(quán)限(在第一次自動提示)祖今。
概念和API
UI測試與單元測試在本質(zhì)上不同。單元測試讓你能夠在應(yīng)用范圍內(nèi)測試功能和方法,充分訪問應(yīng)用的變量和狀態(tài)玉组。UI測試以相同方式測試應(yīng)用UI仅叫,用戶不需要訪問應(yīng)用的內(nèi)部方法、函數(shù)和變量徐绑。這使你的測試與用戶相同的方式使用應(yīng)用,暴露用戶在使用過程中遇到的UI問題莫辨。
測試代碼作為一個單獨的進(jìn)程傲茄,合成應(yīng)用中UI事件。
APIs
UI測試基于以下三個類實現(xiàn):
- XCUIApplication
- XCUIElement
- XCUIElementQuery
開始使用UI錄制
從UI錄制開始沮榜。它生成源代碼到測試的實現(xiàn)文件中盘榨,可以編輯修改以構(gòu)建測試或回訪一個特定使用場景。UI錄制也有助于探索新UI貨學(xué)習(xí)如何編寫UI測試序列蟆融。操作的基本順序是:
- 使用測試導(dǎo)航草巡,創(chuàng)建UI測試目標(biāo)。
- 在創(chuàng)建的模板文件中型酥,將光標(biāo)放置到測試函數(shù)中山憨。
- 開始UI錄制查乒。
- 啟動和運行應(yīng)用。做一系列的UI動作測試應(yīng)用郁竟。Xcode捕獲操作并生成函數(shù)的源代碼玛迄。
- 當(dāng)你完成測試操作時,停止UI錄制棚亩。
- 添加XCTest斷言源代碼蓖议。
編寫UI測試
API測試有功能和性能測試,也可以進(jìn)行UI測試蔑舞。UI測試操作app界面并集成大量低層次功能響應(yīng)UI拒担。
UI測試從根本上操作事件及響應(yīng)。
- 查找元素攻询。
- 了解元素的預(yù)期行為作為參考从撼。
- tap或click元素引出一個響應(yīng)。
- 測量響應(yīng)匹配或不匹配預(yù)期钧栖,生成通過或失敗的結(jié)果低零。
使用XCTest創(chuàng)建UI測試與創(chuàng)建單元測試類似。在整體上操作和編程方法是類似的拯杠,不同的是UI測試的基本概念以及如何操作UI測試掏婶。詳見用戶界面測試( User Interface Testing)。
在測試類結(jié)構(gòu)中潭陪,所提供的setup方法與單元測試類中的setup方法有兩個不同雄妥。
<pre><code>
-(void)setUp {
[super setUp];
// Put setup code here. This method is called before the invocation of each test
method in the class.
self.continueAfterFailure = NO;
[[[XCUIApplication alloc] init] launch];
}
</pre></code>
默認(rèn)設(shè)置self.continueAfterFailure
的值為NO。這通常是正確的配置依溯,因為在一個UI測試方法中每一步往往取決于前面的成功老厌,如果前面一個步驟失敗,則后續(xù)所有測試也是失敗的黎炉。
setup方法包括創(chuàng)建XCUIApplication
實例并啟動它枝秤。UI測試必須啟動測試的應(yīng)用,因為setup在每個測試方法前運行慷嗜,這確保應(yīng)用中的每個測試方法都啟動淀弹。
當(dāng)編寫UI測試方法,你應(yīng)該使用UI錄制功能創(chuàng)建測試的基本步驟庆械。然后編輯你想要的順序薇溃,使用XCTest斷言提供成功或失敗結(jié)果。UI測試有功能和性能測試缭乘,就像單元測試一樣痊焊。
UI測試一般模式是:
- 使用XCUIElementQuery查找XCUIElement。
- 合成事件并將其發(fā)送到XCUIElement忿峻。
- 使用斷言來比較XCUIElement的狀態(tài)和預(yù)期參考狀態(tài)薄啥。
構(gòu)建性能UI測試,包裝一系列可重復(fù)UI步驟到measureBlock
結(jié)構(gòu)逛尚,參見編寫性能測試( Writing Performance Tests)垄惧。