1. 概述
随着Internet和Intranet/Extranet的快速增长,Web已经对商业、工业、银行、财政、教育、政府和娱乐及我们的工作和生活产生了深远的影响。许多传统的信息和数据库系统正在被移植到互联网上,电子商务迅速增长,早已超过了国界。范围广泛的、复杂的分布式应用正在Web环境中出现。Web的流行和无所不在,是因为它能提供支持所有类型内容连接的信息发布,容易为最终用户存取。
在基于Web的系统开发中,如果缺乏严格的过程,我们在开发、发布、实施和维护Web的过程中,可能就会碰到一些严重的问题,失败的可能性很大。而且,随着基于Web的系统变得越来越复杂,一个项目的失败将可能导致很多问题。当这种情况发生时,我们对Web和Internet的信心可能会无法挽救地动摇,从而引起Web危机。并且,Web危机可能会比软件开发人员所面对的软件危机更加严重、更加广泛。
在Web工程过程中,基于Web系统的测试、确认和验收是一项重要而富有挑战性的工作。基于Web的测试与传统的软件测试不同,它不但需要检查和验证是否按照设计的要求运行,而且还要测试系统在不同用户的浏览器端的显示是否合适。重要的是,还要从最终用户的角度进行安全性和可用性测试。然而,Internet和Web媒体的不可预见性使测试基于Web的系统变得困难。因此,我们必须为测试和评估复杂的基于Web的系统研究新的方法和技术。
而自动化测试就是希望能通过自动化测试工具或其他手段,按照测试工程师的预定计划进行自动的测试,目的是减轻手工测试的劳动量,从而达到提高软件质量的目的。自动化测试的目的在于发现老缺陷。而手工测试的目的在于发现新缺陷。自动化测试涉及到测试流程、测试体系、自动化编译、持续集成、自动发布测试系统以及自动化测试等方面的整合。也就是说让测试能够自动花,不仅是技术、工具的问题,也是一个公司和组织的文化问题。首先公司要在资金、管理上支持,其次要有专门的测试团队去建立适合自动化测试的测试流程、测试体系;其次就是要把源代码从受控库中取出、编译、集成、发布可运行系统、进行自动化的单元测试和自动化的功能测试的过程。
自动化测试可以减少或消除一些手工测试中的重复和烦琐,节约测试所必需的时间和提高测试的一致性和可重复性。自动化测试可以提高产品质量并尽可能在软件生命周期的早期发现缺陷。
并非任何测试自动化都可以起到预期效果,只有好的自动化测试体系才能扬长避短,达到建立自动化测试体系的初衷,在质量保障方面有所作为。否则测试自动化可能会由于其建立和维护等方面的负担造成延误工期、成本浪费,甚至最终被完全放弃。
2. Web自动化检测系统的设计原理
如何解决自动化测试过程中遇到存在的问题呢?本文主要通过提出基于关键字驱动的检测方法,这是通过相应的关键词、关键字进行数据检测的方法:
2.1 界面元素名与测试工具定义对象名的分离
可以在被测程序和生成的测试脚本之间增加一个模型层,它可以将界面上的所有元素映射成对应的逻辑对象,测试针对这些逻辑对象进行,界面元素的改变只会影响映射表,而不会影响测试。
2.2 执行动作与具体实现细节的分离
把测试执行的动作和测试具体实现细节分离开来,用关键字描述测试执行动作,只说明该步测试执行什么动作而不管测试工具具体怎样执行。这样做是因为测试的实现细节通常和特定的测试执行工具有着密切的联系,比如QTP 和RTF。这种分离使得关键字对于实现细节不敏感,有利于测试在不同工具间的移植。
2.3 测试脚本与测试数据的分离
最后,可以把测试执行过程中所需的测试数据从脚本中提取出来,在运行时由测试控制模块从数据库中读取预先定制好的数据,这样测试脚本和测试数据可以独立维护。
采用上述关键字驱动自动化测试的思想,使执行动作、测试对象和测试数据相互独立,最大程度的减少相互之间的影响,彻底解决了使用GUI 自动化测试工具产生的问题
3. 软件自动化测试框架
图1 web检测自动化框架
该测试框架从逻辑上自底向上分为4 层,如图1 所示,分别是:由测试对象和识别脚本构成的模型层,由标签库和测试数据库构成的数据层,由控制文件构成的控制层以及由用例描述原语(ASL)构成的应用层。本文以自动化测试工具QTP 为例,搭建具体的测试框架。
3.1 模型层
在框架最底部测试的方法,主要是通过对于模型层测试工具所识别的GUI控件对象以及对象的识别脚本构成,模型层负责将GUI 控件对象和识别脚本分别组织并以友好的方式提供给数据层的标签库模块使用。
(1) 对象识别脚本
在使用QTP 录制时,QTP 自动记录GUI 对象并生成测试脚本。该测试脚本包含了对GUI 对象的识别、执行动作和测试数据,使得测试脚本难以重用和维护。本文在测试框架模型层中只保留对GUI 对象的识别脚本,而把测试数据放到数据层、执行动作放到控制层管理,从而实现了相互之间的分离。
(2) GUI 控件对象
在测试框架模型层中,通过对界面元素的分析(UI 分析)并和QTP 对象识别机制相映射来组织GUI 控件对象。UI 分析是从被测系统界面入手,记录页面层次并把该页面中的GUI 对象以要素的形式记录到数据库中,以达到结构化、层次化管理对象的目的。
3.2 数据层
数据层由标签库和测试数据库构成,标签库保存要素名和识别脚本的映射关系,测试数据库保存具体的测试数据。
标签库是针对某一个应用建立的,它可以通过学习而扩展,其中包含了图形用户界面交互的完整细节,包括GUI 界面和对象。本文通过打标的方式来对具体交互细节进行封装:首先利用QTP 录制待测系统的执行过程,获取各测试对象的脚本;然后对录制脚本进行打标,实现要素名和测试对象的对应;最后对打标后的脚本进行分解并提取识别脚本和标签,生成标签库。
3.3 控制层
控制层为自动化测试框架提供了一个控制入口,测试工程师利用控制层实现具体的测试意图:测试工程师可以对测试的执行顺序根据需要进行调整,使得测试不必按录制顺序回放;可以通过关键字设置GUI 对象的执行动作,实现各种操作;可以通过要素名匹配测试数据。
3.4 应用层
应用层通过用例描述原语(ASL)具体实现测试的执行:ASL 首先获取测试案例的某一控制文件,得到该测试逻辑并解析出测试数据标志和标签;然后通过要素标签在标签库中查找相应脚本,匹配测试数据库中测试数据,组合生成测试工具QTP 可以执行的脚本;最后调用测试工具QTP 实施自动化测试。
4. Web产品检测技术的框架实现
本文主要通过Web产品检测技术的实现过程,来分析如何能够在关键字驱动下进行自动化的检测。例如:在某银行开户流程的测试中,要求对所有对象进行验证,以保证软件质量。假设每个测试对象仅需要测试1 个正例和1 个反例,n 个对象的测试组合就是2n 次。
而利用本测试框架,只在测试开始时建立框架体系,对控件对象识别、打标并生成标签库,对测试规则分析设计出测试用例。通过这种方式使测试逻辑、测试脚本和测试数据相互脱离,在回归测试中仅通过对控制文件的修改就可以对相同功能、不同数据的用例进行测试,同时,测试脚本不关心测试用例,测试的数据和业务逻辑都集成在测试数据表格之中,测试的设计就简化为测试数据表格的设计。
由上述测试实例可以看出,应用关键字驱动技术进行自动化测试,可以把测试工程师从繁琐的重复性劳动中解放出来,也为软件产品提供更为高效的、更为精准的测试,提高产品的竞争力。
参考文献:
[1] 王磊,罗省贤 . 业务流程路径覆盖方法的研究与实现 [J] . 电子测试 ,2009(01):15-19, 52.
[2] 陈越, 刘强, 陈玉健. 基于GUI 的面向对象软件回归测试技术研究[J]. 计算机应用研究, 2006, 23(5): 49-51.
[3] 蔡维德, 白晓颖, 陈以农. 浅谈深析面向服务的软件工程[M]. 北京: 清华大学出版社, 2008: 3-11.