分享

iOS的自动化测试资料收集(未整理)

 十三笑兮兮 2013-12-25

iOS的自动化测试

去年5月份接手测试了几个iOS客户端,简单看了点关于iOS UI自动化测试的东西,做了点记录,现在看看已经落伍了好多。姑且放着也许哪天还能用上。

  要测试一个已成型的应用,从用户所见的角度来做自动化收益还是比较高的。目前了解的UI测试方法分为两类,一种是iOS4提供的UI Automation,一种是把测试代码注入到应用中。

  1iOS4UI Automation

  用JavaScript驱动在应用上模拟用户行为,由InstrumentsAutomation工具执行。具体的可以参考这篇文章iOS 4 中实现UI自动测试,操作很简单,先编写自动化测试Javascript文件,在Automation工具中选择这个文件,选择测试的target(模拟器和真机都可以),然后点Record(这个名字起得很坑爹,我一度以为它支持录制,像Selenium一样转化为js代码呢),此时会运行所选的应用同时自动化脚本也开始运作了。

  API可以在SDK Developer Document里找到,主要的是UIAElementUIAElementArrayUIALogger这几个。但是API不是很完善,比如我要得到整个elementTree可以通过UIATarget.localTarget().logElementTree()得到,但是没有API能获取所有的Element,获取Element只能以获取子控件的形式一级一级查找,最后的代码可能就会变成这样:

window.tableViews()[0].cells()[1].buttons()[2].tap();

  即使可以通过buttonname直接找到这个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据说也是类似的思路。

  总结一下以上两种测试方法存在的问题:

  iOS4UI Automation有一个硬伤,就是4.0以下iOS不支持,这对自动化来说是打点折扣的。但是既然是Instruments的工具,不知道能否和其他工具一起使用,比如用leak检测内存泄露,比如用UI Recorder记录操作,然后回放到低版本的iOS设备或者模拟器上,可行性没了解过。

  第一种方案使用Javascript,相对第二种方案的Objective C上手还是要简单一些。

  需要解决的问题还有,如果应用crash,测试就不能继续了。如果crash后重跑下一个case,那就不能有case之间的耦合。如何重新运行app有待研究。

  另外以上两种方案最后都要做到可持续集成,第一种方案需要做的是把build apprun app & testcasegenerate testresult整个流程串起来,Automation这个工具提供可以测试报告,Instruments可以Shell运行,是否可行还需要研究,如果行不通的话可以尝试用Apple Script运行;第二种方案难点在于如何生成报告,需要把测试的log重定向到某个文件输出,这也是他们准备做成C/S结构的原因之一,可以在server端直接得到测试结果。

  PS:如果测试的不是客户端而是web应用的话,Selenium2已经支持iOSandroid平台了,可参考Selenium IphoneDriver

 

 

基于APPIUM的移动自动化测试

Appium一款开源自动化测试工具,可以非常快捷的为iOSAndroid移动平台创建功能自动化测试用例。相比其他的移动自动化测试工具,Appium测试由于调用了Seleniumclient库使其可以使用任意的语言,包括PythonRubyNode.js,Objectivejava等。

