自动化测试

不仅得会开发,也得懂得测试的相关东西。

测试基础

按测试手段分

黑盒测试和白盒测试(按可见度分)

黑盒测试
黑盒测试主要是通过相关的暴露的接口,接收输入,然后看是否能够输出正确。

优点:容易实施,不需要关注内部实现,主要关注的是用户需求。

缺点:测试覆盖率低,不到40%,自动化测试覆盖率低,维护成本高,

测试内容:是否有不正确或遗漏的功能?接口上输入是否能正确接受,输出是否能输出正确的结果?性能上是否能满足?

测试方法:等价类划分法、流程分析法、边界值分析、状态迁移图、正交试验法、因果图法、错误推测法。

白盒测试
内部结构对测试人员透明,用逻辑覆盖率(语句,判断,条件,分支,路径)

优点:迫使测试人员思考软件的实现,理解原理。
可以检测代码的每条分支和路径。揭示隐藏在代码中的错误。对代码的测试比较彻底。

缺点:昂贵。无法检测代码中遗漏的路径和数据敏感性错误。不能直接验证需求的正确性。

测试方法:代码检测法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径法

静态测试和动态测试

静态测试
不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程,评审软件文档或代码。只做静态检查。

动态测试
运行被测试的程序,检查运行结果和预期结果的差异,并分析运行效率和健壮性等性能。这种方法由三部分组成:构造测试实例、执行程序、分析程序癿输出结果。软件的动态测试,就是通过运行软件来检验软件的动态行为和运行结构的正确性。目前,动态测试也是公司的测试工作的主要方式。 根据动态测试在软件开发过程中所处的阶段和作用。动态测试可分为如下几个步骤:1、单元测试 2、集成测试 3、系统测试 4、验收测试 5、回归测试。
单元测试:
JUnit、OCUnit、GHUnit、GTM
集成测试:
API接口测试和iOS功能集成测试。
系统测试:

手工测试和自动化测试

手工测试
测试人员从用户视角来满足设计要求,深度测试和主观判断的测试,分为众包测试和探索式测试。

自动化测试
借助单独的测试工具软件,控制测试的自动化执行以及对预期和结果进行自动检查。主要分为:单元测试,接口测试和性能测试。

按测试模式来分类

瀑布模式,敏捷测试,基于脚本的测试,基于风险的测试,探索式测试。
瀑布模型
项目计划–需求分析–软件设计–程序开发–软件测试–集成维护

扩展模型:
V模型,W 模型、H 模型、X 模型和前置模型。

敏捷测试

强调从客户角度,重点关注迭代测试新功能。尽早测试,不间断测试。

性能测试

负载测试,压力测试和稳定性的测试

考虑并发用户数(VU)和每秒事务数(TPS)
来看系统响应时间和设备的性能。

测试工具:LoadRunner,

ios中自动化测试UI Automation

UI Automation不但支持脚本编写方式的自动化测试,还支持录制回放方式的自动化测试,是一款功能强大的自动化测试工具。
Instruments工具还自带了UI Automation脚本的录制功能。用户只需开启录制功能,然后在真是的设备或模拟器上进行操作即可。操作的动作会被翻译成自动化脚本显示在脚本的编辑区,等待用户确认。在脚本录制完成以后,可以通过选择来编辑脚本,如果选项中没有我们需要的操作选项,则只能删除手动写脚本。

Selenium

https://github.com/SeleniumHQ/selenium
Web自动化测试中,Selenium是最成熟且应用最广泛的Web自动化测试工具。WebDriver的原理结构:
WebDriver Client–>Json Wire Protocol–>Selenium Server

WebDriver API:这一层表示WebDriver提供给使用者的最外层接口,使用者可以使用这些API进行自动化脚本的编辑。例如:

1
2
diver.findElement(By.name("q"))或者
element.click()

Json Wire Protocol:是WebDriver的开发者们制定并命名的一种协议,使用REST风格的,并且以Json方法进行传输,协议传输测试脚本需要控制的控件,并且通知Selenium Server。

Selenium Server:接受Json Wire Protocol协议并且解析,可以控制启动或者停止某一款浏览器,也可以完成对某一个控件的具体操作。

Appium

适用于iOS,Android和Windows应用的自动化。
GitHub地址:https://github.com/appium
API:http://appium.io/slate/cn/master/?ruby#about-appium

Appium简介

Appium使用WebDriver的json wire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。

好处:

  1. Appium在不同平台中使用了标准的自动化APIs,所以在跨平台时,不需要重新编译或者修改自己的应用。
  2. Appium支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言,更可以使用Selenium WebDriver的Api。Appium支持任何一种测试框架。
    如果只使用Apple的UIAutomation,我们只能用javascript来编写测试用例,而且只能用Instruction来运行测试用例。
    如果只使用Google的UIAutomation,我们就只能用java来编写测试用例。Appium实现了真正的跨平台自动化测试。

工作原理

提供各个语言的第三方库,将测试脚本转化成 WebDriver 协议下的 URL,通过 Node 服务发送到各个平台上的代理工具,代理工具在运行过程中不断接收 URL,根据 WebDriver 协议解析出要执行的操作,然后调用各个平台上的原生测试框架完成测试,再将测试结果返回给 Node 服务器。

WebDriver Client–>Json Wire Protocol–>Selenium Server–>UI Automation

