您好,欢迎访问三七文档
用XML存储测试用例雨田(mail:plstudio@163.com)1.背景动态测试通常需要使用测试工具来进行。测试人员在使用工具进行单元测试和集成测试的过程中,往往会遇到以下一些问题:使用的测试工具不能应用于全部被测单元;测试工具使用起来极为复杂,测试效率低下;不同测试工具之间的用例不能通用;创建用例和执行测试工作混杂在一起等等。造成这些问题的一个重要原因是缺乏一个统一的、包容性强的用例存储格式。本文通过对测试用例的分析,提出了一种使用XML文件存储测试用例的方法。希望能够通过应用此方法,降低测试工作量,提高被测单元的包容性以及使用例数据能够跨工具、跨平台共享,并有助于建立测试用例的相关标准。2.测试过程分析用例是在动态测试中使用的,因此首先需要了解动态测试的过程。动态测试通常分为单元测试、集成测试、系统测试等几个阶段,本文主要针对单元测试和集成测试进行研究和分析的。一般情况下,首先要确定被测文件,然后从被测文件中选择一个函数或者过程作为被测单元。接着为这个被测单元创建用例集合。用例创建完毕后,执行用例获取实际的输出,最后将实际输出同用例的预期输出进行比较,如果一致认为通过,否则的话认为不通过。3.数据分析为了有效的存储用例,就要对用例数据进行详尽的分析。文件一般情况下,测试者是对一个文件中的函数或者过程进行测试,文件具有文件名称、存储路径、最近修改时间等基本属性。被测单元文件中的每个函数或者过程称为一个被测单元,一个文件包含有多个被测试单元。被测单元有名称,序号等属性。用例组每个被测试单元中有多个用例组,用例组中包含多个用例。测试可以针对用例组进行,也可以针对用例组中的某些用例进行。用例组有编号、名称、创建日期、执行日期、测试结果等属性。编号:在被测试单元中的唯一标识名称:用例组的名称创建日期:用例组的创建日期执行日期:用例组的执行日期测试结果:根据执行的状态,分为通过和不通过两种。通过是指用例组中所有的用例的测试结果都是通过,否则的话用例组的状态即为不通过。用例用例有用例号、用例类型、创建日期、最近执行日期、测试类型、测试结果等属性。用例号:在被测单元中用例的唯一编号。测试类型:按照是否分析被测单元中的源码的相关执行信息,将测试分为黑盒测试和白盒测试。创建日期:创建用例的日期。最近执行日期:最近一次执行用例的日期。用例类型:按照是否仅仅对当前函数进行测试,将用例分为单元测试用例和集成测试用例两种。单元测试用例:是指该用例仅仅用于对当前函数进行测试,不测试函数体内的被调用函数。集成测试用例:是指该用例不仅对当前函数进行测试,也对当前函数体内的被调用函数进行测试。测试结果:根据执行的情况分为未执行、通过、未通过、不通过、未正常执行等几种结果。未执行:指用例还没有被执行过。通过:指用例正常执行完成并且需要比较的预期输出与真实输出相一致。未通过:指用例执行到比较预期输出与真实输出阶段时候异常退出。不通过:指用例正常执行完成但是需要比较的预期输出与真实输出不一致。未正常执行:指用例在执行被测单元的过程中异常退出。输入数据输入数据包括数据号、输入类型、名称、数据类型、输入等属性。数据号:输入数据的唯一编号;名称:输入数据的名称;数据类型:输入数据的数据类型;输入类型:包括参数输入、全局变量输入、控制台输入、被调用函数输入等几种。参数输入:参数输入指通过当前函数的参数输入到函数体中全局变量输入:指在函数体中使用了全局变量的值。参数输入和全局变量输入在所有输入类型中是出现频率最高的两种。控制台输入:是指从电脑显示屏等终端设备中获取的输入。主要是通过控制台输入语句来实现的。被调用函数输入是指在函数体中通过调用函数获取了值。输入:具体输入的内容。输出数据输出数据包括数据号、输出类型、名称、数据类型、预期输出、实际输出、是否一致等属性。数据号:输出数据的唯一编号;名称:输出数据的名称;数据类型:输出数据的数据类型;输出类型:包括指针参数输出、数组参数输出、全局变量输出、返回值、控制台输出。指针参数输出:通过函数的指针参数传出数据数组参数输出:也是通过地址输出数据,所以同指针参数类似。参数输入和全局变量输入在所有输入类型中是出现频率最高的两种。全局变量输出:是指在函数体中对全局变量赋值后,全局变量以新值被本函数或者其他函数使用。返回值:函数的返回值。控制台输出:是指从在函数体中将信息输出到电脑显示屏等终端设备上,主要是通过控制台输出语句来实现的。总体来说,用例相关信息呈现树形结构,一个文件包括多个被测单元,一个被测单元包括多个用例组,一个用例组包括多个用例,一个用例拥有多个输入数据,包括多个输出数据。4.数据存储格式由于用例相关数据呈现出树形结构,而描述树形结构数据是XML语言所擅长的,同时,由于XML文件具有跨平台特性,以及开发方面具有广泛的支持性等因素,所以选择用XML文件作为用例存储的的载体,以特定的XML标记来描述用例的相关信息。文件、被测单元、用例组、用例、输入数据、输出数据等信息相对简单,仅需定义好相关的标记及属性名称即可。而输入数据的具体输入值及输出数据的预期输出是用例存储的核心内容,也是最复杂的部分,下面着重分析一下输入值和预期输出的表示方法。输入值和预期输出均是对数据的存储。根据数据的类型以及输入/输出类型,数据表示方法分为直接表示法和间接表示法。直接表示法直接表示法即“输入”的值就是输入的数据。如果输入数据的数据类型是int、char,float等简单数据类型,使用直接表示法。“输入”的值即输入的数据。间接表示法间接表示法即“输入”的值是具体输入数据的一种载体(通常是XML),具体输入数据要从载体中获取。如果输入数据的数据类型是数组、指针等复杂类型,使用间接表示法,使用XML存储原始数据,如果数据比较复杂,可以根据情况在文件中仍然存储原始数据的载体。下面以c语言为例详细结合具体实例介绍一下如何使用间接表示法存储数据。相对于其它语言,c语言语法较为复杂,因此,以其为例可以代表绝大多数高级语言。对于c语言来说,需要使用间接表示法的数据类型有数组、指针、文件指针、被调用函数输入、控制台输入/输出等几种。数组对于数组来说,在xml文件中逐个罗列数组元素即可。下面的一段xml就存储了int型数组a,它的0号元素是1,1号元素是2,2号元素是3。DataSetDataName=a[0]Type=intValue1/Value/DataDataName=a[1]Type=intValue2/Value/DataDataName=a[2]Type=intValue3/Value/Data/DataSet普通指针根据c语言的语法,先要给指针变量确定一个非指针的相同数据类型的对应变量,先给出对应变量的值,然后在将该对应变量的地址付给指针变量。下面这段xml给通过影射变量pdf_map实现了给int型指针pdf赋值。DataSetDataName=pdfType=intMapVarName=pdf_mapRelation=1Value3/Value/Data/DataSet文件指针使用库函数fopen(…)来实现输入值得表示。下面这段XML实现了给文件指针fp赋值。DataSetDataName=fpType=FILE*Valuefopen(e:\\buaa\\examples\\out\\out.txt,w)/Value/Data/DataSet被调用函数输入只有是单元测试用例,才需要处理被调用函数输入。被调用函数输入也分为直接输入和间接输入两种方式。直接输入:在数据载体中直接写出替代函数。下面这段xml直接在xml中写出calculate_cheapest_fruit函数的替代函数的代码。DataSetDataName=calculate_cheapest_fruitType=fruitMapVarName=Relation=Input_Type=fun_stubValueStyle=codefruitcalculate_cheapest_fruit(){returnapple;}/Value/Data/DataSet间接输入:首先要创建被调用函数的替代函数,要求函数名称、参数、以及返回值都与被调用函数完全一致,然后将其存入文件中。下面这段xml指明了buy_fruit函数的替代函数存储在C:\Testbed\Tbrun\Ggstub.c中。DataSetDataName=buy_fruitType=intMapVarName=Relation=Input_Type=fun_stubValueStyle=fileC:\Testbed\Tbrun\Ggstub.c/Value/Data/DataSet控制台输入/输出为了能够处理在控制台的输入/输出的数据,在测试中,控制台输入和输出都进行重定向,直接指定控制台输入/输出的重定向文件即可。5.复杂数据的存储示例在实际的测试过程中,会遇到一些比如多重指针、链表等复杂的数据,这些数据实际上是简单数据、数组、指针等类型数据的组合,因此,使用同样的XML标记依然可以表示这些复杂数据。例如下面这段c代码定义了一个单向队列,使用上述方法可以实现对其数据的存储。structprocess{unsignedintpid;intpriority;structprocess*next;};下面这段xml就是对上面那段c代码定义的队列数据存储。在这个队列中,有三个元素,元素1的pid值是3,priority值是3,元素2的pid值是2,priority值是3,元素3的pid值是1,priority值是1。DataSetDataName=current_jobType=structprocessMapVarName=curr_job_mapRelation=1HaveSons=1DataName=curr_job_map.pidType=intValue3/Value/DataDataName=curr_job_map.priorityType=shortValue3/Value/DataDataName=curr_job_map.nextType=structprocessMapVarName=cj_second_job_mapRelation=1HaveSons=1DataName=cj_second_job_map.pidType=intValue2/Value/DataDataName=cj_second_job_map.priorityType=shortHaveSons=0Value3/Value/DataDataName=cj_second_job_map.nextType=structprocessMapVarName=cj_third_job_mapRelation=1HaveSons=1DataName=cj_third_job_map.pidType=intHaveSons=0Value1/Value/DataDataName=cj_third_job_map.priorityType=shortHaveSons=0Value1/Value/DataDataName=cj_third_job_map.nextType=intValue0/Value/Data/Data/Data/Data/DataSet6.总结本文通过对用例数据的分析,给出了一种用XML语言描述用例的方法。该方法已经应用于雨田动态测试系统中,借助于该方法,该系统能够方便地对几乎所有复杂的数据建立单元测试用例或者集成测试用例,继
本文标题:用XML存储用例
链接地址:https://www.777doc.com/doc-2202599 .html