好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

iOS开发教程:iOS-UI自动化测试.docx

11页
  • 卖家[上传人]:碎****木
  • 文档编号:218234219
  • 上传时间:2021-12-04
  • 文档格式:DOCX
  • 文档大小:1.86MB
  • / 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//Applications/然后就可以运行测试脚本了,测试成功后的截图如下:三、iphone、ipad 自动化测试,解决方案明确概念:目的:自动化测试是为了减轻测试人员“例行公事”似的测试任务,而诞生的一种测试方法,他是必需的,但不是万能的,就像金钱一样;概念:利用现成的测试工具,对程序的执行、操作流程进行录制,而后运行时让程序自动走完录制的流程;原理:操作录制过程,就是测试脚本的自动生成过程,以后的自动测试就是执行相应的脚本,所以,必要时是需要自己动手实现脚本编写;测试工具包括:1、测试脚本的文件包(插入到程序中),如 foneMonkey 在 mac 中应用,其他地方没用过2、完整的工具(能够启动程序,并依据已经录制的操作步骤执行),eggplant 软件3、自动运行脚本平台(能够启动程序,操作过程由自己编写脚本实现),Instruments,xcode 环境一般自带我尝试过的两种测试方法:(1)利用 fontMonkey 测试工具包1、下载 FoneMonkey.zip 文件并解压2、用 xcode 打开工程名目3、添加一个测试用的 target并重命名:4、选取刚才创建的 target 并将解压好的 FontMonkey 倒入工程名目也可以直接拖入到文件名目:导入时确保你的 target 为刚才添加的5、添加完以后的效果为6、此时在你的框架中会默认添加两个文件libFoneMonkey.5.4a.beta.a libFoneMonkeyOCUnit.5.4a.beta.a这两个文件在 FoneMonkey 的 lib 文件夹中,假如框架治理中没有,则可以直接拖过去;然后再添加几个框架文件(默认有三个),libxml2.dylib、SenTestingKit.framework、QuartzCore.framework7、修改工程的配置文件 Buile Seting->Linking->Other Linker Flags 添加选项 -all_load8、开头编译程序选择测试 target 以及模拟器(真机器还没试验),运行其次个按钮是录制、第三个是播放、第四个返回上级页面;录制完成后,右上角第一个是保存,其次个是选择保存的脚本对程序进行测试;原文地址: g-an-app略有改动,加入了一些必要的留意点;(2)在 Instrument 中编写脚本进行测试(不能录制) 1、打开 Instruments 工具一般路径:/Developer/Applications/instruments2、选择 Automation3、添加测试脚本(假如有现成的,可以导入)4、编写脚本给出测试几个按钮点击的脚本var target = UIATarget.localTarget(); //变量用来表示这是一个测试系统var application = target.frontMostApp(); //确定要测试的程序var window = application.mainWindow(); //确定要册书的窗口window.logElementTree(); //猎取要测试界面的全部元素var bt=window.buttons()[2]; if(bt.isValid()){bt.tap();}else{UIAlogger.logMessage(“some error show!”);}5、倒入程序的 xx.app 包6、点击 Record 将会直接通过脚本去点击程序中的一个按钮程序设计成:一个页面,页面上有几个按钮就可以了(我用的ios5.0 虚拟机); 参考。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.