Instruments 是應用程式用來動态跟蹤和分析 Mac OS X 和 iOS 代碼的實用工具。 這是一個靈活而強大的工具,它讓你可以跟蹤一個或多個程序,并檢查收集的資料。 這樣,Instruments可以幫你更好的了解應用程式和作業系統的行為。
使用 Instruments 應用,你可以使用特殊的工具(即 instruments 工具)來跟蹤同一程序不同方面的行為。你也可以使用該應用來記錄一系列使用者界面的動作并響應它們,同時也可以使用一個或多個 instruments 工具來收集資料。
Instruments 應用包含以下功能:
- 分析一個或多個程序的行為
- 記錄一系列使用者的動作并響應它們,可靠的再現這些事件并收集多次運作的資料
- 建立你自己自定義的 DTrace instruments 來分析系統和應用程式的行為
-
儲存使用者界面記錄和instruments的配置為模闆,并從Xcode裡面通路 使用 Instruments,你可以:
1)追查代碼中難以重制的問題
2)對你的程式進行性能分析
3)自動化測試你的代碼
4)對你程式進行壓力測試
5)進行一般的系統級故障診斷
6)對你的代碼如何工作有更深入的了解
Instruments 在 Xcode 3.0 和 Mac OS X 10.5 及其之後可用。
UI 自動測試是iOS 中重要的附加功能,它由名為“Automation”的新的工具對象支援。Automation工具的腳本是用JavaScript語言編寫,主要用于分析應用的性能和使用者行為,模仿/擊發被請求的事件,利用它可以完成對被測應用的簡單的UI測試及相關功能測試。
一. 簡單的錄制腳本
打開xcode,選擇需要進行自動化測試的項目。可以按下圖所示打開instruments工具,也可以點選菜單欄中的“Product-Profile”來打開Instruments工具。

選擇Automation工具
通過選擇Editor Log檢視測試日志
二.定位界面元素
編寫一個測試用例,該如何找到識别控件元素呢。這裡介紹2個方法
1.可以在腳本中寫target.logElementTree(),會在日志中列印出目前頁的控件資訊。
在Script位置,編寫腳本,target.logElementTree();
編寫好腳本之後,點選左上角的紅色按鈕,啟動模拟器中的程式。
2.使用自帶的Accessibility Inspector功能。
打開模拟器,找到“Settings > General > Accessibility > Accessibility Inspector”,然後将它打開。
三.手工編寫我們需要的測試代碼。
錄制的代碼可維護性和健壯性都很差,并且缺少必要的檢查點,是以實際效果非常差。這時就需要自己手工編寫測試代碼,采用按需定制的方式來實作自動化。
首先一定要記住這個位址:
https://developer.apple.com/library/prerelease/ios/documentation/DeveloperTools/Reference/UIAutomationRef/
這是蘋果官方的參考文檔,列舉出了UI Automation JavaScript library的所有類,對app的各個操作最終都是通過這些api來實作的。
自動化的常見步驟通常是三步:定位,操作,檢查
1) 定位元素
UIAutomation通過層級通路的方式,定位到某一個具體元素。蘋果提供了一個logElementTree()的方法,列印控件樹。在建立的測試腳本中,加入下面這行代碼:
Target.logElementTree();
執行這段代碼(點選左上角的紅色按鈕),我們可以看到輸入了下面的東西(左邊的樹狀結構,即為右邊模拟器中視圖結構)
上圖左邊就是目前app視圖的UI層級結構,當你需要定位到某個元素的時候,可以按照這個層級一層一層的往下通路,直到目标元素。比如需要定位到登入按鈕。
var target= UIATarget.localTarget();
var app =target.frontMostApp();
var window= app.mainWindow();
//擷取登入按鈕
var loginButton = window
.buttons()["登入"];
其中:
UIATarget 對象代表待測應用所在環境的最高層級UI,在這裡localTarget()表示運作app的這台iPhone裝置
UIAApplication對象代表app層級的UI,這裡通過frontMostApp()方法得到的對象,就是指正在運作的影音iPhone app。
UIAWindow對象代表app中window層級的UI,這裡通過mainWindow()方法得到的對象,指目前app中的主窗體,一個app的目前界面通常隻會有一個主窗體。
實際項目中,不同元素的差異都是從window層級開始的,在window層級往上,都是一樣的。
2) 操作元素
上面一部完成就已經可以做到元素的定位,現在需要對這個元素進行操作,最常見的就是tap
loginButton.tap();
對于不同的元素,提供的具體操作方法會存在差異,詳情需參考官方文檔。進入登入界面後,需要輸入昵稱、郵箱、密碼,也是同樣的步驟:
//
定位輸入框
var nicknameField = window.staticTexts()["昵稱"]
var emailField = window.staticTexts()["郵箱"]
var pwField = window.staticTexts()["密碼"]
//
操作
nicknameField.setValue("hello");
emailField.setValue("[email protected]");
pwField.setValue("ppp111");
//
點選執行登陸
loginButton.tap();
3) 檢查結果
操作完成後,需要檢查結果是否符合預期。
if(window.scrollViews()[0].staticTexts()[0].name() == "
請叫我雷鋒
"){
UIALogger.logPass("
測試通過
");
}else{
UIALogger.logMessage(window.scrollViews()[0].staticTexts()[0].name());
UIALogger.logFail("
測試失敗
");
}
上述的這幾個步驟,就算完成了UIAutomation的hello world。
三個注意事項:
1)延遲
上面這段代碼,在實際運作時,基本是會一直測試失敗的,原因是從開始登入,到展示使用者資訊,需要一定的時間,點選登入按鈕操作之後,立刻去判斷使用者資訊也就一定會失敗的。另外,網絡波動,或者是app/測試機可能出現的卡頓,是造成測試腳本的頻繁失敗的原因之一,是以我們需要某些操作之後,人為增加一些必要的延遲,等待操作的完成,進而增強代碼的穩定性。蘋果在target層提供了一個方法delay(Number timeInterval),該方法用于延遲腳本的執行,我們可以在必要的地方增加該方法。
target.delay(3);
2)彈框
彈框alert在iOS中比較特殊的類型,它不屬于app層級的,也不能像操作普通元素一樣去操作alert,蘋果提供了一個專門的處理方法,UIATarget.onAlert,當彈框出現時,測試引擎會自動調用這個方法來處理彈框。
【待完善】
3)Log
UIALogger主要就用于輸出各種類型的日志。包括logStart,logPass,logFail,logMessage,logDebug,logWarning ,logError
前三個通常用來區分一個測試用例,logstart表示一個測試的開始,直到logPass或者是logFail為止。後四個用以在測試過程中輸入不同級别的日志。
本文參考了一下文章:
1.Instruments指南(謝業蘭【老狼】)
2.iOS instruments之ui automation的簡單使用(高手繞道)
3.基于instruments-Automation的iOS應用UI自動化測試圖文攻略
轉載請注明出處:http://www.cnblogs.com/JuneWang/p/4771417.html