转载 出处Taobao QA Team,原文地址:http://qa.taobao.com/?p=13737
无线客户端的发展很快,特别针对是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.
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"); }