天天看點

Instruments_Automation使用入門

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工具。

Instruments_Automation使用入門

   選擇Automation工具

Instruments_Automation使用入門
Instruments_Automation使用入門
Instruments_Automation使用入門
Instruments_Automation使用入門
Instruments_Automation使用入門

通過選擇Editor Log檢視測試日志

Instruments_Automation使用入門

二.定位界面元素

編寫一個測試用例,該如何找到識别控件元素呢。這裡介紹2個方法

1.可以在腳本中寫target.logElementTree(),會在日志中列印出目前頁的控件資訊。

在Script位置,編寫腳本,target.logElementTree();

Instruments_Automation使用入門

編寫好腳本之後,點選左上角的紅色按鈕,啟動模拟器中的程式。

Instruments_Automation使用入門

2.使用自帶的Accessibility Inspector功能。

  打開模拟器,找到“Settings > General > Accessibility > Accessibility Inspector”,然後将它打開。

Instruments_Automation使用入門
Instruments_Automation使用入門

三.手工編寫我們需要的測試代碼。

錄制的代碼可維護性和健壯性都很差,并且缺少必要的檢查點,是以實際效果非常差。這時就需要自己手工編寫測試代碼,采用按需定制的方式來實作自動化。

首先一定要記住這個位址:

https://developer.apple.com/library/prerelease/ios/documentation/DeveloperTools/Reference/UIAutomationRef/

這是蘋果官方的參考文檔,列舉出了UI Automation JavaScript library的所有類,對app的各個操作最終都是通過這些api來實作的。

自動化的常見步驟通常是三步:定位,操作,檢查

1) 定位元素

UIAutomation通過層級通路的方式,定位到某一個具體元素。蘋果提供了一個logElementTree()的方法,列印控件樹。在建立的測試腳本中,加入下面這行代碼:

 Target.logElementTree();

執行這段代碼(點選左上角的紅色按鈕),我們可以看到輸入了下面的東西(左邊的樹狀結構,即為右邊模拟器中視圖結構)

Instruments_Automation使用入門

上圖左邊就是目前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