App自动化测试方案

App自动化测试方案

1.1 概述

什么是App自动化?为什么要做App自动化?

App自动化是指给 Android或iOS上的软件应用程序做的自动化测试。

手工测试和自动化测试的对比如下:

手工测试优势:不可替代、发现更多bug、包含了人的想象力与理解力。

注意,不是所有功能都需要自动化。

自动化测试优势:可重复、效率高,增加软件信任度。

App测试自动化的目的如下:

  • 执行自动化测试只会发现很少的bug。
  • 执行自动化冒烟测试或回归测试是用来验证系统状态,而不是找出更多bug。
  • -执行自动化测试可以让测试同事有更多的精力来关注复杂场景,做更多更深层次的测试。
  • -编写自动化测试过程中会发现一部分bug,发现后要及时记录。

1.2 风险分析

自动化测试的主要风险分析如下:

(1)测试用例覆盖率(覆盖率决定测试效率,选择合适用例,应约占功能用例集的20%~50%)

(2)测试结果准确度(准确度决定了测试有效性,应尽可能减少误报)。

(3)自动化代码维护(维护决定了成本,数据关键字驱动自动化框架,代码应尽可能优化和少改动)。

(4)版本开发和测试时间进度(当项目需求和功能较为稳定时,建议用自动化)。

(5)开发对控件元素增修改的程度(需开发人员尽可能地用name元素,并且和UI设计一致,修改变动程度不大,测试人员可根据提供的元素提前介入,开发自动化脚本)。

App源码权限控制,iOS上测试需要源码。实际测试只需SVN下载权限,而不需要上传权限。防止改动SVN上的源码。

1.3 软硬件需求

自动化测试的软硬件需求如下。

硬件:

  • Mac电脑、iPhone手机。
  • Windows电脑、Android手机。

软件:

  • Appium测试框架:运行App驱动的平台,通过识别的控件元素,模拟用户的手工操作,支持iOS和Android系统。
  • AdbWireless:安卓手机和电脑间的无线连接。
  • Jenkins:持续集成自动构建和执行任务。
  • TestNG:测试插件初始化、测试、断言、清理。
  • JDK、Eclipse、Ant、SVN运行和Java语言开发编写环境。

1.4 测试计划

用一周时间做出演示demo,如果是从0开始的小白可用3到6个月时间做出演示demo。

用一个月时间试运行冒烟测试用例,如果是从0开始的小白可用半年到一年试运行测试冒烟测试用例。

目前计划:

采用自动化关键字数据驱动模式设计,即表格驱动测试或者基于动作的测试。关键字驱动框架的基本工作是将测试用例分成了四个部分:一是测试步骤,二是测试步骤中的对象,三是测试对象执行的动作(Action),四是测试对象需要的数据(Test Data)。

后期计划:

把测试用例、控件元素等放入数据库或页面进行展示操作。做到写自动化测试用例完全不用增修改代码,而是由用例自动生成代码,自由管理大量用例和测试数据,最终做成自动化平台,需要一个测试开发团队进行实现,具体内容参见本书附录A。

1.5 Appium移动自动化框架

使用Appium移动自动化测试框架需要掌握的技能如下(第1章到第4章都会用到):

(1)Appium API、WebDriver基础知识和环境搭建(见第1.5节)。

(2)TestNG等测试框架 (见第1.6节)。

(3)Android/iOS开发测试基础以及环境搭建(见第2章和第3章)。

(4)开发移动自动化项目Java语言或Python语言等 (第4章)。

说明:如果想用Python语言编写自动化测试框架,那么读者可以参考本书的Java和TestNG的代码逻辑,使用Python和unittest编写测试脚本。

Appium自动化测试框架的功能概括如下:

(1)支持iOS、Android,支持各种机型适配。

  • 测试集:关联Excel测试用例和脚本配置。
  • 测试数据:Excel存储输入数据、控件元素、测试结果。
  • 测试脚本:由Java和TestNG编写,分层结构case、log、config、report以及data。

