1.分层的自动化测试 2.适合自动化测试的项目 3.如何学习UI自动化测试 4.Selenium简介 5.appium简介
1.分层的自动化测试 测试金字塔,敏捷大师 Mike Cohn 基本观点:我们应该有更多低级别的单元测试,而不仅仅是通过用户界面运行端到端的高层测试。 Martin Flowler 大师在测试金字塔基础上提出分层自动化测试的概念,添加“分层”二字区别“传统的”自动化测试。 所谓传统的自动化测试我们可以理解为基于产品 UI 层的自动化测试,它是将黑盒功能测试转化为由程序或工具执行的一种自动化测试。 分层自动化测试倡导的是从黑盒(UI)单层到黑盒和白盒多层的自动化测试,即从全面黑盒自动化测试到对系统的不同层次进行的自动化测试。 Unit(单元测试)、Service(模块接口测试、Web接口测试)、UI(UI自动化测试、JS自动化测试)
(1)单元自动化测试 单元自动化测试是指对软件中的最小可测试单元进行检查和验证。 整体来说,单元测试交由开发人员去做比测试人员更为合适。测试人员虽然在设计测试用例时考虑更全面,但是其很难做到像开发人员一样熟悉被测代码。而开发人员只需掌握单元测试框架和一些常用的测试方法,即可写单元测试,而且定位bug时更方便。
(2)接口自动化测试 Web应用的,大体分为两类:模块接口测试和协议接口测试。前者适合开发去做,后者开发测试人员皆可。 模块接口测试,主要测试程序模块之间的调用与返回。它主要强调对一个可实现完整功能的类、方法或函数的调用的测试。 协议接口测试,主要测试对网络传输协议的调用,如 HTTP/SOAP 等,一般应用在前端和后端开发之间,以及不同项目之间。(SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换。使得运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。)
(3)UI自动化测试 UI 自动化测试以实现手工测试用例为主,可降低系统功能回归测试的成本(人力成本 和时间成本)。由部分功能测试用例提炼而来,更适合测试人员去做。 《Google 测试之道》一书中,分为3种测试类型,采用 70%(小测试)、20%(中测试)和 10%(大测试)的比例,分别对应测试金字塔中的 Unit层、Service 层和 UI 层。
2.适合自动化测试的项目 参考以下几点:
- 任务测试明确,不会频繁变动。
- 每日构建后的测试验证。
- 比较频繁的回归测试。
- 软件系统界面稳定,变动少。
- 需要在多平台上运行的相同测试案例、组合遍历型的测试,以及大量的重复任务。
- 软件维护周期长。
- 项目进度压力不太大。
- 被测软件系统开发较为规范,能够保证系统的可测试性。
- 具备大量的自动化测试平台。
- 测试人员具备较强的编程能力。
一般来说,满足以下 3 个条件就可以对项目开展自动化测试。
- 软件需求变动不频繁
- 项目周期较长。
- 自动化测试脚本可重复使用。
3.如何学习UI自动化测试 从三个方面入手 (1)编程语言 Selenium/appium 支持多种编程语言(Java、Python、Ruby、C#、JavaScript 等),针对每种编程语言都开发了相应的 Selenium/appium 测试库。如何设计方便扩展和维护的自动化测试项目对 UI 自动化测试来说非常重要,其离不开扎实的编程基础。 (2)Selenium/appium API Selenium(WebDriver)和 appium API 提供了操作 Web/App 的类和方法。用这些方法即可操作 Web 页面上的元素或 App 上面的控件。 (3)单元测试框架 如何定义一条测试用例、如何组织和运行测试用例,以及如何统计测试用例的运行结果(总测试用例数、成功测试用例数、失败测试用例数等),都是由单元测试框架实现的。单元测试框架是编写自动化测试用例的基础。
4.Selenium简介 Selenium 经历了三个大版本,Selenium 1.0、Selenium 2.0 和 Selenium 3.0。Selenium 不是由单独一个工具构成的,而是由一些插件和类库组成的,这些插件和类库有其各自的特点和应用场景。 (1)Selenium 1.0
- Selenium IDE,是嵌入在 Firefox 浏览器中的一个插件,可实现简单的浏览器操作的录制与回放功能。
- Selenium Grid,是一个自动化测试辅助工具。利用 Grid 可以很方便地实现在多台机器上或异构环境中运行测试用例。
- Selenium RC(Remote Control),是 Selenium 家族的核心部分,支持多种不同语言编写的自动化测试脚本。Selenium RC 分为 Client Libraries 和 Selenium Server 两部分。Client Libraries 主要用于编写测试脚本,负责控制 Selenium Server 的库。Selenium Server 负责控制浏览器行为。Selenium Server 主要分为三部分:Selenium Core、Launcher 和 Http Proxy。Selenium Core 就是一堆 JavaScript 函数的集合,有了这些函数我们可以用程序对浏览器进行操作。Launcher 用于启动浏览器,把 Selenium Core 加载到浏览器页面当中,同时,把浏览器的代理设置为 Http Proxy。
(2)Selenium 2.0 简单公式表示:Selenium 2.0 = Selenium 1.0 + WebDriver,WebDriver 可以将其看作 Selenium RC 的替代品。为了保持向下的兼容性,Selenium 2.0 并没有彻底抛弃 Selenium RC。 Selenium RC 与 WebDriver 的工作方式有着本质的区别。 Selenium RC 是在浏览器中运行 JavaScript 应用,使用浏览器内置的 JavaScript 翻译器来翻译和执行 selenese 的(selenese 是 Selenium 命令集合)。 WebDriver 通过原生浏览器支持或者浏览器扩展来直接控制浏览器。WebDriver 是针对各个浏览器而开发的,取代了嵌入被测 Web 应用中的 JavaScript。WebDriver 与浏览器紧密集成,支持创建更高级的测试,避免了 JavaScript 安全模型导致的限制。
Selenium 与 WebDriver 合并的原因:为何把两个项目合并?一部分原因是WebDriver 解决了 Selenium 的缺点(例如,能够绕过 JavaScript 沙箱),另一部分原因是 Selenium 解决了 WebDriver 存在的问题(例如,支持广泛的浏览器)。还有一部分原因是 Selenium 的主要贡献者觉得合并项目是为用户提供最优秀框架的最佳途径。
(3)Selenium 3.0 简单用公式表示:Selenium 3.0 = Selenium 2.0 ?Selenium RC,Selenium 3.0只支持 Java 8 以上版本、只支持 IE 9.0 以上版本。在 Selenium 3.0 中,Firefox 浏览器和 Chrome 浏览器一样,在使用前需要下载和设置浏览器驱动。
(4)Selenium IDE Selenium IDE 有两个版本,旧版的 Selenium IDE 是基于 Firefox 浏览器扩展的,它提供了比较完备的自动化功能,如脚本录制/回放、定时任务等。但旧版的 Selenium IDE 不支持 Firefox 新版本支持的 API;故有了新版的 Selenium IDE,可以同时支持 Chrome、Firefox 以及其他浏览器。
5.appium 简介 appium 是当前移动平台上主流的自动化测试工具之一。Selenium 是当前主流的 Web UI 自动化测试工具。appium 与 Selenium 之间是有继承关系的。appium 的寓意是:移动端的 Selenium 自动化测试工具。 appium 是一个开源自动化测试工具,支持 iOS 和 Android 平台上的原生应用、Web应用以及混合应用。 原生应用:是指那些用 iOS 或者 Android SDK 开发的应用(App)。
SDK,软件开发工具包,辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做SDK。 SDK 和 API 是具有关联性的两种东西,可以把SDK想象成一个虚拟的程序包,在这个程序包中有一份做好的软件功能,这份程序包几乎是全封闭的,只有一个小小接口可以联通外界,这个接口就是API。
Web 应用:是指可以使用移动浏览器(如 iOS 上的 Safari 和 Android 上的 Chrome)访问的应用。 混合应用:是指用原生代码封装网页视图,原生代码和 Web 内容交互的应用。比如微信小程序。
更重要的是,appium 是一个跨平台的测试工具,它允许测试人员在不同的平台(iOS、Android)使用同一套 API 编写自动化测试脚本,这大大增加了 iOS 和 Android 测试套件之间代码的复用性。
appium 与 Selenium appium 类库封装了标准 Selenium 客户端类库,为用户提供常见的 JSON 格式的 Selenium 命令,以及额外的移动设备控制相关的命令,如多点触控手势和屏幕方向等操作。 appium 服务器定义了官方协议的扩展,为 appium 用户提供方便的接口来执行各种设备动作,例如,在测试过程中安装/卸载 App 等。 appium 客户端 API 只是增加了部分操作,在 Selenium 客户端的基础上进行了简单的扩展,因此它们仍然可以用来运行通用的Selenium 会话。
|