http://www./attachments/2013/04/346836_2013041510544114myw.jpg

  本文我们主要讨论如何通过junit java example tests测试完成iOS sample apps的测试(此处我们还会创建TestNG example Tests

  当然在开始之前,我们首先需要下载Appium,下载地址为https://github.com/appium/appium,根据安装说明我们可以完成Appium的安装。

  运行以下命令行构建sample projects

grunt buildApp:TestApp
grunt buildApp:UICatalog

  一旦sample projects完成构建,即可通过以下命令启动Appium

grunt appium

  变更工作目录到sample-code/examples/java/junit,运行测试

mvn test

  或运行单个测试:

mvn -Dtest=com.saucelabs.appium.SimpleTest test

  Java Appium测试与Selenium Test非常的相似,你可以创建一个RemoteWebDriver实例并指定DesiredCapabilities,脚本如下:

@Before
public void setUp() throws Exception {
    // set up appium against a local application
    File appDir = new File(System.getProperty("user.dir"), "../../../apps/TestApp/build/Release-iphonesimulator");
 
    File app = new File(appDir, "TestApp.app");
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.BROWSER_NAME, "iOS");
    capabilities.setCapability(CapabilityType.VERSION, "6.0");
    capabilities.setCapability(CapabilityType.PLATFORM, "Mac");
 
    //tell Appium where the location of the app is
    capabilities.setCapability("app", app.getAbsolutePath());
 
    //create a RemoteWebDriver, the default port for Appium is 4723
    driver = new RemoteWebDriver(new URL(http://127.0.0.1:4723/wd/hub), capabilities);
}

  完成以上脚本后即可直接通过类似selenium测试的方式完成测试脚本:

@Test
public void example() throws Exception {
 
    // find an element by tag name
    WebElement button = driver.findElement(By.tagName("button"));
    button.click();
 
    // get the value of the element
    WebElement texts = driver.findElement(By.tagName("staticText"));
    assertEquals(texts.getText(), "some expected value");
}

 

 

os方面的自动化测试接触较少,不过可以使用mac book,使用instrument进行测试来查看app的性能数据例如内存和cpu使用情况。
Android
的性能自动化测试可以使用adb shell命令来检测pss/RSS/CPU使用情况,同时可以推荐你一个小的apk,叫做Emmagee是一个开源的工具用来做android性能比较方便而且容易上手。

 

iTestin (iOS/Android自动化测试工具),iTestin (iOS/Android自动...

 

InstrumentDriver,对iOS自动化测试说Yes!

 

iOS项目开发上,我一直在寻找合适的自动化功能测试库,感觉现在的自动化测试有点类似于10年前的自动化web测试。虽然有不少不一样的支持iOS自动化功能测试的工具,但我们需要通过实践来检验哪个才是最好的。

 

我推崇使用和代码库一样的语言来写功能测试,就iOSObjective C来说,我觉得使用更加轻量级的语言(比如Ruby)会有优势。我还会经常为Android写测试案例,所以能够用与iOS app测试相同的工具更具优势。以下列出了几种iOS app自动化功能测试工具:FrankKIFSubliminalZucchiniCalabashAppium以及ios-driver (有些框架使用了苹果未公开的API,这一点要注意)

 

http://www./cms/uploads/allimg/131111/4196_131111162437_1.jpg

 

 原文:The current state of iOS automated functional testing

Testin发布免费App自动化云测试工具,涵盖iOS/Android

http://leiphone./uploads/2012/08/testin1.jpgiTestin是免费的App自动化云测试工具,覆盖了iOSAndroid两大智能手机系统平台。其能够为开发者提供App应用功能点测试的产品,并能够在批量终端进行功能验证。

目前iTestin同时支持AndroidiOS设备的黑盒测试,为移动开发者提供基于批量终端的功能测试、脚本录制回放以及测试记录的功能

iTestin的消息发布后,一些移动互联网业内大佬,诸如CSDN创始人蒋涛、硅谷科技博客PingEast创始人骆轶航、二战风云CEO吴刚、唱吧CEO陈华、爱壁纸HD应用创始人高春辉、丁香园CEO张进、IDG 资本副总裁岳斌等,参与了iTestin的微博互动。

移动互联网开发者和测试人员在App应用的开发及测试过程中,对App应用质量性能的测试环节的工作量异常繁重,甚至大量的工作重复枯燥。由于缺乏有效的,更为便捷的测试方法,大量基于App应用质量保障工作往往需要一个专业的测试专业的测试团队来手工完成,甚者还要购买大量的移动终端设备。

但这种原始机械的测试手段,低效率,高成本,超长的测试周期,无法满足移动互联网App应用产品的快速迭代要求,有些开发者及企业经常性因为赶期上线而放弃了App应用产品大批量终端的兼容测试及功能点测试,但当App应用发布后又经常得到较多的用户不满,这一难题一直困扰移动互联网开发者及企业。

http://leiphone./uploads/2012/08/testin.jpg

(图:Testin云测真机实验室一角)

Testin所提供的资料, iTestin自动化云测试工具正是Testin云测基于解决移动开发者此困扰发布的另一个自动化服务。早在2011年底,Testin云测就在云端部署了300多款1000多部真实的iOS/Android移动设备,面向移动开发者免费提供基于大批量终端的兼容适配自动化测试服务,迄今已完成测试300万次。如今发布的iTestin自动化云测试工具则是一款能够为开发者提供App应用功能点测试的产品,并能够在批量终端进行功能验证。

iTestin自动化测试工具特点:

自动化测试

可提供业界最全的自动测试服务类型:兼容测试、性能测试、功能测试。返回测试结果,测试结果包括:CPU消耗、内存消耗、启动时间,界面截图、Log日志、错误原因及分析等

iOS/Android两大平台

同时支持AndroidiOS设备的黑盒测试的自动化工具,为移动开发者提供基于批量终端的功能测试、脚本录制回放以及测试记录的功能

快速交付

支持在移动终端设备上记录操作行为、生成脚本文件,在终端设备上反复回放并记录回放结果。iTestin5分钟内,就可以把开发者的App应用在Testin云测的上千款真机上全部运行测试一遍,并返回测试结果

标准化报告

持在终端设备上记录操作行为、生成脚本文件,在终端设备上反复回放并记录回放结果:错误屏幕截图、Log日志,为开发者提供最专业、最详细的测试报告,帮助开发者快速找到错误原因。

http://leiphone./uploads/2012/08/itestin.jpg

(图:iTestin自动化测试工具首界面)

iTestin自动化测试工具重点功能:

基于Windows平台,为AndroidiOS设备提供黑盒测试的自动化工具,为开发者提供功能测试、脚本录制回放以及测试记录的功能。主要内容包括:

1)连接和管理连接在PC上的终端设备,包括PhonePad

2)支持在终端设备上记录操作行为、屏幕截图、Log日志,并上传到iTestin平台。

3)支持在终端设备上记录操作行为、生成脚本文件,在终端设备上反复回放并记录回放结果、错误屏幕截图、Log日志。

