文档介绍:iOS开发教程:iOS UI自动化测试
一、关于iOS UI自动化测试
要测试一个已成型的应用,从用户所见的角度来做自动化收益还是比较高的。
目前了解的UI测试方法分为两类,一种是iOS4提供的UI Automation,一种是把测试代码注入到应用中。
1)iOS4的UI Automation
用JavaScript驱动在应用上模拟用户行为,由 Instruments的Automation工具执行。具体的可以参考这篇文章在iOS 4 中实现UI自动测试,操作很简单,先编写自动化测试的Javascript文件,在Automation工具中选择这个文件,选择测试的target(模拟器和真机都可以),然后点Record(这个名字起得很坑爹,我一度以为它支持录制,像Selenium一样转化为js代码呢),此时会运行所选的应用同时自动化脚本也开始运作了。
API可以在SDK Developer Document里找到,主要的是UIAElement、UIAElementArray、UIALogger这几个。但是API不是很完善,().logElementTree()得到,但是没有API能获取所有的Element,获取Element只能以获取子控件的形式一级一级查找,最后的代码可能就会变成这样:
()[0].cells()[1].buttons()[2].tap();
即使可以通过button的name直接找到这个button也需要写成这样:
()[0].cells()[1].buttons().firstWithName("search");
非常难看难维护。我尝试遍历一个view上的所有控件整整运行了两分钟。
另外推荐一个测试框架,Working with UIAutomation这篇文章中提供了tuneup_js这样一个框架,封装得非常简单,除了没有before after之类的封装外对我来说暂时已经够用了(需要每个case执行完后或者执行开始前恢复默认状态,不过这个很容易实现),可以参考。
2)测试代码注入到应用代码中
大致的思路是,新建一个测试的target,在 applicationDidFinishLaunching最后创建一个测试对象,这个对象封装在测试的代码中,那么此时这个target就是应用+测试的新的东西了,安装后可以看到应用一直在模拟用户行为,也就是测试代码在运行。
这种测试方法其他部门的同事在研究,这里可以介绍几个测试框架:
FoneMonkey,这是我最早接触的iOS自动化框架,支持录制回放,但是不知道怎么对结果做验证。如果仅仅是录制回放的话,UI Recorder已经挺好用了。
Bromine,这个框架还不错,封装到最后只需要填几个Plist就可以完成testcase,只是不方便扩展,可以模拟用户行为无法做数据验证,同事基于这个框架在做定制,想法是做成C/S模式,这样如果server端没有发送请求测试就不会进行。
Google Toolbox for Mac (GTM),Google的一个开源项目。GTM + TestM