第 1 章 自动化测试基础 - Selenium3 自动化测试

1.1 分层的自动化测试

测试金字塔的概念,其基本观点就是:我们应该有更多低级别的单元测试,而不仅仅是通过用户界面运行端到端的高层测试

在测试金字塔的基础上提出分层自动化测试的概念。在自动化测试之前加了一个「分层」的修饰,用于区别「传统的」自动化测试。
所谓传统的自动化测试我们可以理解为基于产品 UI 层的自动化测试,它是将黑盒功能测试转化为由程序或工具执行的一种自动化测试。

分层自动化测试倡导的是从黑盒(UI)单层到黑盒和白盒多层的自动化测试,即从全面黑盒自动化测试到对系统的不同层次进行的自动化测试

1.单元自动化测试
单元自动化测试是指对软件中的最小可测试单元进行检查和验证。
最好让开发人员去写和执行单元测试。

2.接口自动化测试
Web 应用的接口自动化测试大体分为两类:模块接口测试和协议接口测试。
(1)模块接口测试,主要测试程序模块之间的调用与返回。它主要强调对一个可实现完整功能的类、方法或函数的调用的测试。
(2)协议接口测试,主要测试对网络传输协议的调用,如 HTTP/SOAP 等,一般应用在前端和后端开发之间,以及不同项目之间。
模块接口测试更适合开发人员去做;协议接口测试既可以由开发人员去做,也可以由测试人员去做。

3.UI 自动化测试

UI 自动化测试以实现手工测试用例为主,可降低系统功能回归测试的成本(人力成本和时间成本)。UI 自动化测试由部分功能测试用例提炼而来,更适合测试人员去做。
Google 把产品测试类型划分为:小测试、中测试和大测试,采用 70%(小)、20%(中)和 10%(大)的比例,分别对应测试金字塔中的 Unit 层、Service 层和 UI 层。

1.2 适合自动化测试的项目

参考以下几点:

(1)任务测试明确,不会频繁变动。
(2)比较频繁的回归测试。
(3)软件系统界面稳定,变动少。
(4)需要在多平台上运行的相同测试案例、组合遍历型的测试,以及大量的重复任务。
(5)软件维护周期长。
(6)项目进度压力不太大。
(7)被测软件系统开发较为规范,能够保证系统的可测试性。
(8)具备大量的自动化测试平台。

根据我们的经验,一般来说,满足以下 3 个条件就可以对项目开展自动化测试。
(1)软件需求变动不频繁。
(2)项目周期较长。
(3)自动化测试脚本可重复使用。

1.3 如何学习 UI 自动化测试

要想学好基于 Selenium/appium 的 UI 自动化测试,应从以下 3 个方面入手。