4)支持在PC上上传录制的脚本和应用程序到iTestin平台,在Testin云测终端云的其他终端上按脚本执行应用程序。

下载地址:iTestin

Native AppWeb App的自动化测试

XCode UIAutomationInstrument

UIAutomationAcceessibility

UIAutomation对象查看

UIAutomation脚本开发

UIAutomation几个主要API的使用

JavaScript编写自动化测试用例

iOS开源与商业自动化测试工具

SilkMobileSeeTestRanorexTestStudio的自动化测试解决方案

SeeTest云测试方案介绍

IPhoneDriverNativeDriverios-DriverAppium等开源工具的应用

自动化测试框架设计

使用FrankCalabash开展BDD形式的自动化测试

SeleniumiOS自动化测试

Monkey Testing的应用

基于图像识别的自动化测试与Sikuli应用

自动化测试实施方案介绍

搭建自动化测试管理平台

 

淘宝Android/IOS自动化测试框架

Android自动化框架在淘宝项目过程中使用情况:
   
    (一)原来发布阶段2周,每天手工回归4h,到现在自动化执行查看结果。效率提升,10*4h/每客户端每迭代 ,缩短开发测试周期。
   
    (二)在规范流程方面:原来开发手工打包,旺旺发给测试发给运营,到现在平台自助打包,每日构建。效率提升,手工打包每个2分钟,沟通成本更高。 杜绝可能出错的风险 .
   
    IOS自动化框架发展历程:
   
    (一)注入式框架:从无到有,首开先河,通过直接修改开发代码,让测试运行起来,升级日志系统,方便查看运行结果
   
    (二)instrument js 工具包:增加稳定性,增加校验功能。增加批量执行。效率提升,从需要注入改代码,到可以直接运行app.运行稳定性提升,增加易用性。
   
    主要在以下方面进行了扩展:
   
    操作扩展:主要是稳定性上面的,如tap操作增加轮询元素查找。还包括便利性的扩展,如UIAPicker的选取与展示。
   
    校验扩展 :提供更加丰富的校验功能,及校验出错提示
   
    LogHudson:UIAutomation执行后的plist结果文件,转换为hudson认识的格式。方便持续集成里展现。
   
    (三)InstrumentDriver :Java环境编写用例,更好的接入现有测试系统。
   
    效率提升,语法出错排查时间从原来的平均30分钟,减为0.
   
    效率提升,智能感应让编写用例时间缩短30%,学习成本大幅降低。
   
    效率提升,调试功能让出错排查时间缩短50%.
   
    在这里先简单介绍下Instrument uiautomation,Instrument uiautomation 是苹果官方提供的iPhone手机应用的自动化测试工具。控件元素的识别准确,属性获取,元素操作的API丰富。可以很方便的录制测试脚本、回放和查看运行结果。
   
    基于instrument,扩展了该框架,对其元素操作的稳定性进行了增强,统一了错误异常的处理及详细的运行日志,提供了方便的校验机制。结合具体项目,还实现了脚本的运行调度、日志的处理以及与Hudson集成的日常回归。框架图如下:
   

  

    Athrun相关API介绍:

  

