软件自动化测试框架设计与实践

2013-07-23 03:51汪邦慧
卫星电视与宽带多媒体 2013年11期
关键词:测试数据配置文件脚本

汪邦慧

我们这里说软件测试框架是软件自动化测试的整体解决方案,是一组自动化测试的规范、测试脚本的基础代码,以及测试思想、惯例的集合,所有这一切的出发点是为了减少冗余代码、提高代码生产率、提高代码重用性和可维护性, 保证自动化测试的高效率和高收益。

自动化测试框架一般可以分为上下两个层次,上层是管理整个自动化测试的开发,执行以及维护。它可以管理整个自动测试,包括自动化测试用例执行的次序、测试脚本的维护、以及集中管理测试用例、测试报告和测试任务等。下层主要是测试脚本的开发,充分的使用相关的测试工具,构建测试驱动,并完成测试业务逻辑。

1.1 自动化关键技术简介

自动化测试的核心就是对象识别技术。脚本录制的主要目的是采集对象信息并生成相应的脚本。回放的过程就是根据这些信息进行对象的识别和执行相应的脚本。

对象识别本质是根据关键属性来确认对象,然后在该对象上执行相应的操作。如下图所示:

1.2 自动化测试框架的作用

●减少冗余代码、提高代码生产率、提高代码重用性和可维护性。提高开发速度,提升测试代码的执行效率。

●提高软件代码质量,同时引入重构概念,让代码更干净和富有弹性。

1.3 自动化测试框架的主要类型

●数据驱动测试框架

数据驱动测试是测试脚本从数据文件(数据池,CVS文件,Excel文件等)中读取输入和输出数值并载入到录制的或手工编写的脚本变量中的一种框架。在这种框架里,输入数值和输出数值都使用变量。测试数据包含在数据文件里而不是在脚本中被硬编码。不同的数据文件对应不同的测试用例。在这种模式下数据和脚本分离,脚本的利用率、可维护性大大提高。

●关键字驱动或表格驱动测试测试框架

关键字驱动和表格驱动测试在是数据驱动基础之上,进一步提高自动化测试的灵活性和扩展性的框架解决方案。在关键字驱动框架下,除了要设计应用程序的测试数据表,还要生成一个关键字数据表。这个关键字包含了程序的特性,或者是有关程序的操作。

基于UI功能的自动化测试

图形用户界面(Graphical User InterFace, GUI)就是使用图像,输入的文字,带有图标的计算机界面。GUI可以让用户通过图标和鼠标与计算机进行交互,而不是在命令行中输入文本。 一般来说,应用程序(包括桌面程序和web应用)有一些基本的界面控件, 如窗口, 消息对话框, 菜单, 按钮, 复选框, 组合框, 列表框, 文本输入框, 组选框, 树形视图, 浏览器, 日期选择控件等。它们有些是属于Windows桌面应用程序, 有些是属于Web DOM对象。

所有软件的指令都通过这些控件以事件或消息的形式传递给后台处理程序。自动化测试脚本的开发过程就是一个工具模拟人工操作的过程。人员要通过工具去操作(录制), 工具要能“学习”并掌握这个过程(对界面控件的识别能力),最终能够独立完成测试(回放)。

2.1 利用HTML DOM编程接口实现UI自动化测试

HTML DOM(HTML Document Object Model)文档对象模型定义了访问和处理HTML文档的标准方法。所有的WEB浏览器都内嵌了DOM解析技术,包括IE和FireFox等。要改变页面的某个元素或节点,浏览器中的JavaScript就需要获得文档中所有元素进行访问来获得每个对象的入口。这个入口,连同对HTML元素进行添加, 移动, 改变或移除的方法和属性,都是通过文档对象模型来获得的(DOM)。

我们来看下,如何用HTML DOM接口来实现在百度的首页(见下图)上完成自动搜索。

“文本输入框”源码:

“百度一下按钮”源码:

如果想通过DOM接口来完成自动搜索的过程,则VBScript代码如下。以下代码保存在VBS文件里, 双击运行。

