[javascript] view plain copy 轉載 出處<a href="http://qa.taobao.com/">Taobao QA Team</a>,原文地址:<a href="http://qa.taobao.com/‘http://qa.taobao.com/?p=13737’">http://qa.taobao.com/?p=13737</a>
無線用戶端的發展很快,特別針對是android和ios兩款無線作業系統的用戶端應用,相應的測試載入器也應運而生,這裡主要給大家介紹一些針對iPhone App的自動化測試載入器。
首先,我們把這些測試架構分為三大類:介面測試載入器、注入式UI測試載入器、錄放式UI測試載入器。
一、介面測試載入器,主要在iphone SDK提供的單元測試架構的基礎上,完成代碼的介面功能測試。
這類工具用的比較多的是SDK本身提供的test unit,以及google的google-toolbox-for-mac工具。google的GTM工具是在test unit上做了一層封裝,可以簡單、快速的完成測試指令碼編寫,提供完善的測試日誌和報告,並提供部分簡單的UI測試功能。
詳細的文檔可以參考這裡:http://code.google.com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting
二、注入式UI測試載入器,可以完成對被測應用的UI功能測試,需要在原始碼中加入一些必須的測試代碼。優點是可以類比使用者的操作,測試被測應用的相關功能,可以覆蓋比較全的應用功能。缺點是因為在原始碼中插入了必須的測試代碼,而這些應用發布時需要去除,引入了被測應用和發布應用不一致的風險。
UISpec,提供了用例運行前的準備和啟動並執行恢複功能,UIQuery功能,以及較為完善的校正功能,但該工具的使用比較複雜,指令碼的編寫也很繁瑣,雖然對UI可以query,但無法方便、清晰、直觀的查看應用控制項的屬性。
詳細的文檔可以參考這裡:http://code.google.com/p/uispec/wiki/Documentation
Bromine,指令碼編寫簡單,對控制項的操作,完全類比touch事件實現,但控制項的定位通過對控制項重畫,並插入定位需要的資訊,xpath的描述串也稍顯複雜,校正功能相對較弱。
詳細的文檔可以參考這裡:http://code.google.com/p/bromine/
三、錄放式UI測試載入器,主要通過錄製使用者的操作行為,通過回放來完成對被測應用的功能測試,這類工具對UI的功能測試相對是比較弱的。
比較常用的有Instrument、FoneMonke 。
Instrument,是iOS提供的主要用於分析應用的效能和使用者行為的工具,利用它可以完成對被測應用的簡單的UI測試。
FoneMonke,是國外提供的一個開源的,免費的錄製/回放工具。網站:http://www.gorillalogic.com/fonemonkey
以上是瞭解的一些針對iPhone App的自動化測試載入器,大家感興趣的可以瞭解瞭解,歡迎交流、學習。
加上一個ios SDK內建的功能:用指令碼編程+control tag+intrument 工具
http://developer.apple.com/library/ios/#documentation/DeveloperTools/Reference/UIAutomationRef/_index.html
The main thing is to tag all your UI controls in Interface Builder with names, by setting the Accessability label to a unique value for the view.
Once these are all set and you've rebuilt your application for debug, you need to write a Javascript file that runs your application and tests to make sure that everything is running as expected. Here's a sample file, followed by some commentary.
[javascript] view plain copy var view = UIATarget.localTarget().frontMostApp().mainWindow().elements()[2]; var textfields = view.textFields(); if (textfields.length != 2) { UIALogger.logFail("Wrong number of text fields"); } else { UIALogger.logPass("Right number of text fields"); } var passwordfields = view.secureTextFields(); if (passwordfields.length != 1) { UIALogger.logFail("Wrong number of password fields"); } else { UIALogger.logPass("Right number of password fields"); } textfields["username"].setValue("tturner"); passwordfields[0].setValue("tod"); view.buttons()["logon"].tap(); var errorVal = view.staticTexts()["error"].value(); if (errorVal != "Invalid User Name or Password") { UIALogger.logFail("Did Not Get Invalid Username Error: " + errorVal); } else { UIALogger.logPass("Username Error Detected"); }