User Interface Testing
UI測試使您能夠查找應(yīng)用程序的UI并與其進(jìn)行交互,以驗證UI元素的屬性和狀態(tài)。
UI測試包括UI錄制,這使您能夠以與您所做的相同的方式生成演示應(yīng)用程序UI的代碼,以及可以展開以實施UI測試。這是快速開始編寫UI測試的好方法。
增強了測試報告,以提供有關(guān)UI測試的詳細(xì)信息,包括測試失敗時UI狀態(tài)的快照。
UI測試依賴于兩個核心技術(shù):XCTest框架和輔助功能。
- XCTest提供與Xcode集成的UI測試功能的框架。創(chuàng)建和使用UI測試擴展了您對使用XCTest和創(chuàng)建單元測試的了解。您創(chuàng)建一個UI測試目標(biāo),創(chuàng)建的UI測試類和UI測試方法,將作為項目的一部分。您使用XCTest斷言來驗證預(yù)期結(jié)果是否正確。您還可以通過Xcode和XcodeBuild進(jìn)行持續(xù)集成。XCTest與Objective-C和swift完全兼容。
- 輔助功能是允許殘疾用戶與其他用戶接收的iOS和MacOS的相同的豐富體驗的核心技術(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)建一個UI測試目標(biāo);那么Xcode將實現(xiàn)文件中使用示例測試方法模板為您創(chuàng)建一個默認(rèn)的UI測試組合實現(xiàn)文件。創(chuàng)建UI測試目標(biāo)時,您可以指定測試將要處理的應(yīng)用程序。
UI測試的工作原理是通過一個應(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ā)并連接到受信任的主機。
- macOS需要授予特殊的Xcode Helper應(yīng)用程序的權(quán)限。您首次使用UI測試時,會自動提示您。
需要啟動iOS設(shè)備進(jìn)行開發(fā)并連接到受信任的主機。macOS需要授予特殊Xcode Helper應(yīng)用程序的權(quán)限(首次使用時自動提示)。
概念和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問題。
您的測試代碼作為一個單獨的工程運行,合成應(yīng)用程序的UI響應(yīng)的事件。
APIs
UI測試基于三個新類的實現(xiàn):
- XCUIApplication
- XCUIElement
- XCUIElementQuery
開始UI錄制
從UI錄制開始。它將元代買生成可以編輯的測試實現(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īng)用程序執(zhí)行一系列UI操作事件。Xcode將功能的動作捕獲到源代碼中。 - 4、完成您想要測試的動作后,停止UI錄制。
- 5、向生成的源代碼中添加XCTest斷言。
寫UI測試
API測試可以具有功能和性能兩個方面,UI測試也可以。UI測試在應(yīng)用程序的表面空間運行,并且傾向于將許多低級功能集成到用戶看到的界面呈現(xiàn)和響應(yīng)中去。
UI測試從根本上對事件和響應(yīng)的級別進(jìn)行操作。
- 查找元素。
- 了解元素的預(yù)期作為參考。
- 點擊或者是單擊元素以引出響應(yīng)。
- 測量響應(yīng)與通過/失敗結(jié)果的預(yù)期匹配不匹配。
使用XCTest 創(chuàng)建UI測試是與創(chuàng)建單元測試相同的編程模型的擴展。使用類似的操作和編程方法,差異給出了UI測試API的基本概念以及它們在用戶界面測試中描述的操作方式。
在測試類結(jié)構(gòu)中,提供的setup方法包括setUp單元測試類中的兩個不同之處。
- (void)setUp {
[super setUp];
//將設(shè)置代碼放在這里。在調(diào)用類中的每個測試方法之前調(diào)用此方法。
self.continueAfterFailure = NO;
[[[XCUIApplication alloc] init] launch];
}
該值self.continueAfterFailure被設(shè)置NO為默認(rèn)值。這通常是正確的配置,因為UI測試方法中的每個步驟傾向于依賴于前一個的成功; 如果一步失敗,所有以下測試也將失敗。
該setUp方法的另一個補充是包括創(chuàng)建一個實例XCUIApplication并啟動它。UI測試必須啟動他們測試setUp的應(yīng)用程序,并且由于在每個測試方法之前運行,這樣可以確保每個測試方法都啟動該應(yīng)用程序。
在編寫UI測試方法時,您應(yīng)該使用UI錄制功能為您的測試創(chuàng)建一組基本步驟。然后,為了您的目的,您可以編輯此基本步驟,使用XCTest斷言提供單元測試中的通過或者失敗結(jié)果。
UI測試的一般模式的正確性如下:
- 使用XCUIElementQuery 查找XCUIElement。
- 合并事件并將其發(fā)送到XCUIElement。
- 使用單元來比較XCUIElement的狀態(tài)與預(yù)期的引用狀態(tài)。
為了構(gòu)建性能的UI測試,將可重復(fù)的UI序列包裝到measureBlock中,詳情參考編寫測試類和方法。