(2)自动测试用例覆盖率。

  • 功能测试用例抽取覆盖。
  • 支持用例failed时自动截屏。
  • failed用例自动重复执行数遍。

(3)持续集成环境Jenkins,定时自动构建和执行测试任务

  • 多台机器上并行App自动化,测试机型适配。
  • 测试结果报告展示,自动邮件展示。

Appium自动化测试一个App的基本过程如下:

基于Appium自动化测试框架,我们要进行的是连接电脑、连接手机、解锁、安装App、卸载App、启动App、元素定位、元素的操作、屏幕的操作、页面等待、异常处理截图,数据校验、日志、报告等一系列自动化测试执行的详细过程。

(1)Appium自动化框架元素控件的捕获,根据捕获到的元素控件进行相应的操作。

Appium元素控件的定位方法有几种,最常用的是元素的ID(即By.id)和元素的值(即By.name),还可以通过元素类型TagName、元素的位置XPath、手机设备的坐标等进行定位操作。安卓的元素控件可以通过SDK中的uiautomatorviewer.bat文件进行录制和捕获定位 ,如图1.1至图1.3所示。

▲图1.1

▲图1.2

▲图1.3

如图1.3所示,Node Detail下面的resource-id:com.test.seller:id/phone_edit1对应Excel和代码中的定位方法By.id,控件元素数据text:13798359580对应Excel和代码中的操作方法sendkeys(),控件元素赋值数据为13798359580。

可以这样理解:首先找到这个文本框,接着给这个文本框输入数据。即通过ID属性值com.test.seller:id/phone_edit1,找到此用户名文本框的控件元素,然后通过sendkeys()方法输入用户名数据13798359580到此用户名文本。其他自动化测试步聚的定位方法、控件元素以及操作方法也都与此类似。实际上自动化测试就是通过程序代码来实现模拟手动测试去操作一遍的过程。

(2)上面介绍了用户名文本框输入用sendkeys()方法,那么其他元素的操作方法有哪些呢?元素操作方法大致有单击 (click)、输入(sendkeys)、元素滑动 、页面滑动、长按、下拉、弹出、屏幕放大缩小等,最常用的就是单击和输入。代码解析详见第4章中的源码。

(3)数据校验。其实元素本身就是数据校验,当程序找不到元素时,用例就会失败。另外,测试用例中可以加入一个或多个断言进行验证数据,还可设置步聚等待延迟时间,详细内容见第4章讲解中的源码。

(4)测试结果,测试用例中记录了运行后的测试结果,如pass、failed、skip中的一种测试结果,详细见第4章关联的Excel测试用例。

Appium简介

