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