面向高校教学应用与科研开发建设通用软件自动化测试环境
2014-05-30赵志升
李 静,赵志升
(河北北方学院信息科学与工程学院,河北 张家口075000)
1 引 言
当今自动化测试技术正在日新月异地发展,各类测试工具不断推出。在软件领域,软件测试已成为与软件开发过程并驾齐驱的重要技术。作为重要的新兴计算机技术,软件测试开始纳入到高校的教学和学科研究领域,正在逐步形成计算机专业的一门独立学科。
在软件业较发达的国家,绝大多数软件产品的认定需要第三方测试介入,由专业软件测试人员运用一定的测试工具对软件质量等进行检测[1,2]。目前在国内,软件测试基本上仍然停留在由软件公司自测阶段,测试技术与测试手段千差万别,自动化测试的普及和发展较为滞后与分散。谋求一个相对通用的、稳定可控的自动化测试体系,有效地对软件测试过程进行管理、监控和评估,是当前国内软件企业面临的问题。
鉴于软件测试技术在国内的发展现状,为更加适应这门专业技术在高校的教学与研究过程,推进学科化发展,需要建设一个较为完备和实用的软件测试环境,并实现典型过程的自动化测试与监控管理。
2 软件自动化测试系统
一个完整的自动化测试系统包含以下几个部分[3,4]:(1)自动化测试框架;(2)测试脚本以及测试数据管理;(3)测试脚本的执行管理系统;(4)测试结果的显示与分析系统。由于性能测试、压力测试的要求,通常需要构建一个分布式的测试环境,在这个测试环境中,需要多种测试平台 (例如:多台Windows,多台Linux等)。
IBM公司开发的STAF(software testing automation framework)是目前主流的自动化测试框架之一,提供很多应用程序编程接口以及支持用户自定义服务。STAX(staf execution engine)是STAF的一个执行引擎,基于XML技术,属于STAF的一项外部服务,提供了一个强大的GUI监视应用程序,可自动完成整个测试的动态监控过程。STAF+STAX框架具有广泛的平台和语言的支持,是一种分布式远程调用体系,适合各类B/S或C/S结构的应用系统。由于STAF提供了一个较完备的基础框架,基于该框架所提供的服务,仍需跟随行业具体的需求二次自主开发自动化测试系统。
3 通用型软件测试环境建设规划
针对高校教研需求,需要建设一个基于先进测试技术的自动化测试系统,较好地管理自动化测试过程,完成网络环境下针对不同被测对象的测试任务;同时探索一个自动化软件测试体系的公用模式,推进自动化测试环境的通用性。作为通用型系统,其拓扑结构适合于网络环境的分布式测试应用,可以方便移植到企业平台。
经过大量的调研分析,拟应用STAF+STAX框架提供的一些服务与执行功能,实施二次开发构建一个跨平台的通用型分布式软件自动化测试系统。该系统由两部分组成:一部分是主控软件系统,另外一部分是供自动化测试运行的测试环境。主控软件系统安装在一台服务器上作为主控机,通过STAF和其它基于TCP/IP的网络协议统一控制管理其它测试机和被测设备 (除主控机外的其它测试机和被测设备统称为测试床)。系统本身需要易于安装、调试和统一管理,并且测试对象不能局限于操作系统平台。测试目标包括教研环境中前置机不同的服务申请、操作系统的运行状态、特定应用软件的运行与评估、学生自主设计内容 (实验内容、课程设计、毕业设计等)的运行与自动监测、教学管理、教务管理、科研管理系统运行监测等案例。这就要求首先从资源管理角度尽量简化和模糊被测目标本身及其所运行的测试平台,将这些信息集中到统一格式的测试环境文件中去。
结合实际需要和理想的测试系统模型,将系统设计为B/S模式:在主控机上搭建测试框架,并集中后台管理功能与前台控制功能;局域网内任何一台可以访问主控机的用户端都可做为测试机,只需通过浏览器访问主控机即可获得系统管理和控制界面,完成整个测试过程。这样的设计使得用户端不局限于使用什么样的操作系统,方便在C/S模式的局域网 (如高校教学机房)中搭建跨Windows与Linux等平台的测试环境。主控机上的后台模块可同时管理和控制测试环境中的测试机或测试设备,并可将测试任务分布在不同的测试机器和设备上,从而实现分布式自动化测试。
4 自动化软件测试过程实施
测试人员通过浏览器登录服务器的用户界面UI后,可手动与自动实施测试任务执行、管理测试脚本、收集并分析测试结果、生成统一格式的测试报告并传输至邮件服务器等完整的测试流程,并监控测试过程。
4.1 系统功能
系统需要实现的功能包括:(1)集中统一的硬件设备管理;(2)用户与管理员共同的Web UI;(3)测试用例管理以及特定用途测试用例的机动性选择;(4)灵活便捷的任务提交机制;(5)测试任务执行过程监控与记录;(6)测试报告生成与传输、格式转换;(7)资源管理;(8)命令行接口 (command line interface,CLI)编程界面。
为实现系统设计,主要从以下几个方面展开研究与实施。(1)测试脚本编写。并建立测试函数库,为自动化测试搭建软件环境。(2)对被测对象中常用的一些方法进行封装,作为一些方法库 (或API),提高代码重用。(3)实现测试用例管理和测试计划管理的功能,使用户可以任意选择需要的测试范围并触发自动化测试。这部分功能包括:测试用例的查询、添加、修改,以及测试用例信息管理;测试作业提交、调度、安排、以及分配资源;测试报告应该包含哪些信息,测试报告的生成、管理和发布。(4)测试运行控制。为实现测试任务的自动运行,使用STAF提供的一些通用的运行控制机制,包括串行运行、并行运行与重复运行等服务。(5)系统网络拓扑结构与运行环境管理。可通过测试配置文件管理测试平台及测试用例,并借助STAX的执行功能完成管理与运行监控。(6)探索自动化测试系统的通用模型,以及进一步的发展方向。
为使用STAX的自动任务执行与监测功能,系统的测试配置文件 (如测试用例文件、测试组管理、测试任务提交、资源配置等文件)均为STAX可执行的XML文件,用来定义测试工作流,描述进程与STAF命令调用。
系统后台管理模块实现测试用例管理、测试计划管理、测试任务管理、测试过程管理、测试报告管理以及资源管理。这些组件使用Perl编写,在Perl脚本中直接调用STAF服务,实现关键性的远程进程/命令调用、文本分析、文件传输与处理、消息控制等功能。Perl是最古老的应用在Unix平台上的脚本语言之一。目前作为主流脚本广泛应用于网络环境开发,可被各种主流的操作系统版本很好地支持运行,并可以方便地向不同操作系统移植。
4.2 系统配置
基于Linux平台对STAF以及Perl的良好支持,并且考虑在教学环境中的稳定和可实现的分布式跨平台特性,测试管理系统构建在Ubuntu(10.10以上版本)平台上。Ubuntu是时下流行的Linux操作系统的一种发行版,对硬件要求较宽泛,提供图形用户界面与行界面 (即Shell环境)。Shell(简称SH)是Unix/Linux的命令解释系统,同时又是脚本语言。SH脚本可以被STAF支持执行。
基于安全管理和易实现角度考虑,系统管理模块的开发、系统功能维护与调试均在Shell提供的行界面下完成。系统的前台用户界面与后台管理控制的启动命令也均可在行界面下执行。这些实现系统管理控制功能的模块使用SH脚本编写。
需在服务器上安装STAF 3.4.5和STAX 3.4.5及以上版本。服务器软件使用 Apache Tomcat 7.0.23。使用JavaScript编写用户界面。XML的编辑器可使用任何的文本编辑器。
4.3 系统架构
为实现通用的测试流程,管理网络环境下不同类型的测试对象,建立一个模式简捷的测试架构[7],如图1所示。
图1 系统架构图
1)测试管理:包括测试用例 (test case)管理和测试计划 (test set)管理模块。测试用例是最基本的运行单元。一个测试用例包含一个或多个手工测试计划步骤,并指定其可运行的测试平台。
测试人员向系统中添加测试用例会在后台生成一个XML格式的文件来描述测试用例信息,包括测试用例代码 (TCID)、测试用例概要、手工测试步骤说明、自动测试脚本的信息、文件等。被测系统通常会有很多的测试用例文件,需要按功能把它们很好地分类,分为多级目录存储。
测试计划是由用户通过UI选择出来的若干功能相关的测试用例集合,由测试用例管理模块生成XML格式的测试计划文件。文件中包含手工执行和自动执行的功能相关联的测试用例列表。
2)任务管理:测试任务 (test job)是测试人员提交的一个测试运行。若干针对特定构建、平台与计划表的测试计划被提交形成测试任务。测试任务创建与提交均可通过UI完成。任务管理模块负责生成XML格式的测试任务文件,统一放置在固定目录下。
测试任务的调度执行是一个并行执行的过程,系统中可以同时运行多个任务。需要建立测试任务执行的控制程序,在Perl脚本程序中调用STAF的并行控制服务实现。测试任务调度与执行过程的进程控制如图2所示。
图2 任务进程控制
为实现任务并行,每一个具体测试任务由一个线程来执行。执行线程处理测试环境、测试用例绑定,并准备驱动程序。
系统的执行引擎主要基于STAX的基础服务功能设计。在任务监控管理环节上需要调用STAX Job Monitor的功能,来驱动测试任务的执行、实现测试过程监控与结果呈现。通过UI可监测到任务的运行过程。也可以在Shell行界面上运行STAX命令STAXMon.jar打开STAX提供的界面实现监控管理。
测试任务运行结束后需要生成和提交测试报告,保存测试日志。系统提供审查测试日志和审查针对测试配置与测试任务的测试报告的功能。测试报告来源于测试结果的收集。可通过测试脚本中定义的返回值和打印信息来确定测试结果。在系统中,每一个测试任务生成一个HTML格式的测试报告文件与一个日志文件。测试结果主要呈现了测试过程 “通过”、“失败”、“受阻”3类信息,并在日志信息中详述。
在任务提交之前,可在UI中描述发件人信息,并指定邮件管理服务器的地址,以发送测试报告与日志。
3)资源管理:自动化测试环境下的资源管理包括设备管理、拓扑管理和测试床管理。
设备管理模块负责管理所有自动运行的、独立的物理设备。例如测试机、服务器、交换机等。设备管理数据由XML文件描述。
拓扑管理模块生成XML格式的拓扑文件,为系统描述测试用例需要的测试环境。每个测试用例都需被关联到一类拓扑中,同组的测试用例拓扑结构相同。测试拓扑文件描述测试环境中独立的资源之间相互连接的关系、针对特定测试环境的连接规则及额外信息等。每一类拓扑对应一个参数。测试用例的开发人员仅需知道一个指定拓扑的该项参数值,即可制定相应的测试环境。可通过UI在测试用例信息中选择相应的拓扑参数。
在测试任务执行过程中系统将为一个给定的测试拓扑动态分配一个物理测试床。测试床是一个测试拓扑的实例,是测试任务运行的实际环境。随着一个测试任务的提交,测试床同时被确定。描述测试床信息的XML文件包括指定的服务器、交换机,以及被测产品的信息等。可通过UI上资源管理窗口添加测试用例关联的测试设备信息,由资源管理模块加入到相应的测试床文件中。
4.4 自动化测试过程
基于上述体系结构,一个完整和通用的自动化测试过程如图3所示:
图3 自动化测试过程
5 测试系统的通用性能实现与分析
上述体系结构设计与测试环境文件设置、测试过程安排使系统具备维护管理灵活和便于移植与改良的特性,是研究和探索自动化测试平台通用性的结果。为了增强系统的通用性能,测试用例的面向对象设计以及丰富合理的测试用例库管理也是重要问题。这方面做了4步尝试:
1)设计良好的目录结构进行测试用例的管理。
2)建立系统的公共函数库 (类库),为测试平台开发与测试用例的开发提供通用功能的API。
3)建立通用测试库,包含测试用例脚本开发可重用的公共功能。类中提供很多方法供编写测试脚本的人员来调用。脚本编写者可以从库中选取合适自己的通用功能脚本或进一步编辑。测试人员通过系统授权也可将新的测试用例载入通用测试库中。
4)建立STAF库。STAF本身提供了大量的综合功能,测试人员可以直接使用它们开发测试脚本。为更加方便应用,本系统使用了一些STAF的常用功能,如STAF中的PROCESS服务用的比较多。使用到的这些STAF服务要在系统中保留。随着STAF的进一步完善可以更多地应用其功能。另外系统中也大量用到了STAF提供的支持Perl语言的一些API。
自动化测试需要一个完备和通用的系统,这个系统所提供的功能,应该是所有的自动化测试都会用到的公共的需求。通过本系统设计和建设,希望对各种不同对象的自动化测试抽象出一些共用的方法,探索一个通用的抽象模型,适合于搭建高校的教学测试环境,促进软件测试技术在高校的学科化发展;同时可以应用于其它自动化测试领域,例如面向生产计算机网络安全软件或硬件产品的行业应用。系统的体系结构具备很明显的优势,测试用例也可以宽角度编写和收集。
总之,建设一个较为通用的自动化测试环境,需要抽象出测试过程所依存的一个公有模型,以此建立的测试框架才具备通用性能和进一步开发的前景。这也是本文所阐述的测试环境建设的侧重点和需要进一步探索的目标。
[1]王英龙,张伟,杨美红.软件测试技术[M].北京:清华大学出版社,2009:15-78.
[2]梁博,许珊,徐歆恺.测试有道——微软测试技术心得[M].北京:电子工业出版社,2009:26-90.
[3]李昂,王海峰,黄江海.(美)Lydia Ash.Web测试指南[M].北京:机械工业出版社,2004:1-83.
[4]自动化测试体系整体解决方案探讨[EB/OL].http://www.51testing.com.2009-02-18.
[5]高蒙.基于STAF和 XML配置文件的跨平台自动化测试部署[EB/OL].http://www.Linuxeden.com.2009-11-20.
[6]李夏安,陈志泊.基于STAF的软件自动化测试系统的研究和实现[J].计算机应用,2009,29(03):699-701.
[7]刘杰.软件测试中的测试用例复用技术[EB/OL].http://www.51testing.com.2012-10-22.