User Interface Testing
UI測試使您能夠查找應(yīng)用程序的UI并與其進(jìn)行交互璧瞬,以驗(yàn)證UI元素的屬性和狀態(tài)醇蝴。
UI測試包括UI錄制芝发,這使您能夠以與您所做的相同的方式生成演示應(yīng)用程序UI的代碼贡茅,以及可以展開以實(shí)施UI測試谊路。這是快速開始編寫UI測試的好方法。
增強(qiáng)了測試報(bào)告囱挑,以提供有關(guān)UI測試的詳細(xì)信息醉顽,包括測試失敗時(shí)UI狀態(tài)的快照。
UI測試依賴于兩個(gè)核心技術(shù):XCTest框架和輔助功能平挑。
- XCTest提供與Xcode集成的UI測試功能的框架游添。創(chuàng)建和使用UI測試擴(kuò)展了您對使用XCTest和創(chuàng)建單元測試的了解。您創(chuàng)建一個(gè)UI測試目標(biāo)通熄,創(chuàng)建的UI測試類和UI測試方法唆涝,將作為項(xiàng)目的一部分。您使用XCTest斷言來驗(yàn)證預(yù)期結(jié)果是否正確棠隐。您還可以通過Xcode和XcodeBuild進(jìn)行持續(xù)集成石抡。XCTest與Objective-C和swift完全兼容。
- 輔助功能是允許殘疾用戶與其他用戶接收的iOS和MacOS的相同的豐富體驗(yàn)的核心技術(shù)助泽。它包含一組豐富的關(guān)于UI的語義數(shù)據(jù)啰扛,用戶可以通過使用該技術(shù)的您的應(yīng)用程序來引導(dǎo)他們使用。輔助功能與UIKit和AppKit集成在一起嗡贺,并具有API隐解,可讓您微調(diào)行為以及外部使用的內(nèi)容。UI測試使用該數(shù)據(jù)來執(zhí)行其功能诫睬。
在源代碼中創(chuàng)建UI測試類似于創(chuàng)建單元測試煞茫。為您的應(yīng)用程序創(chuàng)建一個(gè)UI測試目標(biāo);那么Xcode將實(shí)現(xiàn)文件中使用示例測試方法模板為您創(chuàng)建一個(gè)默認(rèn)的UI測試組合實(shí)現(xiàn)文件摄凡。創(chuàng)建UI測試目標(biāo)時(shí)续徽,您可以指定測試將要處理的應(yīng)用程序。
UI測試的工作原理是通過一個(gè)應(yīng)用程序的UI對象進(jìn)行查詢亲澡,合成事件并將其發(fā)送到這些對象钦扭,并提供豐富的api,使您能夠檢查UI對象的屬性和狀態(tài)床绪,將其與預(yù)期狀態(tài)進(jìn)行比較客情。
要求
UI測試取決于開發(fā)工具中和在操作系統(tǒng)平臺上的服務(wù)和AP。您將需要Xcode 7癞己,macOS 10.11和iOS 9(或更高版本)膀斋。UI測試保護(hù)隱私:
- 需要啟動iOS設(shè)備進(jìn)行開發(fā)并連接到受信任的主機(jī)。
- macOS需要授予特殊的Xcode Helper應(yīng)用程序的權(quán)限痹雅。您首次使用UI測試時(shí)仰担,會自動提示您。
需要啟動iOS設(shè)備進(jìn)行開發(fā)并連接到受信任的主機(jī)绩社。macOS需要授予特殊Xcode Helper應(yīng)用程序的權(quán)限(首次使用時(shí)自動提示)惰匙。
概念和API
UI測試和單元測試的基本方法不同技掏。單元測試使您能夠在應(yīng)用程序的范圍內(nèi)工作铃将,并允許您通過完全訪問應(yīng)用程序的變量和狀態(tài)和執(zhí)行功能和方法项鬼。UI測試以與用戶無關(guān)的應(yīng)用程序的內(nèi)部方法,函數(shù)和變量相同的方法執(zhí)行應(yīng)用程序的UI劲阎。這使您的測試能夠以與用戶相同的方式查看應(yīng)用程序绘盟,從而暴露用戶遇到的UI問題。
您的測試代碼作為一個(gè)單獨(dú)的工程運(yùn)行悯仙,合成應(yīng)用程序的UI響應(yīng)的事件龄毡。
APIs
UI測試基于三個(gè)新類的實(shí)現(xiàn):
- XCUIApplication
- XCUIElement
- XCUIElementQuery
開始UI錄制
從UI錄制開始。它將元代買生成可以編輯的測試實(shí)現(xiàn)文件中锡垄,以構(gòu)建測試過播放特定的使用場景沦零。UI記錄對于探索新的UI或?qū)W習(xí)如何編寫UI測試序列也很有用。操作的基本步驟是:
- 1货岭、使用測試導(dǎo)航器創(chuàng)建UI測試目標(biāo)
- 2路操、在創(chuàng)建的模板文件中,將光標(biāo)置于測試功能中千贯。
- 3屯仗、開始UI記錄。
應(yīng)用程序啟動并運(yùn)行搔谴。應(yīng)用程序執(zhí)行一系列UI操作事件魁袜。Xcode將功能的動作捕獲到源代碼中。 - 4敦第、完成您想要測試的動作后峰弹,停止UI錄制。
- 5芜果、向生成的源代碼中添加XCTest斷言鞠呈。
寫UI測試
API測試可以具有功能和性能兩個(gè)方面,UI測試也可以师幕。UI測試在應(yīng)用程序的表面空間運(yùn)行粟按,并且傾向于將許多低級功能集成到用戶看到的界面呈現(xiàn)和響應(yīng)中去。
UI測試從根本上對事件和響應(yīng)的級別進(jìn)行操作霹粥。
- 查找元素灭将。
- 了解元素的預(yù)期作為參考。
- 點(diǎn)擊或者是單擊元素以引出響應(yīng)后控。
- 測量響應(yīng)與通過/失敗結(jié)果的預(yù)期匹配不匹配庙曙。
使用XCTest 創(chuàng)建UI測試是與創(chuàng)建單元測試相同的編程模型的擴(kuò)展。使用類似的操作和編程方法浩淘,差異給出了UI測試API的基本概念以及它們在用戶界面測試中描述的操作方式捌朴。
在測試類結(jié)構(gòu)中吴攒,提供的setup方法包括setUp單元測試類中的兩個(gè)不同之處。
- (void)setUp {
[super setUp];
//將設(shè)置代碼放在這里砂蔽。在調(diào)用類中的每個(gè)測試方法之前調(diào)用此方法洼怔。
self.continueAfterFailure = NO;
[[[XCUIApplication alloc] init] launch];
}
該值self.continueAfterFailure被設(shè)置NO為默認(rèn)值。這通常是正確的配置左驾,因?yàn)閁I測試方法中的每個(gè)步驟傾向于依賴于前一個(gè)的成功; 如果一步失敗镣隶,所有以下測試也將失敗。
該setUp方法的另一個(gè)補(bǔ)充是包括創(chuàng)建一個(gè)實(shí)例XCUIApplication并啟動它诡右。UI測試必須啟動他們測試setUp的應(yīng)用程序安岂,并且由于在每個(gè)測試方法之前運(yùn)行,這樣可以確保每個(gè)測試方法都啟動該應(yīng)用程序帆吻。
在編寫UI測試方法時(shí)域那,您應(yīng)該使用UI錄制功能為您的測試創(chuàng)建一組基本步驟。然后猜煮,為了您的目的次员,您可以編輯此基本步驟,使用XCTest斷言提供單元測試中的通過或者失敗結(jié)果友瘤。
UI測試的一般模式的正確性如下:
- 使用XCUIElementQuery 查找XCUIElement翠肘。
- 合并事件并將其發(fā)送到XCUIElement。
- 使用單元來比較XCUIElement的狀態(tài)與預(yù)期的引用狀態(tài)辫秧。
為了構(gòu)建性能的UI測試束倍,將可重復(fù)的UI序列包裝到measureBlock中,詳情參考編寫測試類和方法盟戏。