豆瓣iOS自动化测试

http://www.docin.com/p-488177921.html

ynm3k

 

使用Python实现基于图像识别的iOS自动化测试

相对于Android来说,iOS比较封闭。这一点,在设计和评估自动化测试方案的时候感觉尤其强烈。iOS平台上没有特别好用的自动化测试工具。苹果针对iOS提供了UI AutomationInstruments工具,以及相配合使用的Javascript,但是使用起来有很大的局限性。主要问题是必须使用Javascript来编写测试脚本,不支持其他语言,很难实现复杂的功能。而且,在一台mac机上同时只能运行一个Instruments实例,无法对多个设备同时进行测试。在多数游戏应用中,UI都不是使用标准控件的,所以不可避免的要使用图像识别技术。而iOS UI Automation API里面除了截屏的功能并没有提供多少帮助。

所幸的是我们找到了UIAHost.performTaskWithPathArgumentsTimeout()方法。这个方法是用来调用外部程序的。巧妙地利用这个方法可以实现比较复杂的功能。但是我仍然希望测试逻辑能用Python来写,因为Python用起来相当顺手而且有成熟的测试框架。

要让UI AutomationJavascript脚本听从Python脚本的指挥,可以把Javascript脚本写成一个服务器,接受来自Python脚本的指令,并调用相应的API完成任务。通信的任务可以使用socket。当然Javascript脚本本身无法完成这个任务,所以需要调用外部程序来实现。这个外部程序可以用Python来写,我称之为slave.py,而Javascript脚本就是master.js,因为是master创建的slave进程。当然实际上slave并不听命于mastermaster反而要听从slavesocket获得的指令。

这样一来,只需要写个驱动层,把API调用包装一下,通过socket传输到slave.py,再通过slave.pystdout返回到master.js,再通过调用UI Automation API就实现了Python脚本的自动化测试。当然本文没有涉及很多细节实现问题,留给以后有时间再阐述。

以下是简化的master.js示例代码:

1.  UIALogger.logMessage("Instruments started.")

2.   

3.  var target = UIATarget.localTarget();

4.  var app = target.frontMostApp();

5.  var window = app.mainWindow();

6.  var host = target.host();

7.   

8.  var screenshotPath = "screen";

9.   

10. var python_path = host.performTaskWithPathArgumentsTimeout("/usr/bin/which", ['python'], 1).stdout.replace("\n", "");

11. if (python_path == "") {

12. UIALogger.logError("python is not found.");

13. }

