
iOS开发教程:iOS-UI自动化测试.docx
11页假如您需要使用本文档,请点击下载按钮下载!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 不是很完善,比如我要得 到整个 elementTree 可以通过 UIATarget.localTarget().logElementTree()得到, 但是没有 API 能猎取所 有的 Element,猎取 Element 只能以猎取子控件的形式一级一级查找,最终的代码可能就会变成这样:window.tableViews()[0].cells()[1].buttons()[2].tap();即使可以通过 button 的 name 直接找到这个 button 也需要写成这样:window.tableViews()[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 + TestMerge.app = UI testing bliss 据说也是类似的思路授课:XXX总结存在的问题:iOS4 的 UI Automation 有一个硬伤,就是 4.0 以下 iOS 不支持,这对自动化来说是打点折扣的但是既然是 Instruments 的工具,不知道能否和其他 工具一起使用,比如用 leak 检测内存泄露,比如用 UI Recorder 记录操作,然后回放到低版本的 iOS 设备或者模拟器上,可行性没了解过。
第一种方案使用 Javascript,相对其次种方案的 Objective C 上手还是要简洁一些需要解决的问题还有,假如应用crash,测试就不能连续了假如crash 后重跑下一个 case,那就不能有 case 之间的耦合如何重新运行 app 有待争辩另外以上两种方案最终都要做到可持续集成,第一种方案需要做的是把build app、run app & testcase、generate testresult 整个流程串起来, Automation 这个工具供应可以测试报告,Instruments 可以 Shell 运行,是否可行还需要争辩, 假如行不通的话可以尝试用 Apple Script 运行;其次种方案难点在于如何生成报告,需要把测试的 log 重定向到某个文件输出,这也是他们预备做成 C/S 结构的缘由之一,可以在 server 端直接得到测试结果PS:假如测试的不是客户端而是web 应用的话,Selenium2 已经支持 iOS 和 android 平台了,可参考 Selenium IphoneDriver二、关于 xcode4.2 iOS 的自动化测试使用 Instruments 里面的 Automation,可以对 iOS 进行自动化测试。
在这里下载修改好的项目,xcode4.2 下用的: 下载那个附件:LoginWindow_Src.zip,编译里面的 xcode 项目,假如编译有错, 就将 Targets-- Building Settings -- Prefix Header 项清空(假如使用的是上面已经修改好的,就不用改了)安装 xcode 的时候,instruments 已经装好了,与 xcode 在一个程序组里启动 Instruments,在左侧添加 Scripts:LongonTest.js, 然后在上面选择Target 为刚才编译成功的 iOS 的 app这个 app 的位置在用户名目下的:~/Library/Application Support/iPhone Simulator/