Set WshShell=WScript.CreateObject("WScript.Shell")

Set ie=CreateObject("internetexplorer.application")

ie.visible=1

ie.navigate("http://www.baidu.com")

Do while (ie.busy=True)

wscript.sleep 1000

Loop

Set docRoot=ie.Document

docRoot.getElementById("kw").value="163"

docRoot.getElementById("su").click

DOM对象接口就是对WEB UI实施自动化测试的技术基础, 理论上,只要获得DOM的根节点,依次遍历,就可以对根下所有的对象进行操作了。但它的缺点是过于低层,需要自动化测试开发人员对DOM非常的精通,而且要开发大量的遍历函数,才能完成一个基本功能的操作。

2.2 QTP测试工具

QTP(Quick Test Professional)是HP公司提供的自动化测试工具,其脚本语言为VBScript, 目前最新版本为11。 主要为GUI自动化测试提供解决方案。 QTP提供了VB Object, Windows Object, Web Object等对象接口, 生成的VB Script脚本好具有可读性好,面向对象等优点。

使用QTP录制百度搜索的操作, 生成的脚本如下:

QTP在录制的过程中, 捕捉页面上的元素,录制生成了4个QTP对象(如下图)。这些对象以树状的组织形式存储在QTP的对象库里。每个对象的属性存储了此对象的相关信息,对象的层次关系代表对象在界面上的隶属关系,即DOM的层次关系。

当脚本回放时, QTP会从对象库中读出对象的属性, 按对象层次结构, 依次与页面上的各个元素进行比较。如果匹配成功则执行QTP脚本里的动作, 完成回放, 否则,脚本将会报错, 停止运行。

因此,可以看出QTP是在HTML DOM的基础上封闭了一套强大的QTP对象, 使得用户对DOM的操作更加直观和方便。

2.3 QC简介

QC(Quality Center)是HP公司的一个基于 Web 且支持测试管理的所有必要方面的应用程序。QC测试流程包括四个阶段(指定需求,计划测试,运行测试,跟踪缺陷)。

指定需求阶段, 您可以创建一个“需求树”,用于定义您的总体测试需求, 针对需求树中的每个需求主题, 创建详细的测试需求列表; 计划测试阶段, 创建“测试计划树”, 向计划树中添加每个测试的基本定义, 对于确定要自动化测试的, 使用测试工具创建测试脚本; 运行测试阶段, 计划测试执行并将任务分配给测试人员, 自动或手动执行测试集中的测试;跟踪缺陷阶段, 可以添加缺陷,查看新缺陷, 修复打开的缺陷。

QTP + QC + 测试数据管理工具 框架实例

测试管理平台: 管理脚本的开发;管理脚本的执行;管理脚本的维护;管理测试的任务; 管理测试的报告

Quick Test Professional (QTP):读取测试数据及全局环境变量;生成测试脚本 (对象识别); 执行测试脚本 (脚本回放);报告测试结果

测试数据管理工具(JAVA):从数据库提取自动化测试数据;将测试数据存入测试数据管理文件;多线程并发提取数据

Excel(测试数据驱动): 保存测试数据 (输入参数);保存测试结果 (输出参数)

XML(全局环境配置): 保存全局环境变量

构建测试数据文件实例

建立外部测试数据文件(Test_Data.xls)。QTP脚本需要从此配置文件里读取测试数据,需要将输出参数写回该配置文件。实现脚本与测试数据的分离。

此数据文件包含三张表(General, SQL, Other)。 第一张表(General)存放全局性的配置信息(如数据库连接串,站点URL,是否“下载测试时所需动态链接库文件”标志等);第二张表(SQL)存放所有QTP脚本需要读取的测试数据和需要保存的输出参数;第三张表(Other)保存一些其它的信息。一般情况下脚本开发人员需要使用“SQL”表。在该表内定义输入参数的名称(供脚本读取),定义输出参数的名称(供脚本写入),相应的SQL(供脚本运行此SQL,从DB里自动获取测试数据)。如下面的图片所示:

管理测试数据工具研发实例

通常对于大型项目的回归测试来说, 一般自动化测试数据比较多;有的时候,测试数据需要实时从数据库里提取, 这时候就需要有方法在启动脚本前能够快速的准备好测试数据,因为QTP本身对多线程支持的不是很好,所以可能需要开发另外的多线程的工具来支持快速的获取测试数据。这很重要,不然手工维护大量的测试数据将会是令人沮丧的一件工作。

可以将该配置文件存于MQC的固定路径下(自动化回归测试脚本\通用\下载全局配置文件),在QC里建立测试集的时候,“下载全局配置文件”脚本应该首先被选中运行,脚本运行后,该配置文件将被下载到测试机上(c:\temp\目录)供QTP使用。

研发工具工作流程的基本思路为:读取测试数据配置文件(Excel) → 加载配置文件中的SQL语句到内存 →查询SQL需要连接的数据库的类型 →连接对应的数据库(并发) → 执行SQL查询(并发) → 返回查询结果(并发) →将结果写入数据配置文件(Excel)→关闭数据库连接、关闭系统文件连接

脚本的复用实例

为提高QTP脚本的复用度, 尽可能将常用功能以函数库的形式提供出来,或二次封装常用的函数接口以方便调用,或编写常用的Action供别的脚本调用。基本上可以将代码大致分成三类,如下图所示:

6.1 构建底层库函数实例

6.2 构建公共库模块脚本实例

“登录脚本”:用于登录系统

“退出脚本”: 该脚本用于退出系统

“获取订单脚本”: 该脚本用于从页面获取订单号

脚本规范实例

●在脚本最前面加上基本信息: IE版本,QTP版本,项目名称,脚本编写人, 脚本创建时间,脚本修改时间,修改说明,输入参数,输出参数,功能描述, 调用库函数说明,调用共享对象库说明,调用场景恢复文件说明,调用存在的Action说明,更改默认Action的名称,业务流程说明,其它说明。举例如上。

●输入,输出参数: 原则上,所有的输入参数需要定义在配置文件内(Test_Data.xls)供脚本读取; 所有的输出参数需要保存入配置文件内(Test_Data.xls)供其它脚本视需要读取。

●检验点: 一般情况,脚本里应该需要加上必要的校验点; 业务完成后,需要在页面上对业务结果进行校验; 有订单产生的,需要在数据库里校验订单是否竣工。

●常量命名规范: 常量的命名应该全部用大写,使用"_"作为单词间的分隔符,单词尽量使用全名称. 如: Public Const MSG_EMPTY_ROW As String = "有空行存在"。

●变量命名规范: 变量命名大小写:尽量使用错落有致的大小写字母命名变量,错误的命名如STRNAME,正确的命名如strName.用标志性的前缀来指明一个变量的数据类型,如:strName, intQuantity, blnFound, dteNow, objCurrent。如果是一般的临时性变量定义,应该尽可能地简单 (如for循环:for i=0 to 5).

●参数命名规范: 参数命名的原则是全部用小写,如果参数包括两个或两个以上的单词时,首单词字母小写,其他单词首字母大写,如stepName、stepDescription。

●函数命名规范: 动词+名词,动词必须小写,后面的名称首字母大写,如getMaterialCode; 当函数名称不足以表达其功能时,应使用在函数头部加上让调用者足够明白的注释。

●缩进: 必须严格执行缩进,变量声明块不缩进,实现块必须保证全部缩进; 对于基本的控制结构来说,必须要有缩进,如IF、DO、WITH、FOR、WHILE块。

猜你喜欢
测试数据配置文件脚本
掌握颜色查找表的魔力
从Windows 10中删除所有网络配置文件
用软件处理Windows沙盒配置文件
互不干涉混用Chromium Edge
测试数据管理系统设计与实现
自动推送与网站匹配的脚本
基于烟花爆炸优化算法的测试数据生成方法
基于自适应粒子群优化算法的测试数据扩增方法
举一反三新编
捕风捉影新编