构建iOS持续集成平台(3)

发表于:2013-12-11来源:酷勤网作者:不详点击数: 标签:iOS
在UIAutomation中,界面就是由一堆UI元素构建的层级结构,所有UI元素都继承对象UIAElement ,该对象提供了每个UI元素必须具备的一些属性: name value elements

  在UIAutomation中,界面就是由一堆UI元素构建的层级结构,所有UI元素都继承对象UIAElement ,该对象提供了每个UI元素必须具备的一些属性:

  name

  value

  elements

  parent

  而整个界面的层级结构如下:

  Target(设备级别的UI,用于支持晃动,屏幕方向变动等操作)

  Application(设备上的应用,比方说Status Bar,keyboard等)

  Main window(应用的界面,比方说导航条)

  View(界面下的View,比方说UITableView)

  Element(View下的一个元素)

  Child element(元素下的一个子元素)

  下面是一个访问到Child element的例子:

  UIATarget.localTarget().HamcrestDemo().tableViews()[0].cells()[0].elements()

  开发者还可以通过“UIATarget.localTarget().logElementTree()”在控制台打印出该target下所有的的elements。

  找到UI元素之后,开发者可以基于该UI元素做期望的操作,UIAutomation作为原生的UI测试框架,基本上支持iOS上的所有UI元素和操作,比方说:

  点击按钮,例: ***.buttons[“add”].tap()

  输入文本, 例:***.textfields[0].setValue(“new”)

  滚动屏幕,例:***.scrollToElementWithPredicate(“name begin with ’test’”)

  关于使用UIAutomation做UI测试,推荐大家一定要看一下2010的WWDC的Session 306:Automating User Interface Testing with Instruments【19】。 另外,这儿还有一篇很好的博客,详细的讲解了如何使用UIAutomation做UI自动化测试:http://blog.manbolo.com /2012/04/08/ios-automated-tests-with-uiautomation

  Apple通过Instruments为UIAutomation测试用例的命令行运行提供了支持,这样就为UIAutomation和CI服务器的集成提供了便利。开发者可以通过如下的步骤在命令行中运行UIAutomation测试脚本

  指定目标设备,构建被测应用,该应用会被安装到指定的DSTROOT目录下

  xcodebuild

  -project "/Users/twer/Documents/xcodeworkspace/AudioDemo/AudioDemo.xcodeproj"

  -schemeAudioDemo

  -sdk iphonesimulator6.1

  -configuration Release SYMROOT="/Users/twer/Documents/xcodeworkspace/

  AudioDemo/build" DSTROOT="/Users/twer/Documents/xcodeworkspace/AudioDemo/

  build" TARGETED_DEVICE_FAMILY="1"

  install

  启动Instruments,基于第一步生成的应用运行UIAutomation测试

  instruments

  -t "/Applications/Xcode.app/Contents/Applications/Instruments.app/

  Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/

  Automation.tracetemplate" "/Users/twer/Documents/xcodeworkspace/AudioDemo

  /build/Applications/TestExample.app"

  -e UIASCRIPT

  为了更好的展示测试效果以及与CI服务器集成,活跃的社区开发者们还尝试把UIAutomation和Jasmine集成:https://github.com/shaune/jasmine-ios-acceptance-tests

  UIAutomation因其原生支持,并且通过和Instruments的绝佳配合,开发者可以非常方便的使用录制操作自动生成测试脚本,赢得了很多开发者的支持,但是因苹果公司的基因,其系统非常封闭,导致开发者难以扩展,于是活跃的社区开发者们开始制造自己的轮子,Fone Monkey就是其中的一个优秀成果。

  Fone Monkey

  Fone Monkey是由Gorilla Logic 公司创建并维护的一个iOS自动化测试工具,其功能和UIAutomation差不多,但是由于其开源特性,极大的解放了活跃开发者的生产力,开发者可以很容易的根据自身需要扩展其功能。

  Fone Monkey的安装虽然简单,但是比UIAutomation的原生支持来说,也算是一大劣势了,具体的安装过程可以参考:http://www.gorillalogic.com/fonemonkey-ios/fonemonkey-setup-guide/add- fonemonkey-your-xcode-project

  Fone Monkey的使用方式主要就是录制/回放,也可以把录制好的测试用例保存为脚本以其他方式运行。安装好Fone Monkey启动测试以后,应用界面会有点变化:

  开发者通过点击Record按钮录制操作,点击Play按钮播放之前录制的操作,点击More按钮可以添加一些针对元素的验证, 这样就形成了一个测试用例。

  在Fone Monkey中录制的测试用例可以保存为3种格式,以支持多种运行方式:

  scriptName.fm:用于支持在Fone Monkey的窗口中运行测试

  scriptName.m:用于和Xcode的OCUnit test 集成,可以以OCUnit的测试用例的形式运行UI测试,这就让UI具备了命令行运行和与CI集成的能力。

  scriptName.js:UIAutomation的格式,用于支持在Instruments中,以UIAutomation的形式运行测试。

原文转自:http://www.kuqin.com/shuoit/20130920/335289.html