14. else {

15. while(1) {

16. var result = host.performTaskWithPathArgumentsTimeout(

17. python_path,['InstrumentsSlave.py'], 30);

18.  

19. var ins = ("" + result.stdout).split('\n');

20.  

21. if (ins[0] == 'exitApp')

22. break;

23.  

24. switch (ins[0]) {

25. case 'tap':

26. var x = ins[1];

27. var y = ins[2];

28. target.tap({x:x, y:y})

29. break;

30. case 'input':

31. var s = ins[1];

32. app.keyboard().typeString(s)

33. break;

34. case 'captureScreen':

35. target.captureScreenWithName(screenshotPath);

36. break;

37. default:

38. break;

39. }

40. }

41. }

复制代码


原文链接:http://www.cnblogs.com/silmerusse/archive/2013/07/18/3198590.html

 

 

http://www./category/automation_test

 

iOS应用简单剖析 

“知己知彼,百战不殆!”在介绍iOS自动化测试框架前,我们先要对iOS应用进行一次解剖。

一、平台特性

    iOS是一个完备的操作系统,可以认为是Mac OS X的一个定制系统,是苹果公司的移动操作系统。它提供了一些基于移动设备的特点:Touch-based UI,Cellular network support,Location service,Accelerometer,等。

    iOS的用户界面的概念基础上是能够使用多点触控直接操作。控制方法包括滑动,轻触开关及按键。与系统交互包括滑动(swiping),轻按(tapping,挤压(pinching)及旋转(reverse pinching)

     

二、应用特性

     作为iOS平台的应用,也有其自身的一些特性。

    1iOS平台在运行应用程序时,当前只会有一个正在运行的应用程序,所以UIApplication很容易获取应用程序的事务代理

    2、应用程序运行时,所有的视图控件都是在应用程序事务代理这一个window内,这个window是固定的,大小就是屏幕大小。

    3、在iOS平台上,应用的访问权限是有限的,只能访问应用本身所在的目录,没有系统其他目录的访问权限

    4、应用的响应时间也是有限的,在移动设备上用户退出应用时,如果应用在5S内没有完成保存并放弃控制,则应用程序进程将被终止

    5、有限的屏幕大小

    6、有限的系统资源,特别是内存是非常有限,所以内存不足的现象在应用中很容易出现。Cocoa Touch提供了一种内置机制,可以将内存不足的情况通知给应用程序。出现这种情况时,应用程序必须释放不需要的内存,甚至可能被强制退出。

三、应用结构

     1、应用的生命周期

             

    2、应用的视图结构

          1)、window,绝大多数iOS应用只使用一个窗口,所有控件视图都嵌套在该窗口内

          2)、view,iOS应用中很重要的部分,各种操作、效果等等都是在UIView object中实现。View是属于UIWindow的一块矩形区域。

          3)、controls,iOS应用中实现对事件处理的,具有target-action机制,用来响应control事件

          4)、iOS应用的基本框架使用的是MVC模式

    3、事件处理

           1)、在Cocoa Touch这个框架中,只有touch操作被当做事件

           2)、能够处理事件的对象叫做Responder

           3)、UIResponder定义了4个事件处理:touchesBegan,touchesMoved,touchesEnded,touchesCancelled

           

    这里只是对iOS应用做了简单剖析,可以大概了解iOS应用的特性、结构、运行原理,这是我们在iOS平台上对应用进行自动化测试所需要的基础知识。

手机GUI自动化测试介绍

