分层的自动化测试
测试金字塔的概念由敏捷大师Mike Cohn在他的Succeeding with Agile一书中首次提出。他的基本观点是:我们应该有更多低级别的单元测试,而不仅仅是通过用户界面运行端到端的高层测试。
测试金字塔如图1-1所示。
Martin Fowler大师在测试金字塔的基础上提出分层自动化测试的概念。在自动化测试之前加了一个“分层”的修饰,用于区别“传统的”自动化测试。那么,什么是传统的自动化测试呢?
所谓传统的自动化测试我们可以理解为基于产品UI层的自动化测试,它是将黑盒功能测试转化为由程序或工具执行的一种自动化测试。
分层自动化测试倡导的是从黑盒(UI)单层到黑盒和白盒多层的自动化测试,即从全面黑盒自动化测试到对系统的不同层次进行的自动化测试。
分层自动化测试如图1-2所示。
单元自动化测试
单元自动化测试是指对软件中的最小可测试单元进行检查和验证。
将单元测试交给测试人员去做,有利有弊,整体来说,由开发人员去做更为合适。
测试人员做单元测试的优势是具备测试思维,在设计测试用例时考虑更加全面;但劣势也很明显,目前,大多数测试人员很难做到像开发人员一样熟悉被测代码。
让开发人员去写单元测试,优势非常明显,没有谁比开发人员更熟悉自己写的代码了。他们只需掌握单元测试框架的使用和一些常用的测试方法,即可写单元测试,而且定位bug时更加方便。
所以,测试人员可以教开发人员如何使用单元测试框架和测试方法,而不是代替开发人员去写单元测试。
接口自动化测试
Web应用的接口自动化测试大体分为两类:模块接口测试和协议接口测试。
(1)模块接口测试,主要测试程序模块之间的调用与返回。它主要强调对一个可实现完整功能的类、方法或函数的调用的测试。
(2)协议接口测试,主要测试对网络传输协议的调用,如HTTP/SOAP等,一般应用在前端和后端开发之间,以及不同项目之间。
模块接口测试更适合开发人员去做;协议接口测试既可以由开发人员去做,也可以由测试人员去做。
UI自动化测试
UI自动化测试以实现手工测试用例为主,可降低系统功能回归测试的成本(人力成本和时间成本)。UI自动化测试由部分功能测试用例提炼而来,更适合测试人员去做。
在《Google测试之道》一书中,Google把产品测试类型划分为:小测试、中测试和大测试,采用70%(小)、20%(中)、10%(大)的比例,分别对应测试金字塔中的Unit层、Service层和UI层。
适合自动化测试的项目
参考以下几点:
- 任务测试明确,不会频繁变动。
- 每日构建后的测试验证。
- 比较频繁的回归测试。
- 软件系统界面稳定,变动少。
- 需求在多平台上运行的相同测试案例、组合遍历型的测试,以及大量的重复任务。
- 软件维护周期长。
- 项目进度压力不太大。
- 被测软件系统开发较为规范,能够保证系统的可测试性。
- 具备大量的自动化测试平台。
- 测试人员具备较强的编程能力。
当然并非以上10条都具备的情况下才能开展自动化测试工作。根据我们的经验,一般来说,满足以下3个条件就可以对项目开展自动化测试。
- 软件需求变更不频繁。
- 项目周期较长。
- 自动化测试脚本可重复使用。
如何学习UI自动化测试
要想学好基于Selenium/appium的UI自动化测试,应从以下3个方面入手。
- 编程语言
Selenium/appium支持多种编程语言(Java、Python、Ruby、C#、JavaScript等),更准确地说,Selenium/appium针对每种编程语言都开发了相应的Selenium/appium测试库。
编程语言是基础,UI自动化能否做好,除元素是否好定位外,更与自动化项目的设计有关,如何设计方便扩展和维护的自动化测试项目对UI自动化测试来说非常重要,而自动化项目的设计离不开扎实的编程基础。 - Selenium/appium API
Selenium(WebDriver)和appium API提供了操作Web/App的类和方法。我们只需使用这些方法即可操作Web页面上的元素或App上面的控件。 - 单元测试框架
如何定义一条测试用例、如何组织和运行测试用例,以及如何统计测试用例的运行结果(总测试用例数、成功测试用例数、失败测试用例数等),都是由单元测试框架实现的。单元测试框架是编写自动化测试用例的基础。
Selenium简介
Selenium经历了三个大版本,Selenium1.0、Selenium2.0和Selenium3.0。Selenium不是由单独一个工具构成的,而是由一些插件和类库组成的,这些插件和类库有其各自的特点和应用场景。
Selenium1.0家族关系如图1-3所示。
Selenium1.0
- Selenium IDE
Selenium IDE是嵌入在Firefox浏览器中的一个插件,可实现简单的浏览器操作的录制与回放功能。 - Selenium Grid
Selenium Grid是一个自动化测试辅助工具。利用Grid可以很方便地实现在多台机器上或异构环境中运行测试用例。 - 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加载到浏览器页面当中,同时,把浏览器的代理设置为HttpProxy。