1.编程语言
Selenium/appium 支持多种编程语言(Java、Python、C# 等),更准确地说,Selenium/appium 针对以上每种编程语言都开发了相应的 Selenium/appium 测试库。
除元素是否好定位外,UI 自动化项目的设计离不开扎实的编程基础。

2.Selenium/appium API
Selenium(WebDriver)和 appium API 提供了操作 Web/App 的类和方法。
我们只需使用这些方法即可操作 Web 页面上的元素或 App 上面的控件。

3.单元测试框架
如何定义一条测试用例、如何组织和运行测试用例,以及如何统计测试用例的运行结果(总测试用例数、成功测试用例数、失败测试用例数等),都是由单元测试框架实现的。
单元测试框架是编写自动化测试用例的基础。

1.4 Selenium 简介

Selenium 不是由单独一个工具构成的,而是由一些插件和类库组成的,这些插件和类库有其各自的特点和应用场景。

1. Selenium 1.0

(1)Selenium IDE。
Selenium IDE 是嵌入在 Firefox 浏览器中的一个插件,可实现简单的浏览器操作的录制功能。

(2)Selenium Grid。
Selenium Grid 是一个自动化测试辅助工具。利用 Grid 可以很方便地实现在多台机器上或异构环境中运行测试用例。

(3)Selenium RC。
Selenium RC(Remote Control)是 Selenium 家族的核心部分,支持多种不同语言编写的自动化测试脚本。把 Selenium RC 的服务器作为代理服务器去访问应用,即可达到测试的目的。
Selenium RC 分为 Client Libraries 和 Selenium Server 两部分。Client Libraries 主要用于编写测试脚本,负责控制 Selenium Server 的库。Selenium Server 负责控制浏览器行为。
Selenium Server 主要分为三部分:Selenium Core、Launcher 和 Http Proxy。Selenium Core 就是一堆 JavaScript 函数的集合。通过这些 JavaScript 函数,我们可以用程序对浏览器进行操作。Launcher 用于启动浏览器,把 Selenium Core 加载到浏览器页面当中,同时,把浏览器的代理设置为 Http Proxy

2. Selenium 2.0

Selenium 2.0 把 WebDriver 加到了 Selenium1.0 这个家族中,简单用公式表示如下:

Selenium RC 与 WebDriver 的工作方式有着本质的区别。

Selenium RC 是在浏览器中运行 JavaScript 应用,使用浏览器内置的 JavaScript 翻译器来翻译和执行 selenese 的(selenese 是 Selenium 命令集合)。
WebDriver 通过原生浏览器支持或者浏览器扩展来直接控制浏览器。WebDriver 是针对各个浏览器而开发的,取代了嵌入被测 Web 应用中的 JavaScript。WebDriver 与浏览器紧密集成,支持创建更高级的测试,避免了 JavaScript 安全模型导致的限制。除来自浏览器厂商的支持外,WebDriver 还可利用操作系统级的调用,模拟用户输入。

3. Selenium 3.0

2016 年 7 月,Selenium 3.0 悄悄发布了第一个 beta 版。Selenium 3.0 做了以下更新


(1)Selenium 3.0 只支持 Java 8 以上版本。
(2)Selenium 3.0 中的 Firefox 浏览器驱动独立了。Selenium 2.0 测试库默认是集成 Firefox 浏览器驱动的,在 Selenium 3.0 中,Firefox 浏览器和 Chrome 浏览器一样,在使用前需要下载和设置浏览器驱动。
(3)mac OS 操作系统集成了 Safari 的浏览器驱动,该驱动默认在/usr/bin/safaridriver 目录下。
(5)只支持 IE 9.0 以上版本。

4. Selenium IDE

它提供了比较完备的自动化功能,如脚本录制/回放、定时任务等;还可以将录制的脚本导成不同编程语言的 Selenium 测试脚本,这在很大程度上可以帮助新手编写测试用例
Selenium IDE 同样是 Selenium 的家族成员。Selenium IDE 有两个版本,旧版的 Selenium IDE 是基于 Firefox 浏览器扩展的。
旧版的 Selenium IDE 不支持 Firefox 新版本支持的 API,因此 Selenium 团队重新开发了新版的 Selenium IDE,可以同时支持 Chrome、Firefox 以及其他浏览器。
项目地址:https://github.com/SeleniumHQ/selenium-ide

5. Selenium Remote Control:是一个客户端/服务器,可以控制本地或其他的 Web 浏览器

6. Selenium Grid:允许在不同的环境下并行运行多个测试任务


 

1.5 appium 简介

appium 是当前移动平台上主流的自动化测试工具之一。
Selenium 是当前主流的 Web UI 自动化测试工具。appium 与 Selenium 之间是有继承关系的。appium 的寓意是:移动端的 Selenium 自动化测试工具。
appium 是一个开源自动化测试工具,支持 iOS 和 Android 平台上的原生应用、Web 应用以及混合应用。

原生应用:是指那些用 iOS 或者 Android SDK 开发的应用(App)。
Web 应用:是指可以使用移动浏览器(如 iOS 上的 Safari 和 Android 上的 Chrome)访问的应用。
混合应用:是指用原生代码封装网页视图,原生代码和 Web 内容交互的应用。比如,微信小程序,可以帮助开发者使用网页技术开发应用,然后用原生代码封装。

更重要的是,appium 是一个跨平台的测试工具,它允许测试人员在不同的平台(iOS、Android)使用同一套 API 编写自动化测试脚本,这大大增加了 iOS 和 Android 测试套件之间代码的复用性。

appium 与 Selenium
appium 类库封装了标准 Selenium 客户端类库,为用户提供常见的 JSON 格式的 Selenium 命令,以及额外的移动设备控制相关的命令,如多点触控手势和屏幕方向等操作。
appium 服务器定义了官方协议的扩展,为 appium 用户提供方便的接口来执行各种设备动作,例如,在测试过程中安装/卸载 App 等。

posted @ 2020-03-04 22:05  Marlon康  阅读(267)  评论(0编辑  收藏  举报