(Appium官方资料

http://appium.io/slate/en/master/?java#running-appium-on-windows

http://appium.io/slate/en/master/?java#ios-only)

Appium是一个移动端自动化测试开源工具,支持iOS和Android平台,支持Python、Java等语言,即同一套Java或Python脚本可以同时运行在iOS和Android平台。

Appium是跨平台的,何为跨平台,意思就是可以针对不同的平台用一套API来编写测试用例。

Appium 是一个C/S架构,核心是一个 Web 服务器,它提供了一套 REST 的接口。当收到客户端的连接后,就会监听到命令,然后在移动设备上执行这些命令,最后将执行结果放在 HTTP响应中返还给客户端。

  • session

自动化始终围绕一个session(会话)进行,客户端初始化一个seesion来与服务端交互,不同的语言有不同的实现方式,但是它们最终都是发送为一个POST请求给服务端,请求中包含一个JSON对象,被称作“desired capabilities”。此时,服务端就会开启一个自动化的 session,然后返回一个 session ID,session ID将会被用户发送后续的命令。

  • Desired Capabilities

Desired capabilities 是一些键值对的集合(比如一个 map 或者 hash)。客户端将这些键值对发给服务端,告诉服务端我们想要怎样测试。比如,我们可以把platformName capability 设置为 iOS,告诉 Appium 服务端,我们想要一个iOS 的 session,而不是一个 Android 的session。

  • Appium Server服务端

Appium Server 是用 Node.js 写的。我们既可以用源码编译,也可以从 NPM 直接安装。

Appium 服务端有很多语言库,如 Java、 Ruby、Python、 PHP、JavaScript 和C#,这些库都实现了 Appium 对 WebDriver 协议的扩展。当使用 Appium 的时候,你只需使用这些库代替常规的 WebDriver 库就可以了。

Appium Clients客户端

此客户端的概念不是我们传统意义上的客户端,更好的理解方式是一个扩展的WebDriver 协议库,当你用自己喜欢的语言写case时,会将该语言扩展的WebDrvier库添加到你的环境中,这时你可以把它理解为这就是个客户端。

Appium Clients客户端客户的安装方式如下:

Mac机器上运行·Appium.dmg;Windows机器上运行Appium.exe。

Appium工作原理 API接口调用Selenium的接口,Appium Server接收WebDriver标准请求,解析请求内容,调用对应的框架响应操作。代码将DesiredCapability中的键值对组合成一个JSON,然后通过HTTP协议发送到Appium服务器创建一个session。代码与Appium的所有交互都是围绕着这个session进行的。session创建成功后。Appium再通过USB接口与手机之间创建TCP连接,先安装一些服务端App,比如Android API 4.2+是uiautomator,Android 2.3+是Instrumentation;如果是iOS,则是UiAutomation。手机的操作都是由Appium发送指令到uiautomator,然后再由uiautomator进行控制的。

Appium原理图如图1.4所示。

▲图1.4

Appium的核心是一个遵守REST设计风格的Web 服务器,它接受客户端的连接和命令,在手机设备上执行命令,然后通过HTTP的响应收集命令执行的结果。这种架构给我们提供了很好的开放特性:只要某种语言有HTTP客户端的API,我们就可以通过这个语言写我们的测试代码。

1.6 测试框架

TestNG简介(参考TestNG官方资料):

TestNG是一款基于Java的测试框架,被设计用于解决大部分的测试需求,涵盖单元测试(测试一个单独的类)和集成测试(测试有几个类、几个包甚至有几个框架组成的系统)两种测试方式。

一般情况下,一个测试通常需要以下三步:

(1)写出你需要测试的业务逻辑,并在你的代码上加上TestNG注解。

(2)在 TestNG.xml 或build.xml中加上测试信息(例如,你需要运行的类名、组名等)。

(3)运行测试。

一个suite使用一个xml文件来定义。该suite可以包含一个或多个test,且该suite使用<suite>标签来定义。

一个test使用<test>标签来定义,该test可以包含一个或多个TestNG类。

一个TestNG类就是一个Java类,它至少包含一个TestNG注解。一个TestNG类使用<class>标签来定义,可以包含一个或多个方法。

一个测试方法就是一个在你的代码中使用@test注解标注的java方法。

一个TestNG测试可以使用@BeforeXXX或@AfterXXX注解被配置为,用于在某一切入点之前或之后执行一些代码逻辑,这些切入点可以是上述所列项中的任何一项。

下面简要地介绍下TestNG中的注解进行。

@BeforSuite: 被标注的方法将在本Suite中的所有测试运行之前运行。

@AfterSuite: 被标注的方法将在本Suite中的所有测试运行之后运行。

@BeforeTest: 被标注的方法将在本测试运行之前运行。

@AfterTest: 被标注的方法将在本测试运行之后运行。

@BeforeGroups: 被标注的方法将在本Groups中所有测试运行之前运行。

@AfterGroups: 被标注的方法将在本Groups中所有测试运行之后运行。

@BeforeClass: 被标注的方法将在本Class中的所有方法执行之前运行。

@AfterClass: 被标注的方法将在本Class中的所有方法执行之后运行。

@BeforeMethod: 被标注的方法将在每一个测试方法前执行。

@AfterMethod: 被标注的方法将在每一个测试方法后执行。

你可以使用多种不同的方式运行TestNG,例如,可以使用testing.xml文件、使用Ant或使用命令行。

你可以在testng.xml内部定义新的组,并且可以在属性中增加其他信息,例如是否平行的运行测试,使用了多少线程,是否运行Junit测试等。

另外,TestNG的详细介绍还包括执行测试、嵌套测试、忽略测试、组测试、异常测试、依赖测试、参数化测试,以及测试结果报告等,读者可查找并参考TestNG官方的相关文档资料。

1.7 自动编译部署工具

本节内容本应在第11章结合Jenkins使用,但由于第3章代码中涉及Ant的内容,所以提前介绍下,读者也可以跳过本节,等环境搭建好,demo运行起来后再来学习这部分内容。

Ant简介:(参考ant官方资料):

Ant 是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,一般集成到Jenkins中,多用于Java环境中的软件开发。在实际软件开发中,有很多地方都可以用到Ant。Ant的升级版是Maven,大家也可以使用Maven来代替Ant。

Ant 是Apache软件基金会JAKARTA目录中的一个子项目,它的优点如下。

(1)跨平台性:Ant是由纯Java语言编写的,所以具有很好的跨平台性。

(2)操作简单:Ant是由一个内置任务和可选任务组成的,用Ant任务就像在DOS中写命令行一样。Ant运行时需要一个XML文件(构建文件)。Ant通过调用target树,就可以执行各种task。每个task实现了特定接口对象。

(3)维护简单、可读性好、集成简单:由于Ant构建文件时用的是XML格式的文件,所以不仅容易维护和书写,而且结构十分清晰。由于Ant的跨平台性和操作简单的特点,因此它很容易集成到一些开发环境中去。

Ant的构建文件

当开始一个新的项目时,首先应该编写Ant构建文件。构建文件定义了构建过程,并被团队开发中每个人使用。Ant构建文件默认名为build.xml,也可以取其他的名字。只不过在运行的时候,需要把这个名字当作参数传给Ant。构建文件可以放在任何的位置。一般做法是放在项目的顶层目录中,这样可以保持项目的简洁和清晰。一个典型的项目层次结构如下所示:

(1)src存放文件。

(2)class存放编译后的文件。

(3)lib存放第三方JAR包。

(4)dist存放打包及发布以后的代码。

Ant构建文件是XML文件。每个构建文件定义一个唯一的项目(Project元素),每个项目下可以定义很多目标(target元素),这些目标之间可以有依赖关系。当执行这类目标时,需要执行它们所依赖的目标。每个目标中可以定义多个任务,目标中还定义了所要执行的任务序列。Ant在构建目标时必须调用所定义的任务。任务定义了Ant实际执行的命令。Ant中的任务可以分为三类:

(1)核心任务。核心任务是Ant自带的任务。

(2)可选任务。可选任务是来自第三方的任务,因此需要一个附加的JAR文件。

(3)用户自定义的任务。用户自定义的任务是用户自己开发的任务。

Ant的配置文件为build.xml,读者可结合本书第11章Jenkins持续集成时使用。

Ant命令、Ant脚本、标签、使用节点、元素和属性、命令指令、Ant编译打包、运行工程等 本书对Ant不做详细讲解,读者可自行查找官方资料。

SVN是一个自由/开源的版本控制系统,一组文件存放在中心版本库,记录每一次文件和目录的修改。Subversion允许把数据恢复到早期版本,或是检查数据修改的历史。Subversion可以通过网络访问它的版本库,从而使用户可以在不同的电脑上进行操作。

我们把测试开发的源代码存放在SVN上,然后结合Jenkins进行持续集成构建时使用。

安装文件路径:http://subversion.apache.org/packages.html。

本文节选自:《软件自动化测试开发-Java和Python测试开发适用指南》

原文发布于微信公众号 - 测试开发社区(TestDevHome)

原文发表时间:2019-05-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券