梁展鹏,冯燕宽,罗剑武,陈泫文,李婵丽,宋佳
(1.工业和信息化部电子第五研究所,广东 广州 511370;2.工业装备质量大数据工业和信息化部重点实验室,广东 广州 511370)
现代社会处于数据信息时代,大数据、物联网、云计算和人工智能等新一代IT技术的快速发展和广泛应用对软件行业产生了巨大的影响,软件质量进一步地受到重视,这给软件测试工作带来了新的挑战和机遇[1]。
自动化测试技术是软件测试行业中最高端的技术之一,可实现以程序测试程序、以运行脚本代替手工黑盒测试、以脚本代码表达测试思维的方式。其涵盖各式各样的测试类型,常见的类型包含以下几种:功能自动化测试、接口自动化测试、代码扫描、漏洞/安全扫描和性能测试等。自动化测试技术的优势包括:回归测试更方便、可靠,可运行更多、更繁琐的测试,并且快速、高效,可在多环境下测试等。
在功能自动化测试的过程中,执行自动化测试依赖测试脚本,脚本依赖代码,在自动化测试团队开发脚本代码时,经常会遇到各种各样的问题,例如:测试脚本命名没有统一规范,无法较好地区分;对象库命名和层级没有统一规范,在编写时,造成一定的困难;测试结果不清晰,无法查看重要步骤的结果;测试脚本中变量、类、对象和函数的命名和使用不规范,导致难以阅读和修改,维护的成本大大地增加。要从根本上解决这些问题,就需要定义一系列合适的规范,形成规范集,就是指自动化测试框架。本文将一款CS架构的质量管理软件作为被测软件,选取目前在测试工具市场上占主流地位的自动化测试工具——HP Unified Functional Testing(UFT One),以设计一个适合CS架构的自动化测试框架。
HP公司于2012年12月发布了一个侧重于功能的回归自动化测试工具——(QTP:Quick Test Professional)11.5的新版本,并将其更名为统一功能 测试(UFT:Unified Functional Testing),以VBScript为内嵌语言,录制后可以自动地生成VBScript脚本,用于功能测试和回归测试自动化的统一功能测试,下面介绍其常用的功能[2]。
录制与回放是UFT的开关,开始录制之后,工具录制测试人员的关键操作,停止录制后自动生成VBScript脚本,可以直接回放,大大地减少一些基本业务代码的编写,录制生成的代码表面看起来很规整,但存在难以维护和占内存较大的问题。录制功能更多的是新人学习时的利器,想要应用在实际项目中,还需自动化测试框架的支持。
UFT有以下两种视图可用于编写脚本。
a)关键字视图(KeyWord View)
可用于创建和查看录制生成的代码步骤,录制完成后,测试人员在被测软件上执行的每个步骤,在关键字视图中记录为一行,包含主要的4列:对象(Item)、方法(Operation)、值(Value)和自动生成的描述语句(Documentation),这样可以轻松地查看与维护,质量管理软件的“FMECA表管理”的脚本代码如图1所示[3]。
图1 关键字视图示例
b)专家视图(Expert View)
它不像KeyWord View,需要每个步骤为一行,而是可以多行去运行一个步骤,但必须定位到业务操作的对象,并以操作对象的业务行为基准。简单地说即与多数IDE工具一样,是一个可以直接编写代码的视图,其中也包含补全语法(Complete Word)、多行同时编辑和智能提示(Intellisense)等功能,质量管理软件的自动“登录”的脚本代码如图2所示,执行测试时的界面如图3所示。
图3 自动化测试中被测软件的界面
对象库是指管理测试对象的库,能够查看和修改对象描述、添加和删除测试对象,并将它们拖到测试或组件中以添加新步骤,自动化测试脚本都是针对应用程序中对象的操作,所以对象库的管理是UFT的核心,对象库的对象及属性如图4所示[4]。
图4 对象库的对象及属性
UFT中的对象分为两种:测试对象和运行时对象。测试对象是指保存在UFT本地对象库的对象,图2中WpfWindow(“登录CARMES”).WpfEdit(“用 户 名”).Set“UserName”中 的“登 录CARMES”/“用户名”就是测试对象;运行时对象是实际测试中,被测软件运行时的控件对象。
图2 专家视图示例
本文阐述的是一种适合CS架构的混合型测试框架,结合了数据驱动测试框架和关键字驱动,将测试用例、测试数据、业务脚本、函数库、对象库、测试日志、测试结果、测试需求和配置文件的存放和调用都进行了管理[5-7]。下面以“质量管理软件”作为测试案例,展开自动化测试框架的介绍。
自动化测试过程中会产生一系列需要管理的文件,按图5所示进行存放和管理[8]。目录名称的解释如下所述。
a)Driver
存放测试驱动,驱动是整个框架的核心,下一级是UFT的测试文件,后缀为.mts,运行时可以生成其他同级目录结构,具有调用通用函数库、载入项目测试需求和关联脚本库等作用。
b)CommomLib
存放通用函数库,下一级文件后缀为.vbs,将UFT默认方法多封装一层,为每层函数注册了日志和报告功能,其中包含常用行为函数(输入、点击和选择)和业务行为函数。
c)TestPro
存放项目测试需求,首先将测试软件的子模块进行划分,写入Excel,通过在“是否测试”字段中写入1或0,表示此次需要测试的具体模块,可供测试驱动调用。
d)TestScript
存放测试业务脚本,以测试业务功能为主的脚本,也是自动化团队日常编写的内容,可供测试驱动调用。
e)TestScriptHistory
此文件用于存放历史脚本记录。
f)TestObject
其次将伞形集果筒套在果树上,将搭扣扣紧之后安装在支撑座上,再利用4个绳钩其中一端勾住伞形集果筒的4个固定孔,另一端勾住果树枝干,防止伞形集果筒产生倾斜。
存放测试对象库文件,包括tsr和xml格式。
g)TestCase
存放测试用例,一个测试用例对应一个系统子模块,名字与子模块一样,可供测试驱动加载调用。
h)TestLog
存放测试日志。
i)TestPic
存放测试截图。
存放测试报告。
k)Recovery
存放场景恢复文件。
测试脚本如果没有与测试用例分离,会变得难以阅读和维护[9]。在本框架中,将用例与脚本分离,存放在不同的目录下。使用VBScript作为开发语言开发测试脚本,调用测试用例,测试脚本把测试用例动态加载进UFT进行测试,记录测试结果,再将执行结果存入测试用例中,记录每一条测试用例的执行结果。
建立对象库的方法至少有4种:
1)通过录制将操作对象添加到对象库;
2)描述性编程;
3)在对象库中将对象添加到本地;
4)使用15.02及以上版本的对象标识中心功能。
我们使用第三种,将应用程序的对象添加之后,规范对象的命名、层级,并重复识别对象,直至修改标识属性达到对象标识明显,测试人员使用时方便认出,UFT能依据标识属性迅速地找到对象,即通过高亮对象能迅速地找到对象,才算是完成对象的添加。
在实际应用中,我们会遇到一些对象属性是动态的,这一类动态的对象会导致我们高亮对象或者回放时,UFT报“找不到对象”这样的错误;解决的方式是为对象中动态变化的属性设置正则表达式,快速地找到对应的对象。
质量管理软件中的模块与新建项目属性的层级关系如图6所示,质量管理软件中的模块对象及新建项目属性的对象如图7所示。
图6 模块与新建项目属性的层级关系
图7 模块对象及新建项目属性的对象
设计模式具有非常重要的作用,间接性地规范了代码的编写,不但可以提高代码的可读性,更重要的是可以使脚本更加高效、灵活和易以维护,将此类代码存入函数库中,在编写脚本时可以轻松地调用。
VBScript存在一个根本问题,它不像面向对象的高级语言一样,自身就适合众多的设计模式,它存在明显的劣势和差距,但可以间接地通过脚本优化来实现设计模式的应用,本文将介绍单例模式与工厂模式的完美结合应用。
a)单例模式
属于创建型模式,提供了一种创建对象的最佳方式,单例模式可以很好地管理对象的生命周期,集中控制对象的实体,Excel对象的单例设计模式如图8所示。
图8 Excel对象的单例设计模式
b)工厂模式
通过使用一个共同的接口来指向创建和初始化的对象,但在VBScript中有一个缺陷,就是不断地实例化对象,而对单个对象没有管理,造成对象混乱的情况。这时就需要单例模式来管理每个对象,将两种设计模式结合会更适合VBScript。工厂模式中结合单例设计模式的代码如图9所示。
图9 工厂模式中结合单例设计模式的代码
通过RegisterUserFunc函数,把写入日志和写入报告函数注册到UFT自带的方法内,使每次测试都能生成我们需要的日志和报告。用法如下:
RegisterUserFunc“WpfEdit”“set”“WriteLog_WpfEdit”,“WpfEdit”指对象,“set”指方法,“WriteLog_WpfEdit”指自定义的写入日志类或自定义的写入报告类,写入日志类和写入报告类可以将日志和报告存在对应的目录中。
本文所描述的自动化测试框架,其对象库针对CS架构控件,其函数针对CS架构控件方法,是适用于CS架构软件的一种自动化测试框架。笔者在实际应用后,认为单单靠工具的简单录制/回放功能并不能达到自动化测试的要求。自动化测试框架是做好自动化测试的基础,其可提高测试脚本的代码质量和减少自动化脚本的维护,使用自动化测试框架可以完成健壮、高效和规范的自动化测试脚本,更好地实施自动化测试。