第28卷第4期2009年8月飞行器测控学报Journal of Spacecraft TT&C TechnologyVol.28No.4Aug.2009基于数据操作的自动化测试技术研究与应用*郭巍1,2,龚兵1,张武光1(11西安交通大学#陕西西安#710043;21西安卫星测控中心#陕西西安#710043)摘要:首先分析了数据驱动实时软件自动化测试中存在的问题,提出了基于数据操作的改进关键字驱动脚本自动化测试方法,并在此基础上实现了航天测控软件系统的自动化测试平台。
关键词:数据操作;改进关键字驱动脚本;数据结构描述;测试自动化中图分类号:TP311文献标识码:A文章编号:167425620(2009)0420048205Research and Implementation of Test AutomationBased on Data ManipulationGUO Wei1,2,GONG Bing1,ZHANG Wu2guang1(1.Xi.an J iaotong University,Xi.an,Shaanxi Province710043;2.Xi.an Satellite Control Center,Xi.an,Shaanxi Province710043)A bstract:Following analysis of problems in data2driven realtime software testing,the paper presents an improved keywords2 driven script automation framework.The paper also intr oduces application of a data2driven space TT&C software testing platform in XSCC based on automatic framewor k.Keyw or ds:Data Manipulation;Impr oved Keywords2Driven Script;Data Structure Description;Test Automation0引言测试自动化技术作为传统测试理论和实际工程应用的重要纽带,日益彰显重要作用。
IBM在发布自动化测试工具IBM Rational的技术白皮书中明确指出成功测试之处在于:及早测试、连续测试和自动化测试。
自动化测试可减少测试工作量,提高测试效率,准确获得测试数据和实测结果[1]。
典型的航天测控软件(以下简称测控软件),大部分是基于事件的作业调度与数据驱动式软件,软件处理对实时性、容错性和精度要求较高,较少需要人工交互操作。
此外,测控软件处理的测控数据,多数为具有特定制约关系的一组数据诸元构成的复杂结构,因此,航天测控实时软件测试具有复杂数据模拟、实时数据生成等要求。
由于缺乏有效的数据自定义和操作支持,成熟的商用自动化测试工具在面向GUI 应用中凸显的快捷、便利等优点无法发挥,很难胜任测控软件的测试需要。
因此在繁琐的数据驱动测控软件测试中,决定测试效果的主要是测试用例的自动化设计和执行、测试数据的产生自动化以及完备合理性,因此本文提出了测试数据的格式定制与完备化自动生成、测试用例设计与运行控制脚本的自动化2大研究内容。
1改进的关键字驱动测试脚本测试脚本是由自定义的脚本语言编写的一段程序,测试脚本用来描述一个测试过程或测试包。
测试用例的脚本化,一方面使得测试过程自动化执行成为可能,另一方面大大简化了回归测试工作,进而增强了测试用例的复用性[2]。
IBM Rational Robot能够录制用户GU I操作并生成脚本供回归测试,但这种脚本绑定了测试操作和数据,同时由于其针对特定GUI 应用,造成它的可移植性和重用性较差,因此必须在研究用例脚本技术基础上,形成适应航天测控软件的测试脚本运行机制。
流行的测试脚本技术主要有以下几类:线形脚本、结构化的线形脚本、共享脚本、数据驱动脚本、关键字驱动脚本[2]。
关键字驱动脚本技术在导航脚本的控制下,读取基本测试数据和关键字对象数据,遇到关键字时则调用对应的支持脚本,同时传递对象和数据,通过导航脚本和关键字支持脚本*收稿日期:2009-02-02;修回日期:2009-02-23第一作者简介:郭巍(1974-),男,硕士,高工,主要从事航天测控软件质量保证与测试技术研究。
第4期郭巍,等:基于数据操作的自动化测试技术研究与应用的嵌套运行,实现了测试用例自动运行。
可以看出,这种测试操作和数据的剥离以及关键字驱动用例自动化执行思想比较适合航天测控软件测试。
但是由于高实时性和数据格式特殊且多样化等要求,造成该技术应用存在2大缺陷:一是测试用例执行过程中需要多次访问多个数据文件,无法满足高实时性要求;二是由于测试数据存储在特定文件中,测试人员不可能人工穷举测试数据并编入数据文件,故无法解决测试数据自动生成和完备覆盖数据值域的要求。
针对上述问题,本文提出了基于数据操作改进关键字驱动脚本方法。
所谓数据操作,就是把数据作为测试动作应用的基本对象,并以此为出发点,把对数据驱动的软件测试活动转化为一系列数据操作,通过不同的数据操作体现被测软件的应激状态,进而达到软件测试的目的。
从上文可知,关键字驱动脚本通过导航脚本控制,分别读取关键字支持脚本和数据文件的固有机制带来了执行效率问题,因此可以合并导航脚本和关键字支持脚本,即提高关键字脚本所处的层次,也就是说,把脚本执行控制字和数据操作关键字合并,形成一种真正的面向数据操作的脚本语言,同时为了解决文件数据固定问题,使用另一种脚本来描述多样的数据结构,同时把对数据的不同加工方式融入脚本描述中,这样就解决了数据结构定制和完备产生的困难。
同样,为避免对测试用例脚本在执行过程中嵌套解释数据定义脚本带来的效率问题,首先采用X ML脚本来描述数据结构,并使用数据库和XML相结合,把数据描述转化为数据表存放,同时在测试用例脚本中增加数据生成关键字(语句),使得用例执行伊始,按照用户给出的数据格式定义和产生方式描述,加工好所需的数据供后续数据操作(关键字)语句使用,即使在后续操作中需要修改数据内容,也无需重新读取数据描述脚本。
通过这样2大措施改进的关键字驱动脚本,在运行效率和数据产生灵活性、完整性上都具有更强的实用性,尤其适合测控软件的测试。
改进的关键字驱动脚本语句主要分为2大类:执行控制语句和测试数据操作语句。
其中控制语句主要包括:start、end、for、if,then,else、sleep等语句,其解释过程比较成熟,本文不作描述。
测试数据操作语句包括:数据格式自定义、数据自动生成(包括正常数据和异常数据)、数据发送与接收(进程间和分布网络)、数据检查比对等语句,主要用于控制测试数据的加工、发送等,语句关联定义了用户定义的数据结构与数据操作。
测试用例执行过程中,脚本引擎自动解析各类关键字语句,对数据操作关键字,读取用户设定的参数,按照不同的数据操作执行数据加工、发送、接收、比对等工作,同时为了解决被测软件间的逻辑控制,可定义消息等待和接收关键字以控制测试脚本的执行。
一方面,改进的关键字驱动脚本技术大大简化了测试人员对测试数据的操作,用户可以方便地使用这种类自然语言定义对被测软件进行激活,并接收和评估被测系统的数据和逻辑、时序反应;另一方面,当出现未定义的数据操作时,可灵活扩充关键字语句集,大大提高了应用的广泛性。
使用该方法可以便利地定义测试数据产生规律,定制产生固定数据、边界数据和函数变化数据及其他异常数据,还可控制对测试数据输入方式、频率,也就是定义对已生成数据的操作。
现在首先介绍对数据的操作。
例如在强度测试或某些性能测试中,测试的目的通常是确认被测对象处理信息的最大能力或满足系统需求的程度,测试过程一般是逐步加大测试数据输入的频率,直到被测对象运行状态处于不正常或处理结果不正确。
在每次加大测试数据输入频率之前,被测对象要经过3种形式的测试,第一种称为/均匀式0测试,即每隔T/X时间向被测对象输入测试数据1次(X为当前每单位时间对被测对象测试的次数,T为单位时间);第二种叫做/集中式0测试,也就是在单位时间T内连续、无间隔向被测对象输入X次测试数据;第三种形式是前2种形式的综合,它把X次均匀分成5段,每段连续、无间隔测试X/5次。
对于这种具有普遍性的要求,只需分别调用data.SendData(flag,time),脚本引擎将传递不同flag取值和时间间隔给相应的关键字语句处理模块,从而解释执行相应的数据发送操作。
图1中给出了某测控软件的测试脚本,描述了对测试数据的操作和控制过程。
首先用户使用下文提出的数据结构定义方法定义具有特定逻辑结构的测控数据DataStructure,而后使用数据方向定义语句DefineDirection定义了通过网络方式发送该数据的操作要求,接着在循环体内使用固定码产生该格式数据,并每间隔2s向指定的网络地址发送该数据。
2基于XML的数据描述脚本测试的关键之一在于,针对某种数据结构格式、按照某种策略产生测试输入数据,然后再通过某种传递方式把产生的数据传给被测对象[3]。
对一个被测对象进行测试一般是产生多组测试数据,而不是一组49飞行器测控学报第28卷图1 改进关键字驱动脚本运行示意图数据。
因此,依靠手工编程或排列组合来产生多组测试数据非常麻烦,商业软件C++T est 、IBM Rational Robot 测试工具仅提供了简单数据生成,但是任意结构格式的数据生成,特别是产生连续的、符合某种规律的、特殊类型的变长结构的测试数据,上述2种工具都无能为力。
测控软件需要处理大量的复杂数据结构,图2给出了一种抽象测量数据的封装格式。
图2 专用数据结构示意图只有实现任意结构数据(固定格式、可变格式及嵌套格式)的自动生成,才能根本解决测控软件自动化测试存在的数据不完备问题。
通过对这些不同格式的数据分析可以发现,不同的数据结构可以看作一些不可再分的数据元按照特定规律的组合,而这种组合关系是可以描述的。
对数据结构的描述就是对接口的格式、属性的详细定义,数据接口层次图见图3。
图3 复杂数据结构层次示意图有些数据项实际具有某种控制结构的作用,称其为控制项,通过在结构描述中增加/控制方式0可解决数据项的重复问题,如数组、重复子结构定义等,同时还可使用算术表达式表示某些数据项占用内存的字节数。
在描述特定结构中不同参数的类型、长度、取值范围、量纲等静态属性基础上,还可以描述该参数的动态变化规律,这就使得用户能够灵活地使用脚本来描述多样化的数据类型,在对数据定义脚本解释基础上也实现了测试数据的自动生成,并满足了充分性要求。