摘要

  众所周知,自动化测试可以一定程度上减轻测试人员负担,提高测试效率,并且通过自动化还可以实现可靠性测试和性能测试。对于移动客户端测试而言,如果我们能够让手机自动运行应用程序来帮助我们检测功能的正确性,会不会很酷?有道测试组对一些热门的手机自动化工具进行了调研,并选择了一些工具进行实际的使用。本文将会结合实际工作,对移动客户端(Android&iOSGUI自动化的工具调研和实现进行介绍。

  Android

  工具

   Android APIs提供的instrumentation类可以初始化Android应用程序代码,允许你监控应用程序的系统交互,配合KeyEvent MotionEvent类,发送用户事件,进而实现GUI 层的自动化。测试程序需要继承ActivityInstrumentationTestCase2来实现自动化。

  为了方便编写自动化测 试用例,我们需要对ActivityInstrumentationTestCase2进行扩展。业界也已经有一些成熟的自动化工具,诸如 RobotiumAthrunNativeDriverMonkeyRunner等。我们需要针对自身产品的需求,从中选取一款合适的工具来实现自 动化。对于移动客户端GUI的自动化而言,需要保证选取的工具有以下几点特性:

  1、工具开源,易于扩展。

  2、脚本编写简洁,维护成本低。

  3、满足客户端的自动化需求。

  4、便与校验结果的正确性。

  5、可用于持续集成。

  表1列出了这四款工具的区别:

http://www./attachments/2013/05/346836_201305201325511bzQ7.jpg

1 Android自动化工具对比

  MonkeyRunner通过编写Python脚本来实现自动化,结果的验证是通过截屏比对图片来实现,验证方式不够灵活,不建议采用。

  NativeDriver WebDriver 接口的一种实现,使用移动客户端原生UI而不是浏览器UISelenium 的自动化测试工具。类似于selenium RC的方式来运行测试程序,对于熟悉WebDriver的用户,上手会很快。从表1可以看出该工具也可以满足我们的自动化需求,但在调研初期,该工具提供 的接口较少,没法满足测试需求,而今的完善程度也已经很高了。没有使用该工具可以认为是历史原因吧。

  Robotium被大家所熟知,基于instrumentation实现,提供的接口可以满足大部分自动化需求。但不支持webview,而有道词典的查词结果展示恰好使用的是webview组件,该模块就没有办法通过该工具来实现自动化。

   Athrun的实现和Robotium类似,提供的接口也很多,并且支持webview,也可实现持续集成。对于我们的产品而言,满足自动化的需求。由 于工具开源,在今后需求不满足的时候我们也可以在该工具的基础上做一些封装。所以最终选择了Athrun来实现笔记和词典的GUI自动化。

  实例

  和写Android应用类似,首先要建立一个Android Test Project ,指定被测试的Android Project。如果没有应用源代码,也可以在测试程序的AndroidManifest.xml文件内,修 <instrumentation> 标签下targetPackage为我们要测试的应用程序的package。之后导入framework.jar,就可以开始编写自动化脚本了。图1是有 道云笔记Android端登录模块的自动化用例:

http://www./attachments/2013/05/346836_201305201325571sV7N.jpg

1 Android 自动化用例

 我们需要继承AthrunTestCase,指定package和想要开始的Activity 。每一个方法作为一个测试用例,最后以Android JUnit Test的方式运行测试用例。这里需要注意的一点,要先在设备上安装被测试的应用。如果这个应用是签名过的,那么我们的测试应用也需要用一样的签名。

  从代码可以看出,寻找组件的接口很简单,可以通过组件的idvalue等属性来寻找。如果组件没有相对独立的属性,也可以通过该组件的父节点 一层层来寻找。Android SDK提供的hierarchyviewer工具将模拟器当前Activity UI组件以树状形式展现,可以清晰的看到每个组件的详细属性。

  验证一条测试用例是否通过的方式也有很多种,可以验证Activity的跳转、组件的展示,当然还有一些可能就需要通过截屏。图1是通过验证执行用例后Activity的跳转来判断测试用例是否通过。

  以上我们就完成了一条测试用例的自动化。显然基于Athrun的框架,使得我们的自动化用例编写方便了很多,成本也大大降低了。

  为了完成各种自动化测试用例,我们有必要对Athrun有更详细的了解,以便二次开发所需接口。感兴趣的朋友可以通过http://code./svn/athrun/trunk/android/来下载工具源代码。

  iOS

  工具

  在介绍iOS自动化之前,首先要介绍下Xcode 所提供的 instruments工具。该工具是一款用来动态跟踪和分析OS XiOS代码的实用工具。这是一个灵活而强大的工具,它让你可以跟踪一个或多个进程,并检查收集的数据。这样,Instruments可以帮你更好的理 解应用程序和操作系统的行为。

  instruments除了提供自动化工具automation外,还有诸如leaksallocations等用来检测和分析程序性能的工 具。对于iOS测试和开发而言,追踪和定位缺陷,instruments是非常实用的。图2instruments的主界面:

http://www./attachments/2013/05/346836_2013052013260217x3Q.jpg

2 instruments 主界面

  关于instruments所提供的各种工具的使用,感兴趣的朋友可以在iOS Developer Library中了解。

  接下来就要介绍一下UI Automation,它可以用在真实设备或模拟器来执行自动化测试。

  使用JavaScript编写测试用例,调用UI Automation的接口模拟用户交互操作。该工具会将自动化运行的日志信息返回到instruments 信息栏。

  实例

  在Xcode通过 profile的方式来启动instruments。或者直接双击启动instruments,在instruments主界面中选择设备上被测试的应用 程序。然后在Automation Script栏编写自动化脚本。使用iOS设备需要注意的一点是确保Developer profile设置是Release模式。图3是有道云笔记iPhone版登录模块的自动化用例:

http://www./attachments/2013/05/346836_2013052013260719lPq.jpg

3 iOS 自动化用例

  完成自动化脚本后,可以通过点击Instruments Record按钮来运行,也可以通过instruments相关命令来运行。前者适合于调试,后者适合于持续集成。

  从图3可以看出,对应的UI 组件需要逐层指定。定位这些组件有两种方式。对于iOS 5以上的系统可以通过录制生成脚本,但录制的方式可能会记录错误。所以为了定位准确的组件位置,就需要调用logElementTree ,将当前屏幕组件的层次树状结构打印到日志中,通过日志定位组件。

  从上图也可以看出UI Automation 所提供的验证机制有些繁琐,验证每一个组件是否存在都需要去做判断。这仅仅是冰山一角,UI Automation会对捕获到弹出窗口(alert)点击默认操作按钮,提供的日志文件也不便于分析,所以我们有必要对UI Automation的接口进行二次封装,更方便去编写自动化用例。

  Athrun也提供了iOS的自动化框架,有三种实现方式。第一种AppFramWork是代码注入型,需要在源码中插入测试代 码,Objective-C编写测试用例,自动化成本较高,不建议使用。第二种instrument Athrun就是对UI Automation的接口进行扩展,提高了原有接口运行的稳定性。第三种instrumentDriver基于instrument JS框架来开发InstrumentDriver服务端,在java上实现客户端,使用java脚本控制iOS自动化执行。该框架还实现了单步运行,调试 UI Automation没有的功能。图4instrumentDriver的架构图:

http://www./attachments/2013/05/346836_201305201326261mEK4.jpg

4 instrumentDriver 架构图

  从instrumentDriver的介绍可以看出,相比苹果所提供的UI Automation是有不少优点的。目前由于我们需要通过自动化脚本配合instruments 其他性能检测工具来实现对应用程序的性能测试,所以依旧采用instruments 原生工具配合扩展的JS脚本的方式。后续如果可以找到更好的获取性能数据的办法,会逐渐转向instrumentDriver的方式来实现iOS的自动 化。

  对比

  从表2可以简单看一下目前我们选择的iOSAndroid自动化工具的区别:

http://www./attachments/2013/05/346836_2013052013263613reG.jpg

2 iOSAndroid自动化工具对比

  结语

  自动化的实现一定程度上提升了我们的测试效率,由于互联网产品迭代速度较快,这里建议大家自动化从冒烟测试做起,用 例设计要尽可能简洁,多做封装,以便降低维护成本。同时实现自动化的持续集成,更早介入测试,更早发现问题。在此基础之上,我们还可以通过自动化配合获取 性能数据的脚本来实现对应用程序的性能测试。这些工作可以使得我们的测试覆盖更广,测试力度更深,更好的检测和监控产品质量。

  原文:http://techblog.youdao.com/?p=571

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多