一,自动化测试框架的发展
基于界面的软件自动化测试框架和工具的发展大致经历了三个阶段:
1)简单的录制/回放:由工具录制并记录操作的过程和数据形成脚本,通过回放来重复人工操作的过程。在这种模式下数据和脚本混在一起,几乎一个测试用例对应一个脚本,维护成本很高。而且即使界面的简单变化也需要重新录制,脚本可重复使用的效率低。
2)数据驱动 (data driven)的自动化测试:从数据文件读取输入数据,通过变量的参数化,将测试数据传入测试脚本,不同的数据文件对应不同的测试用例。在这种模式下数据和脚本分离,脚本的利用率、可维护性大大提高,数据的覆盖率也较高,但受界面变化的影响仍然很大。
3)关键字驱动(keyword driven)的自动化测试:关键字驱动测试是数据驱动测试的一种改进类型,它将测试逻辑按照关键字进行分解,形成数据文件,关键字对应封装的业务逻辑。 主要关键字包括三类:被操作对象(Item)、操作(Operation)和值(value),依据不同对象还有其他对应参数。关键字驱动的主要思想是:脚本与数据分离、界面元素名与测试内部对象名分离、测试描述与具体实现细节分离。数据驱动的自动化测试框架在受界面影响方面,较数据驱动和录制/回放有明显的优势,可根据界面的变化更新对应的关键字对象,而不用重新录制脚本。
二,关键字驱动
关键字驱动的自动化测试(也称为表驱动测试自动化),是数据驱动自动化测试的变种,可支持由不同序列或多个不同路径组成的测试。它是一种独立于应用程序的自动化框架,在处理自动化测试的同时也要适合手工测试。关键字驱动的自动化测试框架建立在数据驱动手段之上,表中包含指令(关键词),而不只是数据。这些测试被开发成使用关键字的数据表,它们独立于执行测试的自动化工具。关键字驱动的自动化测试是对数据驱动的自动化测试的有效改进和补充。
这种自动化测试的模型主要由核心数据驱动引擎、组件函数、支持库和应用映射表组成。自动化测试首先由初始脚本开始执行,这个脚本把高层测试表传递给高层驱动器,高层驱动器在处理这些表的过程中,遇到中层测试表后就调用中层驱动器,中层驱动器处理中层表时也作类似的处理。当低层驱动器处理低层表时,它尝试着使应用与测试保持同步。当低层驱动器遇到对某一个组件的低层关键字组件时,它判断这个组件的类型并调用相应的组件函数模块来处理这个指令操作。所有这些元素都要依靠映射表中的信息,它是自动化测试模型和被测应用程序的桥梁。支持库主要完成一些文件处理,日志记录和邮件发送等等的功能。
关键字驱动的自动化测试框架是对数据驱动的逻辑扩展,用关键字的形式将测试逻辑封装在数据文件中,测试工具只要能够解释这些关键字即可对其应用自动化,它的核心思想可以概括为三个分离。
1)界面元素名与测试内部对象名的分离 在被测应用程序和录制生成的测试脚本之间增加一个抽象层,它可以将界面上的所有元素映射成相对应的一个逻辑对象,测试针对这些逻辑对象进行,界面元素的改变只会影响映射表,而不会影响测试。
2)测试描述与具体实现细节的分离,把测试描述和测试的具体实现细节分离开来。测试描述只说明软件测试要做什么以及期待什么样的结果,而不管怎样执行测试或怎样证实结果。这样做是因为测试的实现细节通常与特定的平台以及特定的测试执行工具有着密切的联系。这种分离使得测试描述对于应用实现细节是不敏感的,而且有利于测试在工具和平台间的移植。
3)脚本与数据的分离 最后,可以把测试执行过程中所需的测试数据从脚本中提取出来,在运行时测试脚本再从数据存放处读取预先定制好的数据,这样脚本和数据可以独立维护。
以上这三个分离各司其职、互相独立,最大程度地减少相互之间的影响。从关键字驱动的思想可以看出,该种测试框架不仅实现了将数据和脚本相分离,而且实现了测试逻辑和数据的分离,大大提高了脚本的复用度和维护性,从而更大限度地实现了测试工具的自动化。
三,数据驱动
数据驱动的自动化测试框架是这样的一个框架,从某个数据文件(例如ODBC源文件、Excel文件、Csv文件、ADO对象文件等)中读取输入、输出的测试数据,然后通过变量传入事先录制好的或手工编写的测试脚本中。其中,这些变量被用作传递(输入/输出)用来验证应用程序的测试数据。在这个过程中,数据文件的读取、测试状态和所有测试信息都被编写进测试脚本里;测试数据只包含在数据文件中,而不是脚本里,测试脚本只是一个“驱动”,或者说是一个传送数据的机制。
数据驱动脚本
数据驱动脚本就是那些和应用程序相关联的脚本。这些脚本通过录制或手工编写写进自动化工具私有的语言,然后对其中的变量赋予合适的数值,作为测试数据的输入。这些变量作为一些关键应用程序输入的媒介,使脚本能通过外部的数据来驱动应用程序。
可变数据,硬编码组件标志
这些数据驱动的脚本经常包含硬编码的数据,有时是一些窗口组件中非常脆弱的识别字符串。出现这种情况时,脚本很容易由于程序的更改而失去作用。
高度技术化的、重复的测试设计
数据驱动脚本的另一个共同特点就是,所有在测试设计上所作的努力最终都体现在自动化工具的脚本语言中,或者复制到手工和自动化测试脚本中。这意味着每个和自动化测试开发或执行有关的人必须对测试环境和自动化工具的编程语言非常精通。