引子
写在最前面: 目前自动化测试并不属于新鲜的事物, 或者说自动化测试的各种方法论已经层出不穷, 但是, 能够明白自动化测试并很好落地实施的团队还不是非常多, 我们接来下用通俗的方式来介绍自动化测试......
首先我们从招聘岗位需求说起. 看近期的职业机会, 提到 "软件测试工程师", 基本上都有关于自动化测试的要求. 例如:
了解 selenium,appium 或者其他自动化测试框架
至少熟悉一门面向对象开发语言, 有一定的代码功底优先
熟悉 Java 或者 python, 有一定的测试自动化经验和代码阅读能力
了解接口集成测试, 会使用 JMeter,Postman,SoapUI 等接口测试工具
等等, 上述内容不再一一列举. 突然自动化测试遍地开花, 好像测试工程师的自动化测试能力成为了标配一般. 本文就从自动化测试的要求入手, 简单的进行自动化测试扫盲, 争取让各位在一分钟之内了解自动化测试.
那么我们就从 "自动化测试" 五个字来剖析.
测试
测试: 这个我们熟悉. 最经典的一个解释 "程序测试是为了发现错误而执行的过程." 这个来自于 G.J.Myers 的经典著作《软件测试的艺术》的定义, 给我们展示了测试的本质: 过程.
测试是为了发现软件的错误, 而执行的过程, 这个过程可以是以下内容:
运行被测试的软件, 执行软件的功能
运行其他工具, 去检查软件的内部和外部
总而言之, 是一个过程, 执行的过程. 接下来就一张最常见的测试示意图:
师去把软件的所有功能遍历一遍, 该测试工程师通过鼠标, 键盘, 麦克风, 手机屏幕触控等, 把软件所有的功能, 全部遍历了, 这个叫做什么? 熟悉测试的童鞋明白, 这就是传说的 "手工目测" 呀, 这是 "人肉测试".
我们好好的画这张图, 实际上是这样的.
自动化
到这里, 结合上面的说法, 自动化测试就是让被测试的软件自己运行起来, 执行软件的功能; 或者就是让其他的工具自己运行起来, 去检查软件的内部和外部.
既然测试是一个过程, 那么自动化测试, 就是自动的执行的过程.
接下来我们探讨的一个核心的问题: 自动. 什么叫做自动呢? 让机器自己动, 就是自动. 让机器按照人类的要求, 把软件的所有功能遍历一遍, 这是自动化.. 这样说会不会清晰一点?
重点来了, 机器. 让机器去动, 这可不是 "吃鸡" 哦, 这是人类命令机器去操作. 不知道童鞋们有没有思考过, 机器怎么知道人类的要求? 上面的例子, 测试主管只要告诉测试工程师, 命令传达就完成了. 可是人类直接的沟通, 远比人机沟通容易啊.
首先, 机器听不懂 "人话", 无论中文, 英文......
其次, 机器默认会的 "汇编语言", 应该是绝大部分的童鞋不会, 并且短期掌握不来吧.
好吧, 用 "编程语言". 是时候拿出我们的另一张图了:
机器学习一个编程语言, 轻松和简单到令人发指的地步: 安装上去, 机器就学会了. 好在人类学习编程语言也不是特别难的的事情. 看来这个可行.
有了编程语言, 就有了人机交流的桥梁, 剩下的事情, 是帮机器挑选工具. 做对应的测试, 就需要找到对应的工具, 这样自动化就自动起来了. 能到这里, 我希望各位童鞋了解了基本的 "自动" 原理.
同样, 好好的画这张自动化测试的示意图:
然后我们介绍各种常见的工具, 来继续讨论自动化测试. 进一步探讨之前, 我们先看看测试的常用分类. 这里不同的分类维度下, 我们可以分为不同的测试, 这里我们认真分析一下.
从软件测试的实践过程看: 单元测试, 集成测试, 确认测试, 系统测试, 验收测试......
从软件测试的方法策略看: 白盒测试, 黑盒测试, 灰盒测试......
从软件测试的测试视角看: 功能测试, 性能测试, 兼容性测试, 安全测试, 探索性测试......
从软件测试的技术程度看: 手工测试, 自动化测试, 测试开发......
以上这些维度下的分类, 只有一部分测试可以通过 "人肉测试" 的 "手工目测" 完成, 剩下的其实从广义概念上, 都是需要机器来完成的. 我们把这一部分测试抽取出来: 系统测试 - 黑盒测试 - 功能测试 - 手工测试. 不可否认的讲, 这条线是目前软件测试从业者的重点覆盖范围, 该范围之外的地方, 便是自动化测试的用武之地.
自动化测试
接下来我们探讨一下主流的自动化测试方案, 无一例外, 都有人机沟通的编程语言, 加上机器操作的工具来组成.
功能自动化测试
VBScript + QTP(HP UFT), 商用功能自动化测试方案
Python/PHP/Java/C#/JavaScprit/Ruby + Selenium/Appium + 单元测试框架, 开源功能自动化测试方案
这里我们多介绍一点, Selenium/Appium 本身不能算是测试工具, 而只是机器用来操作浏览器的工具, 并且这个工具能听懂多种语言:
Java,C# 这两个重 (zhòng) 语言
Python,Ruby 这两个脚本轻语言
PHP,JavaScript 这两个专门处理 web 的语言
工具外加指定的语言, 可以让机器来操作浏览器, 但是到此时还无法做到测试, 于是才需要每个语言自己的单元测试框架, 来一起完成这个功能自动化测试方案的构建.
此外, 业界还一种暂时临时的方案, 就是 Python 2 + Robot Framework + Selenium Library 插件 + 单元测试框架 构成的一种测试方案, 这个方案笔者不是非常推荐, 主要基于两点:
理念: 这是一种基于关键字的方案, 那么关键字是 QTP(HP UFT)的特长, 并不是 Selenium 的本意
技术: Python 2 终究是要退出历史舞台的, 如果从零开始做自动化测试, 还是直接入手 Python 3 吧, 然而 Robot Framework 不支持 Python 3......
Python/Java/C#/JavaScprit/Ruby + Gauge, 又一款开源的功能自动化测试方案
Thoughtworks 的基于 BDD 理念的自动化测试工具
Gauge 本身就是完整的测试方案
Gauge 是从需求分析师 (BA) 到测试工程师 (QA) 都覆盖的测试方案
Java/Python + Macaca, 阿里巴巴的功能自动化测试方案, 缺点是文档少
JavaScript + TestCafe,DevExpress 的开源功能自动化测试方案
pure node.JS - TestCafe 不使用 Selenium, 并且不需要插件来在实际浏览器中运行测试. 它建立在 node.JS 的顶部, 因此它与现代开发工具集成和工作良好
无需额外的设置或配置 - TestCafe 是所有设置后立即运行测试 NPM install
完整的测试工具 - 使用单个启动命令, TestCafe 启动浏览器, 运行测试, 收集结果并生成报告
JavaScript + Postman, 免费的 Web 接口功能自动化测试方案
Groovy + SoapUI, 开源的 Web 接口功能自动化测试方案
性能自动化测试
Java/C + HP LoadRunner, 商业版性能测试方案
Java + JMeter, 开源版性能测试方案
Python + locust, 开源版性能测试方案
这里, 我们借用一张别人的图, Martin Fowler, 敏捷开发方法的创始人之一, 他借用金字塔的概念来展示测试的层次.
事实上, 自动化测试覆盖了从 UI (功能测试)到契约 (接口测试) 以及底层代码方法 (单元测试) 的整个过程, 要想很好的掌握自动化测试, 那么的确需要以下三种领域的经验积累:
编程语言, 面向对象编程优先, 因为大量的开源技术方案, 都是基于面向对象的编程方式
第三方测试工具和测试框架, 这些主要通过官网的文档学习
测试的理念与设计, 工具和语言, 只是测试的手段, 如何准备测试数据, 如何设置测试的检查点与测试步骤, 这些决定了测试的成败
此外综合的 前端与服务器后端技术, 是测试执行的保障. 加油吧童鞋们, 一分钟过去了么? 那么你现在了解到自动化测试了么? 如果依旧有疑问, 欢迎联系笔者进一步的沟通交流, 1363134450@qq.com.
接下来的写作安排:
基于 Selenium 的测试方案构建与测试过程中踩过的坑(系列文字)
基于 Gauge 的自动化测试方案(系列文字)
基于 Postman 的 Web 接口测试
基于 SoapUI 的 Web 接口测试
基于 requests Python 库的 Web 接口自动化测试构建(系列文字)
基于 JMeter 的性能测试方案(系列文字)
基于 Python locust 库的性能测试方案
基于 HP LoadRunner 的性能测试方案(系列文字)
来源: http://www.jianshu.com/p/2bbb83e42382