Xcode的instruments中的Automation是為了實現(xiàn)自動化測試的一個工具。
1.實現(xiàn)方式有兩種:
它提供了兩種實現(xiàn)方式,一種是通過JS腳本語言來執(zhí)行自動化測試(普通自動化測試),另一種是通過錄制(高級自動化測試)操作的方式自動生成腳本(不過這種方式生成的腳本容易產(chǎn)生bug,需要自己修改一下)。
2.需要的知識:
最好懂JS語言,了解UIAElement層次結(jié)構(gòu)(好吧,不懂也沒有關(guān)系,可以現(xiàn)看,都是很簡單的操作就夠了)
3.需要的設(shè)備:
有一臺安裝好Xcode的Mac就OK了
4.運行方式有兩種:
1 打開要測試的程序,選擇Product -- Profile(這個時候就打開了instrument) / com + i -- 選擇Automation
2 右鍵Xcode選擇Open Developer Tool -- Instruments -- Automation -- 不過這種方式,需要在左上角選擇你要測試的工程(如果你要真機測試,只能測試你的測試項目,原因你應該清楚)
5.現(xiàn)在來簡單的用腳本語言了解一下當前頁面的層級結(jié)構(gòu)吧:
var target = UIATarget.localTarget();
UIALogger.logStart( Logging element tree ...
UIATarget.localTarget().logElementTree();
UIALogger.logPass();
你會得到如下圖所展示的
上方有五欄,就是你看到的字面意思(這種東西原諒我的懶惰)。其中要注意的是Log Messages(詳情) 和 Log Type(運行結(jié)果) 以及Screenshot(截圖)。
1 你可以根據(jù)Log Messages 或者使用模擬器上的Accessibility檢測器,開啟方法Settings -- General -- Accessibility -- Accessibility Inspector更改它的狀態(tài)為“打開”就可以了,它的運行效果如下
獲得詳細信息(PS:不用的時候點X),通過這兩種方式獲取坐標,你可以根據(jù)這個坐標來寫腳本指定點擊位置或者控件。
2 Log Type 就是一個結(jié)果
3 Screenshot 截圖還是有用的,可以讓你清晰的查看,查看方式如下圖
點擊小眼睛之后就OK了。
官方給的樹形結(jié)構(gòu)如下(掌握它,你的自動化實現(xiàn)起來就會很簡單了)
6.先來介紹一下幾個基本的功能(其它的看文檔吧):
1
右側(cè)的就是選擇模擬器,以及模擬器上的項目,紅色的原點就是運行該項目并執(zhí)行腳本,暫停按鈕不用說了。
2
這個是一個狀態(tài)圖,具體的我的理解并不是很深,也就不誤導了,可以看文檔
3
Trace Log就是查看運行結(jié)果的界面
Editor Log就是執(zhí)行腳本的時候操作的每一步,已經(jīng)運行狀態(tài)和錯誤反饋
script是用來寫腳本,或者錄制時自動生成腳本的地方
4
這是在script界面下方的按鈕,三角鍵是執(zhí)行腳本,紅色的是開始錄制,方塊是停止
5
在設(shè)置頁面,你可以導入腳本,增加新腳本,有很多的內(nèi)容,深究的話可以看一下官方文檔
7.基本功夠了,可以開始簡單的使用了,先來一個錄制:
上面介紹過了,點擊script界面的紅色按鈕開始錄制,然后在模擬器中執(zhí)行動作就行了,這里注意一下,如果是從網(wǎng)絡獲取狀態(tài)信息執(zhí)行下一步,一定要注意網(wǎng)絡狀態(tài),還有就是在生成的腳本中加一句代碼
UIATarget.localTarget().delay(2); // 延時操作2s
這個是因為系統(tǒng)在執(zhí)行腳本的時候速度很快,當push或者pop的時候如果有延時會崩潰。
錄制好之后,生成的代碼如下:
根據(jù)層級圖一樣,規(guī)則還是很明確的
是不是在猶豫箭頭,他就是一個控件的不同形容,但是指的還是同一個(PS:如果你進行的是手勢或者控件過多的情況下,這里是最容易出錯的)。
好了,如果沒有問題,一個簡單的錄制腳本就出現(xiàn)了,點擊三角按鈕或者上方的紅色播放按鈕就可以重現(xiàn)腳本了,用來做壓力測試還是比較方便的。
8.通過寫腳本的方式自動化測試:
腳本寫在哪里前面介紹過了,要自己寫腳本,要熟悉層級結(jié)構(gòu)和JS語言,會是很輕松的,并且他還有一個第三方tuneupjs是一個用以優(yōu)化uiautomation的第三方js庫,網(wǎng)站地址: http://www.tuneupjs.org/。
我的JS不怎么樣,所以我一般是在錄制的腳本上面進行修改,下面這個是我寫的一個簡單的tableView測試腳本,比較垃圾的代碼,可以看一下
var target = UIATarget.localTarget(); // 這個能看懂的應該,下面可以直接替換,為了明確,下面就沒有替換 -- 可以多寫幾層
target.logElementTree(); // 也是便利當前界面的空間樹結(jié)構(gòu)的命令
// 簡單的遍歷tableView點擊事件
for (var i = 0;i UIATarget.localTarget().frontMostApp().windows()[0].tableViews()[0].cells().length;i++)
{
var addButton = UIATarget.localTarget().frontMostApp().windows()[0].tableViews()[0].cells()[i];
addButton.tap();
target.delay(1);
var backButton = target.frontMostApp().windows()[0].navigationBars()[0].buttons()[0];
backButton.tap();
}
tap -- 是單擊操作
UIAELement -- 所有UI控件的積累
看過《如何利用Xcode的instrument中的Automation實現(xiàn)自動化測試》的人還看了以下文章