背景技术
自动测试用例的执行是自动测试中一个关键环节,它的实现目前主要有两种方式:一是测试用例以解释型语言编写,由执行器解释执行;二是测试用例以编译型语言编写,其执行器即为所有测试用例编译后的可运行程序,其执行过程便是程序的运行过程。前者以简单、灵活和可控而得到大量的应用,本发明是针对后者的执行方式。
执行器的主要目的是解释执行测试代码(具体是由相应的解释器负责),但是,由于测试的互动需要,它还必须提供测试通讯、监视、控制、日志、告警、过程管理、调试及其跟踪等通用的测试监管功能。实现测试代码的编程语言是多种多样的,如tcl、python、perl、javascript等,因此执行器的所需要的解释器是不一样的,而且如果一次测试中测试代码包含多种语言,执行器就同时需要多个解释器。解释器一般随其对应的编程语言提供的,而执行器由测试工具的开发者设计和实现。
一般而言,不同执行器的测试监管功能大体是一致的,其开发工作量受其所能提供的功能所决定。能够完全满足自动测试需要的测试监管模块的工作量是非常大的,减少这一部分的开发工作量对执行器的开发有着重大的影响。此外,实际测试工作中不仅需要采用不同的测试编程语言,而且在比较大的系统测试中还可能需要同时执行不同语言编写的测试代码,因而存在执行器对不同解释器的支持也是非常重要的。
现有的执行器都是针对不同的解释器而设计的,大部分执行器都是一个解释器加部分监管代码混合而成。对不同的解释器,需要设计不同的执行器。
目前几乎所有的执行器方案是围绕着解释器而设计的,也就是说,一个解释器决定了一个执行器的设计,甚至在很多设计中两者是等同的。其构造方式类似于:
执行器=解释器+测试监管模块(完全实现或部分实现的)。
在这种设计中,解释器和测试监管模块的代码是相互混杂的,两者一般难以分离。
上述方案有两个致命的缺点:
1.执行器的重用性差,在需要开发多个执行器时效率低下
执行器的设计中,实现一个功能完全、能够满足测试的实际需求的测试监管模块是难度很高、工作量巨大的,它甚至要远远超过一个解释器的工作量。而不同的测试执行器对测试监管模块的需求基本上是一致的,因此完全可以设计为可重用的模块。而该方案因为没有将解释器和测试监管模块分离而使得测试监管模块的重用变得非常困难。这样在针对不同的测试编程语言开发执行器时开发效率会显得十分低下,特别是当这些执行器是由不同的开发者承担时。
2.执行器的可扩展性差
由于执行器的解释器模块和测试监管模块之间缺乏有效的分离,更没有规范的接口,因而它对第三方的解释器的可支持性差,更无法支持多个解释器。这样在新的测试编程语言被引入时,必须为该语言对应的解释器开发新执行器,而其大部分工作都属于重复性开发。这种重复性开发的开发不仅浪费了开发人员的时间和精力,而且由于执行器需要相当长的时间才能进入稳定应用,这样新语言的应用时间也被拉长了,它导致了测试效率的低下和时间损失并最终会损害企业的市场成果。
发明内容
本发明解决的问题是提供一种具有重用性和扩展性的测试执行器。
为解决上述问题,本发明测试执行器包括:测试监管模块,用于测试过程的互动及通讯;若干解释器模块,解释执行自动测试用例中的测试代码;其中,测试监管模块与解释器模块分离设置并通过接口模块进行交互,且解释器模块通过测试监管模块与测试执行器外部进行交互;所述测试监管模块设置有与测试执行器外部交互的通讯模块;接口模块包括:创建连接通道、输入/输出通道、解释器通信帧通道、转发通信帧通道和关闭连接通道;所述接口模块的各通道中:创建连接通道,用于建立测试监管模块与目标解释器模块间通讯的通道;输入/输出通道,用于测试监管模块向解释器模块输入自动测试用例,而解释器模块输出自动测试用例的测试结果信息;解释器通信帧通道,用于将解释器模块输入的通信帧转发到目的地;转发通信帧通道,用于测试监管模块将外部信息转发给目标解释器模块;关闭连接通道,测试监管模块向目标解释器模块请求关闭与测试监管模块间通讯的通道。
所述创建连接通道设置有用户标识和通道标识,其中用户标识用来标识通道的创建者和所有者,而通道标识是测试监管模块与目标解释器模块间通讯的通道的标志。
所述解释器通信帧通道中的通信帧包括:用于回送测试过程信息和测试结果信息的反馈通信帧和向被测系统发送测试过程中控制信息的控制通信帧。
所述反馈通信帧的目的地址为用户标识,源地址为通道标识;而控制通信帧的目的地址为被测系统与测试工具连接的测试端口的地址,源地址为通道标识。
所述转发通信帧通道传送的通信帧的目的地址是通道标识,而源地址为被测系统与测试工具连接的测试端口的地址。
所述测试监管模块还包括如下模块:测试前处理模块,用于分析记录测试任务及分解包括有若干自动测试用例的测试脚本,并将分解得到的自动测试用例通过接口模块发送给目标解释器模块;测试过程管理模块,用于测试过程的相关信息管理,通过接口模块与解释器模块交互;测试后处理模块,用于记录测试结果及存储测试结果信息,通过接口模块与解释器模块交互。
与现有技术相比,本发明具有以下优点:
本发明测试执行器的测试监管功能和解释器分离开来,抽象出测试执行器的框架结构,通过接口模块与测试监管模块交互,进而通过通讯模块实现与执行器外部交互。由于测试监管功能是测试执行器相对不变的部分,而解释器模块是随测试需要所采用的测试代码语言变化的部分,它们的分离使得测试监管模块的重用性提高。与此同时,测试监管模块与解释器接口模块使得新的解释器模块很容易与老的测试执行器的测试监管模块协同工作,从而使测试执行器可以支持不同的解释器模块。这不仅重用了测试执行器的框架,而且是测试执行器可以扩展支持不同的解释器。重用性和扩展性的提高最终减少了因为测试代码语言的不同而带来的测试执行器的开发工作量,并且大大缩短了自动测试工具适用时间,对自动测试工具的开发和应用效率有着改善。
具体实施方式
本发明测试执行器通过将测试监管模块与解释器模块分离开来以使不同的测试执行器可以共享该测试监管模块。解释器模块只跟测试监管模块通讯而不能跟外部有直接联系,解释器模块对测试执行器外部的通讯(如解释器模块与被测系统的通讯)由测试监管模块中转,这样通过测试监管模块中的接口模块,测试执行器能够支持多种不同解释器模块,以最大限度地重用测试执行器通用部分的设计并能够同时支持多语言的测试代码。
请参照图1所示,本发明测试执行器1用来测试被测系统2,包括:
测试监管模块10,用于测试过程的互动及通讯;
若干解释器模块11,解释执行自动测试用例中的测试代码;
测试监管模块10与解释器模块11分离设置接口模块13进行交互的,且解释器模块11通过测试监管模块10与测试执行器1外部进行交互。
测试脚本通过控制台3的输入并发送至测试监控模块10中。控制台3是测试人员的操作界面,是测试执行器1的客户端程序,既可以是图形界面也可以是文本命令行界面。测试脚本又称为测试代码文本,一个测试脚本可以含有一个或多个自动测试用例。自动测试用例执行结果是用格式文本表示的测试脚本执行的测试结果信息,其中含有所对应的自动测试用例标识,因其具体格式的表示不属于本发明的内容,这里不再详述。
本实施例中,接口模块13设置在测试监管模块10中,当然也可以独立设置。请参照图2所示,测试监管模块10进一步包括:
通讯模块101,与测试执行器1外部交互,是测试执行器1对控制台3和被测试系统2的通信接口,使前者与后二者的耦合最小;
测试前处理模块102,用于分析记录测试任务及分解包括有若干自动测试用例的测试脚本,并将分解得到的自动测试用例通过接口模块13发送给目标解释器模块;
测试过程管理模块103,用于测试过程的相关信息管理(如告警、异常处理、测试度量与统计、日志等),通过接口模块13与解释器模块11交互;
测试后处理模块104,用于记录测试结果及存储测试结果信息,通过接口模块13与解释器模块11交互,直接向测试过程管理模块103传递信息,这些信息包括来自控制台的测试控制和跟踪指令、来自解释器模块11的测试异常、测试结果、测试中间过程信息等。由于测试前处理模块102、测试过程管理模块103及测试后处理模块104是现有技术不再赘述。
接口模块13包括以下通道:
1)创建连接通道(OpenChannel),用于建立测试监管模块10与目标解释器模块间通讯的通道;
输入:用户标识;输出:通道标识
这里的用户标识用来标识通道的创建者和所有者,其具体含义由测试监管模块10解释。例如,测试人员从控制台3发起一个测试任务,则可以把测试任务的标识当作用户标识。通道标识是被建立通道的识别标志,通常用一个整数或字符串来表示,其含义由参与创建它的解释器来具体解释。
2)输入/输出通道(SendScript),用于测试监管模块10向解释器模块11输入自动测试用例,而解释器模块11输出自动测试用例的测试结果信息;
输入:测试代码文本;输出:测试代码执行结果(格式文本)
3)解释器通信帧通道(ReceiveFrame),用于将解释器模块11输入的通信帧转发到目的地;
输入:二进制通信帧;输出:转发通信帧到目的地。其中通信帧包含收、发方的地址或标识。
解释器通信帧通道中的通信帧包括:用于回送测试过程信息和测试结果信息的反馈通信帧和向被测系统2发送测试过程中控制信息的控制通信帧,例如在协议测试中,解释器模块11在运行测试代码时会向被测系统2发送消息。
反馈通信帧的目的地址为用户标识,源地址为通道标识;而控制通信帧的目的地址为被测系统2与测试工具连接的测试端口的地址,源地址为通道标识。
4)转发通信帧通道(SendFrame),用于测试监管模块10将外部信息(主要使指来自被测系统2的响应信息)转发给目标解释器模块。例如,将来自被测系统2的响应信息(如协议测试中的应答消息)中转到解释器模块11中;
输入:二进制通信帧;输出:转发通信帧到解释器模块11。
转发通信帧通道传送的通信帧的目的地址是通道标识,而源地址为被测系统2与测试工具连接的测试端口的地址。
5)关闭连接通道(CloseChannel),测试监管模块10向目标解释器模块请求关闭与测试监管模块10间通讯的通道。
输入:通道标识;输出:无。
实际应用中,例如一个产品的测试脚本是用TCL和TTCN语言编写的(这在具体的测试中是比较常见的情况,例如用TTCN来编写协议自动测试用例,用TCL来编写功能自动测试用例),并且每个自动测试用例的测试脚本文件用同一种语言编写,相应测试脚本文件的扩展名与该语言相关联。在运行该产品的测试脚本时就需要在测试执行器1中在测试期间支持TCL和TTCN解释器模块11。测试前处理模块102根据测试脚本文件的扩展名确定该测试脚本运行所需的解释器模块11是TCL解释器还是TTCN的解释器,并将测试脚本文件中的测试脚本通过接口模块13送到TCL或TTCN的解释器模块11中。在测试脚本运行过程中,解释器模块11通过接口模块13与被测系统2交互,或者向测试后处理模块104发送测试结果信息。
请参照图3、4所示,本发明测试执行器的应用流程如下:
1)用户从控制台输入测试脚本并发送到测试执行器的通讯模块,例如用户从控制台发起一个测试任务,并向测试监管模块传入一个或多个测试脚本文件;
2)转发测试脚本到测试前处理模块,测试前处理模块分解测试脚本获得若干自动测试用例,根据测试脚本文件的扩展名配置本次测试所需要的目标解释器模块;
3)各个自动测试用例通过接口模块被送到解释器模块;
使用创建连接通道(OpenChannel)向目标解释器模块请求创建一个连接;
连接创建成功后使用输入/输出通道(SendScript)依测试脚本文件次序或依自动测试用例次序向目标解释器模块传入测试脚本;
4)各个自动测试用例由目标解释器模块解释执行之;
5)解释器模块在执行测试脚本的过程中通过接口模块进行信息交互
51)解释器模块经由接口模块的解释器通信帧通道(ReceiveFrame)、测试过程管理模块、通讯模块向控制台回送测试过程信息;
52)解释器模块经由接口模块的解释器通信帧通道(ReceiveFrame)向被测系统发送控制信息(例如协议测试中),而被测系统通过转发通信帧通道(SendFrame),将来自被测系统的信息(如协议测试中的应答消息)中转到解释器模块中;
6)解释器模块结束执行测试用例,测试结果信息通过接口模块进行交互;
通过接口模块的解释器通信帧通道(ReceiveFrame)将测试结果信息送到测试后处理模块再经由通讯模块传送到控制台;
7)监管模块接口模块的关闭连接通道(CloseChannel)请求解释器模块关闭连接;
8)测试任务结束。
本发明测试执行器的测试监管功能和解释器分离开来,通过接口模块与测试监管模块交互,进而通过通讯模块实现与执行器外部交互。由于测试监管功能是测试执行器相对不变的部分,而解释器模块是随测试需要所采用的测试代码语言变化的部分,它们的分离使得测试监管模块的重用性提高。与此同时,测试监管模块与解释器接口模块使得新的解释器模块很容易与老的测试执行器的测试监管模块协同工作,从而使测试执行器可以支持不同的解释器模块。这不仅重用了测试执行器的框架,而且是测试执行器可以扩展支持不同的解释器。重用性和扩展性的提高最终减少了因为测试代码语言的不同而带来的测试执行器的开发工作量,并且大大缩短了测试工具适用时间,对自动测试工具的开发和应用效率有的改善。