mac下搭建appium环境

使用node.js实现的,首先确定有没有安装node,可以用HomeBrew安装。再看node解释器是否安装npm,然后下载并启动Appium.
参考文章:http://www.15yan.com/story/4GbuTwXQKDU/

windows 环境搭建Java和Android开发环境

参考书:https://anikikun.gitbooks.io/appium-girls-tutorial/content/index.html
英文版:https://nishantverma.gitbooks.io/appium-for-android/

iOS的持续集成

持续集成工具可以对代码库进行监测,一旦发现有代码变动,该工具会自动编译和测试应用程序。如果出现错误,会立即通知开发人员。

持续集成可以提供更快的反馈,从而降低项目风险。是集成和回归问题更快、更流畅,出现的错误更少。通过部署过程自动化,持续集成可以帮助软件测试人员更快、更可靠地、更省力地搭建测试环境和执行自动化测试。

Jenkins

Jenkins易于安装,不需要数据库的支持,直接通过Web界面进行配置,而且集成了RSS/Email的通知机制,支持分布式构建,具有丰富的插件,这些都是Jenkins相比其他持续集成服务器的优势所在。

Jenkins的安装

在Jenkins的官网https://jenkins.io/index.html下载war包,并且执行 ‘java -jar jenkins.war’正确配置Java环境。

mac下直接下载mac版本的Jenkins安装程序

Jenkins的相关插件

  1. Xcode integration
    通过对Xcode integration的简单设置,即可完成iOS项目的编译打包,还可以修改iOS应用的Technical Version和Marketing Version。

  2. Git Plugin
    通过Git Plugin,用户可以很方便的下载项目的源代码,不是默认安装,需要用户手动安装。

  3. Junit test result report
    是Jenkins默认安装的插件之一。只需指定测试工具生成的XML形式的report文件,插件会自动解析XML,并且以更易查看的方式展现测试结果。

iOS测试策略以及测试方法

  1. 功能测试:根据产品需求、用户的使用场景和代码实现方式等设计测试用例。
  2. 兼容性测试:硬件、软件、数据兼容性。iOS设备的多样化兼容测试
  3. 网络流量的测试:根据不同的网络状况测试,网速,弱网环境的测试。
  4. 升级测试:老版本升级到新版本的测试、
  5. 性能测试:服务器端性能测试。客户端性能测试:大数据测试,显示速度。
  6. 稳定性测试:检测应用程序长期稳定的运行能力。

Instrument

  1. 网络流量监测数据,监控电量、监控GPS和WIFI是否开启等状态。丽日:在一些音乐APP和一些FM的APP中是否支持自动同步喜欢的歌曲到设备上。当网络接入点只选择了在WiFi情况下同步,就必须保证用户的流量不被使用。Net Activity运行库图。
  2. 性能测试:
  • 快速启动测试:用instruments中TimeProfile来分析启动时的CPU消耗,并且以消耗CPU的数据为依据进行优化。
  • 内存泄露的检查:用Xcode分析(Analyze)代码。静态分析器可以根据经验猜测执行代码后可能发生的情况并报告问题,这些问题中可以存在内存泄露问题。静态分析器在检查代码时会枚举所有的代码路径,分别检查所以的函数和方法。为了看到静态分析的结构,在Recipes项目中可以随意找到几处release或者autorelease的调用项并删除,然后运行静态分析,用Instrument的两个组件来组合查看内存泄露的问题:Allocations和Leaks.
  • Allocations:是监控对象调用了alloc方法申请内存以后的内存使用情况,可以记录对象这个生命周期内的内存引用计数的变化,在对象被正常释放后,Allocations 不再继续追踪。Leaks会监控内存泄露,一般和Allocations一起使用,因为在监控到内存泄露时需要定位问题。可以得到详细的内存泄露信息。
  • 稳定性测试:猴子测试,直接在instruments中运行UI Automation脚本。考虑在一些零界条件下对应用程序进行稳定性测试。考虑:1.频繁收到内存警告。2.电池电量低。3.3G网络不稳定时断时续的。

及时响应用户交互和优秀的内存管理。通过测试定位并且解决问题。

参考:

国内首家移动测试的社区网站:https://testerhome.com/
构建基于Jenkins + Github的持续集成环境 http://blog.csdn.net/john_cdy/article/details/7738393
电子书:http://files.cnblogs.com/files/itech/Jenkins%E5%85%A5%E9%97%A8.pdf

文章目录
  1. 1. 测试基础
    1. 1.1. 按测试手段分
      1. 1.1.1. 黑盒测试和白盒测试(按可见度分)
      2. 1.1.2. 静态测试和动态测试
      3. 1.1.3. 手工测试和自动化测试
    2. 1.2. 按测试模式来分类
    3. 1.3. 性能测试
  2. 2. ios中自动化测试UI Automation
  3. 3. Selenium
  4. 4. Appium
    1. 4.1. Appium简介
    2. 4.2. 工作原理
    3. 4.3. mac下搭建appium环境
    4. 4.4. windows 环境搭建Java和Android开发环境
  5. 5. iOS的持续集成
    1. 5.1. Jenkins
      1. 5.1.1. Jenkins的安装
      2. 5.1.2. Jenkins的相关插件
    2. 5.2. iOS测试策略以及测试方法
      1. 5.2.1. Instrument
本站总访问量 本站访客数人次 ,