“自动化测试”有时也叫“测试自动化”,由两部分组成,“自动化”和“测试”,所以我们要理解自动化测试,就必须理解“自动化”和“测试”。
何为自动化:
在理解自动化之前,我们首先来看看如果没有自动化,人类是怎样与计算机进行交互的:我们对计算机的直接操作无非就是鼠标和键盘,使用鼠标定位并操作对象(如窗体上的一个按钮或网页中的一个超链接),使用键盘输入文本(如文本框或地址栏)。那么如果我们要将鼠标定位和操作与键盘输入让计算机自动完成,原理非常简单:用一个程序来记录鼠标的移动轨迹和各种事件(如单击,双击,右鍵,滚动等),将记录键盘事件,然后顺序地把这些记录的操作回放一遍,便实现了自动化。众所周知的自动化软件“按键精灵”,便实现了上述自动化过程。
但是我们很容易地发现,单纯只是记录鼠标和键盘操作很容易由于定位和坐标变化的问题导致运行时出错,所以我们需要寻找更可靠的自动化技术。一种基于对象识别的自动化技术应运而生,将使自动化更加可靠,基于对象识别的自动化技术将不再依靠鼠标来进行定位,而是直接通过某一个对象的属性来对当前系统运行中的窗体进行搜索,找到某个对象后对该对象执行合理的操作。如通常大家使用的宏或AutoIt便属于这类工具。对象识别是自动化技术的基础,同时也是自动化测试的基础。
测试的本质:
作为一个软件测试人员,我们应该思索这样一个问题:测试的本质是什么?大家能想到的很多术语或许都可能成为测试的本质,如需求,业务,测试用例,缺陷等,看上去都像是测试的本质,但是最后都有可能被推翻。笔者在从事测试工作的过程中也从未停止过思考,并得出了测试的本质:期望结果。这看上去或许有点牵强,那么让我们尝试回答以下几个问题:
1. 理解需求,分析需求项的目的是为了什么?
2. 如果理解需求是为了理解解软件的业务流程,那么搞清业务流程的目的又为了什么?
3. 如果搞清业务流程的目的是为了设计出高效的测试用例,那么设计测试用例的目的又是什么?
4. 如果设计测试用例的目的是为了找到更多的缺陷,那么我们判定缺陷的标准是什么?
5. 答案是:期望结果与实际结果不符。
如果我们能理解测试的这一“本质”,我们对软件测试如何开展的思路将会更加清晰,单纯从技术角度上来说,我们的测试要做的最重要的工作就是搞清楚一个软件的功能块的期望结果是什么,不管用什么方法,只要能把期望结果理解清楚,我们的测试便成功了一大半。
自动化测试的本质:
到目前为止我们应该已经理解了自动化技术的基本原理,也理解了软件测试的本质,那么这两者的结合体“自动化测试”又该如何理解呢?自动化测试的本质可归纳为三类十一个字:
1. 对象识别
2. 验证点
3. 数据驱动
“对象识别”技术是自动化测试的基础,任何自动化测试工具如果不能实现对象识别,将不成其为自动化测试工具。那么光能实现对象识别还不行,它只符合自动化的要求,不符合测试的要求,如果要达到测试的要求,则必须使用“验证点”,自动化测试工具中的验证点其实就是期望结果,有时也叫“检查点”。
如果能实现对象识别和验证点功能,便可作为自动化测试工具使用,这是由自动化和测试的本质所决定。但是这样的自动化测试工具将很难应用在实际测试过程中,比如我们要验证一个计算器的功能,我们要验证1+2,要验证1.1+2.2,还得验证1-2或者1.1-2.2等很多测试用例,这个自动化过程的操作都一样,只有计算数和运算符不一样,那么我们便需要使用“数据驱动”(或叫“参数化”)来实现对相同操作的各种测试用例进行测试。理论上来说,数据驱动不是必需的,没有数据驱动也可以完成自动化测试,读者可以在第二章中发现我们并未使用数据驱动,但并不影响我们进行自动化测试。但是现实情况是我们必须使我们的自动化测试脚本足够灵活,没有数据驱动将导致开发和维护测试脚本的成本非常高,甚至高过手工测试的成本。
(声明: 本文版权归作者个人所有, 如需转载, 请注明出处, 如有需要, 请联系QQ: 15903523 (强子))