iOS UI Test 自動化測試開發
關於iOS的UI自動化測試,是從Xcode7之後才支援的比較好,使用XCTest.framework,Xcode可以自動錄製UI測試的動作流,還有就是可以使用XCTest UI testing API。
本文主要講的是如何進行自動化測試的開發,即XCTest UI testing API的使用
首先建立工程的時候,選擇如下:
Unit Tests選項,顧名思義,就是測試業務邏輯等單元測試
UI Tests選項,才是我們要重點講的UI 自動化測試
在建立專案的時候,這兩個建議都勾選上。
專案的基本構成如圖所示:
Xcode自動生成的一個測試檔案,也可以自己建立測試實現檔案,如圖所示:
接下來就要說如何進行開發工作:
1.認識核心的三個類
- XCUIApplication
- XCUIElement
- XCUIElementQuery
1.1 XCUIApplication類是Application的代理,就像我們專案工程中的AppDelegate,這個物件用來啟動或者是終止UI測試程式,還可以在啟動的時候設定一些啟動引數,在獲取程式中的UI元素的時候,就是通過這個類的例項。這個類繼承自XCUIElement類
1.2 XCUIElement類是XCTest.framework對應用中的所有UI 控制元件的抽象,在UI測試中,沒有UIKit中的UI型別,只是用這個類的例項表示所有的
1.3 XCUIElementQuery類是定位
2.實際測試需要完成的工作
在Interface Builder中的設定如下圖:
程式碼手動設定控制元件,如下:
subViewButton1.accessibilityIdentifier = @"Button111";
subViewButton1.accessibilityLabel = @"Button11";
[subViewButton1 setTitle:@"Button1" forState:UIControlStateNormal];
錄製UI測試流的操作是在指定的某個測試case類檔案中,先定義好測試方法名,然後操作如下圖:
當你在與UI元素互動的時候,這個方法會邊生成自動測試的程式碼
如果進行手動編碼的話,使用XCTest框架查詢UI元素的操作方法的程式碼如下:
// if element property isAccessibilityElement is YES, identifier previllage is top then the label, then the staticText, last is MatchingType:,otherwise title staticText is top,then ccessablitityIdentifier, then accessablitityLabel, then matchType:
[[[XCUIApplication alloc] init].buttons[@"Button111"] tap]; // 方法一
XCUIElement *button11Button = [[XCUIApplication alloc] init].buttons[@"Button11"]; // 方法二
[button11Button tap];
[[[XCUIApplication alloc] init].buttons[@"Button1"] tap]; // 方法三
XCUIApplication *app = [[XCUIApplication alloc] init];
[[[[[[[[app.otherElements containingType:XCUIElementTypeNavigationBar identifier:@"Login"] childrenMatchingType:XCUIElementTypeOther].element childrenMatchingType:XCUIElementTypeOther].element childrenMatchingType:XCUIElementTypeOther].element childrenMatchingType:XCUIElementTypeOther].element childrenMatchingType:XCUIElementTypeButton] elementBoundByIndex:1] tap]; // 方法四(注意,這個地方的呼叫層數跟元素巢狀是有關係的,具體可以看程式碼)
以上就完成了一個UI測試Case類的自動化工作。接下來就是根據專案測試的需要建立更多的測試case類。
問題一,在實際開發中,UI變化之後,之前自動生成的測試程式碼就可能失效了,需要再一次錄製或者是手動開發,自動化還需要能更加節省成本。