一种基于测试脚本技术的嵌入式系统自动化检测系统的制作方法

文档序号:6579614阅读:210来源:国知局

专利名称::一种基于测试脚本技术的嵌入式系统自动化检测系统的制作方法
技术领域
:本发明涉及计算机软件技术,特别涉及嵌入式软件的测试,具体涉及一种基于测试脚本技术的嵌入式系统自动化检测系统。
背景技术
:嵌入式系统一般质量要求较高,如飞机上的飞行控制系统,若失效将造成非常严重的后果。这样就要求产品在出厂前进行充分的检测与测试;在外场使用时能快速定位产品故障位置。不论是出厂检测还是外场检测,都要求检测设备能最大程度的实现测试的自动化,从而提高测试效率,减轻操作人员的工作量,并保证测试的准确性。多数检测设备在使用时需要测试人员守候在测试设备前执行各项操作,对于需要出厂的每一样产品都必须重复同样的过程,费时费力且容易出错;有些检测设备虽然实现了一定程度的自动化,然而它们缺乏对检测流程的描述,所有的自动化测试流程都固化在代码中,不能适应测试流程的变化。此外,几乎所有的检测设备都有其专用性,因为产品的接口特性和功能需求不同,这些检测设备只能用来检测特定型号或特定系列的嵌入式产品,不具有二次开发的能力。
发明内容本发明的目的在于提供一种针对嵌入式系统的通用、全自动、并具有二次开发能力的基于测试脚本技术的嵌入式系统自动化检测系统。为了实现上述目的本发明采用的技术方案如下本发明提出的一种基于测试脚本技术的嵌入式系统自动化检测系统包括以下模块交联环境建模模块提供可视化建模界面供测试者对被测系统(SUT=SystemUnderTest)的交联设备进行建模,模型最终保存为XML文件,供主程序使用;测试面板配置模块提供可视化界面,供测试人员使用,进行测试面板的搭建工作;测试脚本解释器按照测试语句进行各种函数的调用以及测试数据的实时解析和分发,使测试动作真正被执行;多任务调度模块实现仿真模型以及测试脚本的多任务管理;接口驱动模块介于多任务调度模块和具体硬件的驱动层之间,为多任务调度模块提供了统一的接口;数据收集模块用于测试数据的收集,存储和管理;测试报告生成模块用于将数据收集模块收集的数据生成测试报告;测试管理模块负责测试流程的管理、测试过程控制,包括选择测试脚本,测试的启动,暂停,和停止;参见附图1,通过交联环境建模模块提供的可视化建模界面配置SUT的仿真测试环境,然后将配置好的测试环境存成XML格式文件;通过测试面板配置模块提供的可视化界面选择需要的控件;使用Python语言编写文本格式的测试脚本文件,脚本中描述一个或多个测试用例的操作;测试管理模块接受用户的指令开始自动化测试,通知多任务调度模块测试开始,多任务调度模块调用所述的XML文件中的配置信息动态生成仿真交联设备模型,交联设备模型通过接口驱动模块和SUT相联,然后,多任务调度模块将所述的测试脚本文件提交给测试脚本解释器进行解释执行,测试脚本解释器根据所述的测试脚本中描述的测试任务的属性向多任务调度模块提交任务,多任务调度模块将这些测试任务记录下来,统一调度,多任务调度模块根据其记录的测试任务内容通过交联设备模型、接口驱动模块向SUT施加测试激励,STU将反馈数据通过接口驱动模块传递给数据收集模块存储,测试报告生成模块根据用户指令将数据收集模块收集到的数据生成测试报告。所述的交联环境建模模块包括界面工具包提供可视化页面,供测试者对SUT的交联设备进行建模;模型类库用来存储通过用户界面获得模型的相关信息;测试者通过所述的界面工具包提供的可视化界面对SUT的交联设备进行配置、建模,然后存储到所述的模型类库,通过所述的模型类库中的存储函数把模型的相关信息存储到XML格式的文件中。所述的测试面板配置模块提供两类控件显示类和控制类,设置控制面板时,首先导入交联环境模块配置好的XML格式文件,选择需要的显示控件和控制控件,每个显示控件与一个或多个接口变量绑定起来,每个控制控件同一段测试脚本绑定起来,点击该控制控件将触发测试脚本解释器对该脚本的执行。所述的接口驱动模块为三层结构板卡层(BoardLevel)、I0层(10Level)和管理层(ManagementLevel)。所述的板卡层位于驱动部分的最底层,其直接操作硬件驱动程序,完成测试数据的采集和发送;板卡层中定义了多个板卡类和通道类,每个板卡类是一种型号板卡设备的抽象,每个板卡至少包含一个通道,每个通道和一个变量相互绑定,对于变量的操作可以被视为对一个物理通道的操作;所述的IO层中定义了多个IO类,IO类是输入输出形式的抽象,每一个IO类对应一种总线接口;在IO类中管理着支持该类型总线的板卡;最后,所述的管理层整体管理所有输入输出类型,并根据配置,为变量分配IO端口和物理板卡通道;管理层是驱动部分和系统其它模块的接口,系统通过管理层实现对变量的分配、赋值和取值;管理层检查变量的配置信息是否合法;使用同种总线接口的板卡的信息由板卡层采集后,通过统一的接口——对应该接口的IO类——由IO层读取,最后由管理层上传至系统的其它模块。所述的数据收集模块使用了SQLite小型数据库用于测试数据的收集,存储和管理,并使用双缓存机制存储数据,在把主缓存中的数据写入数据库时,新收集的数据将被写入辅助缓存中,并添加保护以确保数据缓冲不会发生读写冲突,且数据缓冲和写数据库功能在不同的线程中实现,写入数据库使用了SQLite的事务机制。所述的测试脚本在开源脚本Python的基础上作了扩展,增加了扩展模块"ts〃,在Python词法、语法的基础上加入针对实时嵌入式软件测试特性的描述,包括测试输入、获取测试反馈以及执行时间控制、测试结果判断、测试脚本的复用、测试脚本接口几个方面的实现。本发明具有下述有益效果本发明提供的交联环境建模工具,使得测试人员可对被测系统的交联设备进行建模,生成仿真模型,同时,测试者还可以在平台的基础上对仿真模型进行二次开发,添加模型的动态特性;本发明提供的接口驱动模块支持多数标准工业总线接口,采用开放式的架构,可以较容易的增加新类型接口的驱动,使本系统可以用于测试多种被测设备,通用性强;本系统的测试脚本基于开源脚本语言python扩展而来,功能强大,语法简单,提高了测试的自动化程度。图1为本发明基于测试脚本技术的嵌入式系统自动化检测系统的组成结构;图2为交联环境建模示意图;图3为Block类型变量配置界面;图4为429总线协议配置界面;图5为422总线协议配置界面;图6为交联环境的建模过程;图7为多任务调度模块的结构图;图8为接口驱动模块的机构图;图9为通道类的MUL图;图10为板卡类的MUL图;图11为IO类的MUL图;图12为管理类的MUL图;图13为本发明的数据结构图;图14为采用本发明对嵌入式系统进行自动化检测的实施过程;图15为飞行控制系统的交联环境图。具体实施例方式被测系统的运行需要交联设备的与之配合,本发明通过交联环境建模模块提供的可视化建模界面配置被测系统的仿真测试环境。所述的交联环境建模模块的界面工具包采用MFC的界面工具包提供可视化界面,在可视化界面中可以配置交联环境图,在交联环境图中采用矩形节点表示交联设备,节点间的连线表示设备之间的接口通讯,所述的接口可以是如下总线接口RS-422,RS-232,Al,AO,DI,DO,ARINC-429,连线上可配置接口变量,配置完接口变量,可以根据用户的需求对变量的属性进行配置。参见附图2,INS表示被测系统SUT,矩形节点DCMP表示SUT的一种交联设备,连线MIL-STD-1553表示交联设备DCMP和被测系统间的接口类型,通过接口配置窗口1为各接口添加接口变量,通过变量配置窗口2可以对变量进行传输类型,周期,变量类型,初始值等属性的配置。变量类型可根据被测系统的接口控制文档进行配置,交联环境建模模块将配置好的测试环境存成XML文件。所述的变量的传输类型包含周期型和事件型两种,周期型指该变量将按设定的周期进行发送或接收;事件型意味着某个事件将触发该变量的发送或接收(事件指来自测试脚本解释器或其他仿真模型的信号)。所述的变量类型可以是Block类型(即C语言里的struct),Block类型变量中可配置元素(即struct的成员变量),元素还可再配置位段(支持按位赋值)。把变量的结构配置成BLOCK型,可以对变量进行更细致的配置,参见附图3,BL0CK的概念类似于C语言中的结构体,把一个变量配置成许多个元素,同理,也可以把一个元素配置成许多个位段。为了保证在每个交联环境图中模型节点和连线不会互相发生冲突,所述的交联环境建模模块为每个模型节点和连接分别绑定一个唯一的UUID,并且记录其在交联环境图中的位置信息。针对不同种类的数据总线,所述的建模模块提供不同的协议配置选项,满足用户对各总线上的变量的配置需求。参见附图4、附图5,为两个不同数据总线的配置界面。参见附图6,通过交联环境建模模块为交联环境的建模步骤如下首先根据SUT的交联设备的实际情况配置模型节点,然后为模型节点添加总线接口并设置接口属性,最后添加并设置接口变量,完成设置并存成XML格式。本发明的系统使用类工厂模式来对对象进行初始化,在测试初始化的时候通过解析XML文件获得模型变量的相关配置信息,并在内存中重新申请空间以对其进行操作,以此来降低图形建模工具与测试主程序之间的耦合性,提高程序的稳定性。测试脚本在自动测试设备中起着非常关键的作用,是测试用例自动执行的主要手段,所述的测试脚本以文本形式描述一个或多个测试用例的操作,达到驱动被测软件运行的目的。测试脚本中需要包含的数据和指令有控制信息对被测系统施加的激励;时间输入何时进行,以什么样的规律进行;捕获何种数据获取被测系统输出;比较信息比较什么,和谁比较以及如何比较;等等。本发明在开源脚本Python的基础上作了扩展,增加了扩展模块"ts〃,在Python词法、语法的基础上加入针对实时嵌入式软件测试特性的描述,包括测试输入、获取测试反馈以及执行时间控制、测试结果判断、测试脚本的复用、测试脚本接口几个方面的实现,脚本函数及功能如表1所示。表1脚本函数及功能<table>tableseeoriginaldocumentpage9</column></row><table>1)测试输入SUT只与交联设备模型有数据交互,脚本对SUT的测试激励是通过设备模型来施加的。测试脚本在扩展模块"ts〃中提供"setvalue"函数来对三种数据结构(变量、元素和位段)进行赋值,并输出跟踪信息,仿真交联设备模型会按照接口协议自动的将数据发给SUT。“setvalue"函数共有两个参数。第一个参数为数据结构名或数据结构句柄,数据结构名是string类型(注变量格式为“模型名.变量名”,元素格式为“模型名.变量名.元素名”,位段格式为“模型名.变量名.元素名.位段名”),数据结构句柄是int类型。第二个参数为要赋予的值,是double类型。下面用变量举例,用法如下所示setvalueCDCMP.ins_main_mode‘,1)#通过设备模型'DCMP'向惯导发送数据,设置惯导主模式为1此脚本通过第一个参数进行查找,发现此变量确实存在,就调用赋值函数接口将此变量的值更新为第二个参数,否则报错,同时终止脚本运行。如果使用数据结构的句柄作为第一个参数则要先使用gethandle来获得数据结构的句柄。gethandle的参数只有一个,即数据结构名。用法如下所示handle=gethandle(‘DCMP.ins_main_mode‘)#获得惯导主模式的句柄setvalue(handle,1)句柄实际上就是需要赋值的数据结构的地址,所以通过句柄进行赋值速度较快。2)获取SUT反馈脚本获取SUT的反馈数据同样也是通过设备模型完成,模型按照接口协议接收并保存SUT数据。测试脚本提供"getvalue"函数来对三种数据结构(变量、元素和位段)的取值。“getvalue"函数只有一个参数。参数为数据结构名或数据结构句柄,数据结构名是string类型(注变量格式为“模型名.变量名”,元素格式为“模型名.变量名.元素名”,位段格式为“模型名.变量名.元素名.位段名”),数据结构句柄是int类型。输出为数据结构的值,类型为XML中定义的数据结构的类型。下面用变量举例,用法如下所示value=getvalue(‘DCMP.ins_main_mode‘)#获得惯导主模式的值此脚本通过第一个参数进行查找,发现此变量确实存在,就调用取值函数接口获得此变量的值,否则报错,同时终止脚本运行。如果想快速取值,可以使用句柄作为参数。用法如下所示value=getvalue(handle)#获得惯导主模式的值得到变量的值之后,可以将它和预期值进行比较,从而检测被测设备是否正常工作。函数exassert实现对比功能,其参数为实际值与预期值的bool表达式。用法如下所示exassert(value==1)#实际值与预期值对比然后exassert会自动输出正确与否跟踪信息,为用户提供判断依据。3)测试脚本的复用本文为〃ts〃模块增加了〃rim_SCript〃方法,以实现脚本间的相互调用,提高测试脚本复用度。importts#导入测试控制模块ts.run_script('scriptl')#测试脚本'scriptl'被调用4)执行时间控制测试任务对时间的控制要求有两种定时执行和周期执行。定时执行是指测试任务在设定时间到达时执行一次;周期执行指测试任务在设定的开始时间和结束时间内按规定周期重复运行。测试人员把测试任务写成Python函数,丨‘ts"模块提供〃register"函数将测试任务的类型、执行时间以及周期等信息注册到本发明的测试系统中。测试开始后,测试系统将按照任务的时间特性动的调用测试脚本函数。“register"函数共有四个参数。第一个参数为任务名称,是string类型。第二个参数是任务的开始时间,是int类型。第三个参数是任务的运行时间,是int类型。第四个参数是任务的周期,是int类型。registerCtask',0,50,60)#将任务向调度程序进行注册任务实际就是脚本中的函数,这个函数没有参数,register的第一个参数就是这个函数的函数名,register在获得函数名后,在当前的运行时环境中找到此函数对象,如果找不到解释器报错,然后终止脚本的运行。然后把它放到一个全局字典中,并把它的相关信息传给调度程序,而当调度程序需要执行此任务时,会执行函数rim_script,它有一个参数是uint类型,是任务名字符串在内存中的地址,函数rUn_SCript会通过任务名在全局字典找到函数对象,并执行此函数对象,从而实现测试任务的调度执行。后三个时间参数的单位是毫秒。下面给出一个完整的测试脚本formscriptimport*#导入扩展模块deftask()测试任务handle=gethandleCDCMP.insmainmode')#获得惯导主模式的句柄setvalue(handle,1)#设置惯导主模式为1value=getvalue(handle)#获得惯导主模式的值exassert(value==1)#实际值与预期值对比registerCtask',0,50,60)#将任务向调度程序进行注册对于简单的延时操作,“ts"模块提供了"delay"方法可以提供毫秒级的延迟,延迟过程中解释器线程被挂起,不占用CPU资源。5)测试结果判断测试用例执行过程中或执行结束后,需要对测试数据进行分析、比较,以确认该用例是否通过。“ts"模块提供方法"assert"可对测试结果进行断言,若断言不成立,该测试用例将被认为不通过,然后将结论写入测试结果数据库中,并终止对该测试用例的测试。下面举例说明importts#导入测试控制模块ts.setvalue(‘RC.pitch',5)#通过设备模型'RC'(遥控设备)向飞控发送数据,设置俯仰角为5度ts.delay(5000)#延迟5秒pitch=ts.getvalue(‘AIRCRAFT,pitch')#通过模型'AIRCRAFT'获取飞机当前的俯仰角ts.exassert(‘4.9<pitch<5.1‘)#5秒后,若俯仰角不在正确范围内,判断该用例未通过6)测试脚本接口在本发明的测试系统中,测试用例的执行是通过脚本解释器对测试脚本的解释来实现的。解释器先理解测试行为,再按照测试输入,通过模型控制器改变交联设备模型的运行状态,最终达到向SUT施加测试激励的目的。测试面板使得测试人员能够实时监视并控制测试的进行。面板上的控件分为两类显示类和控制类。供变量观察的控件有编辑框,树形控件,趋势图,仪表盘,数码管,信号灯等。可设置接口变量的控件有按钮,旋钮,编辑框等。测试面板配置模块首先导入SUT测试环境配置信息,即存储交联环境图的XML文件,并根据需要选择各种控件。每个显示控件可与一个接口变量绑定起来(也可与多个变量绑定,如曲线图),设置其显示属性(如线条颜色,按钮风格等)。每个控制控件可同一段测试脚本(也称在线脚本)绑定起来,点击该按钮将触发解释器对该脚本的执行,如设置某个接口变量的值。显控面板配置完毕后,存成XML文件,本专利所述的测试系统启动时可以导入该配置文件,并根据该配置文件动态生成面板和各种控件。本发明通过多任务方式(即多线程)实现各种交联设备的仿真。仿真模型以及测试脚本的多任务管理是通过多任务调度模块实现的。多任务调度模块提供任务注册和测试的开始、暂停、停止等功能。通过任务注册接口,在一次测试用例执行过程中可以注册多个任务,包括周期性任务和一次运行的定时任务。一个任务可以有开始时间,运行时间,周期等时间属性的控制。调度模块按照所注册任务的时间属性准确地控制任务的运行和结束。另一方面,调度机制根据建模时模型的周期特性创建模型任务,实现脚本之外模型自身的任务仿真。依赖于操作系统的时间精度,多任务调度模块需要达到毫秒级定时精度。通过采用ACE的定时器序列和主动定时器,调度模块可方便灵活的实现定时器,这可以满足各种时间相关测试的需求。调度模块提供的任务注册的接口由脚本扩展模块使用。调度模块通过和消息机制和界面窗口进行通信,以触发测试的开始和停止。参见附图7,多任务调度模块以交联环境配置模块生成的模型配置XML文件为输入,建立接口变量表,同时创建模型任务。使用Python语言编写文本格式的测试脚本文件也作为调度模块的输入,在一个脚本文件中创建一个或者多个任务。所有脚本的解释执行都通过脚本解释器完成,而脚本解释器又调用了任务调度所提供的任务注册等接口。在首次解释执行完脚本后,描述测试用例的任务被创建完成,处于挂起状态。然后在接到用户的测试开始命令后,各个任务开始运行。任务的周期性运行通过控制和任务绑定的信号量来实现。所有相同周期的任务共用一个定时器,在定时器超时事件发生时,判断任务是否还在运行时间内,如果是,则释放任务绑定的信号量以使得任务运行;否则停止任务。每个测试任务实际执行所做的工作是由python脚本在注册任务时指定的函数对象来定义的,所有函数对象由脚本解释执行器维护,一个测试用例的执行就是调度器和解释器配合着调用python函数对象的过程。测试脚本解释器对接口变量的操作也是通过调用变量管理模块的接口来实现的。此外由调度模块提供接口实现在多任务环境中操作建模生成的模型变量,这些操作包括变量的检索,更新值,读取变量值,传送,收集等。本发明通过接口驱动模块实现了各种IO接口的抽象,屏蔽了具体硬件的差异。接口驱动模块介于调度模块和具体硬件的驱动层之间,为调度模块提供了统一的接口。对于DI,DO,Al,AO,RS-422,RS232,LOCAL等总线提供了统一的读写接口。所有的10类型都继承自同一接口,通过对接口方法的不同实现来完成接口操作的特殊工作。在扩展新的10类型是,只需要再继承实现此同一接口即可,非常方便。不同硬件驱动的差异性在特定总线类型的实现中屏蔽。当使用了不同的硬件及驱动时,只需变化读写接口的内部实现,而对调度模块的接口则不需要任何改变。具体的,参见附图8,接口驱动模块包含管理层、10层、板卡层,管理层是接口驱动模块和系统的接口,在管理层中定义了管理类,调度机制调用本类实现对变量的分配、赋值和取值;在IO层定义了IO类,每个IO类对应一种总线接口,例如Al、ARINC-429,板卡层包含多个板卡类和通道类,每个板卡类是一种型号板卡设备的抽象,例如PCI-1751、PCI-1724,每个板卡至少包含一个通道,每个通道和一个变量相互绑定。使用同种总线接口的板卡的信息由板卡层采集后,通过统一的接口——对应该接口的IO类——由IO层读取。通道是系统可分配给变量的最小单元,一个通道通常与一个变量相互绑定,对于变量的操作可以被视为对一个物理通道的操作。参见附图9,为基本通道类的UML图,该类是对各种板卡通道的操作的一个抽象。根据不同型号板卡的特殊要求,只需要继承该类即可。(1)属性通道号即该通道的编号,类型unsingedint。通道名称上层赋予该通道的名称,类型string。描述信息上层用于描述该通道的信息,类型string。总线类型描述该通道支持的总线类型,类型enum。变量对象指针分配给本通道的变量对象指针,类型PV0ID。板卡对象指针指向板卡类的指针,类型PV0ID。是否已分配表示该通道是否已被分配给变量,类型bool。是否有效表示该通道当前是否可用,类型bool。(2)方法初始化初始化通道,即为该通道寄存器附初始值,并做打开通道等相关操作。设置配置信息对于通道的某个配置寄存器进行读写,改变配置信息。读取配置信息得到通道的某个配置信息。分配变量将通道分配给某个模型变量,将变量指针赋予该通道。分离变量将通道与某个已分配的变量分离。检测变量配置信息是否有效将通道的板卡信息与变量配置信息对比,检查是否有矛盾。写入向通道中写入数值。读取从通道中读取数值。关闭关闭该通道。所述的板卡类在分配一个通道给变量的时候,会先初始化一个通道类,然后将变量绑定到该通道,如果配置信息检查无误,将把该通道对象的地址作为句柄返回给上层。如果配置信息有误,将返回错误。参见附图10,为板卡类的UML图(1)属性板卡名称上层赋予该板卡的名称,类型string。描述信息上层赋予该板卡的描述信息,类型string。支持总线类型该板卡支持的总线类型,类型ermm。最大通道号该板卡所支持的最大通道号,类型=Imsingedint。(2)方法初始化将板卡置于初始状态,并初始化各通道。设置配置信息写板卡配置寄存器,设置配置信息。读取配置信息读取板卡配置寄存器,获得配置信息。分配变量将板卡上的某一通道分配给模型变量分离变量将板卡上已分配的通道与变量分离。检测变量配置信息是否有效调用通道检测函数,得到变量配置信息是否有效。启动启动板卡,发送或接收数据。停止停止板卡发送或接收。关闭关闭板卡。参见附图11,为IO类的UML图,(1)属性IO名称输入输出形式的名称,类型string。描述信息输入输出形式的描述信息,类型string。总线类型输入输出类型,类型enum。支持板卡支持本输入输出类型的板卡指针,类型PV0ID。(2)方法初始化初始化所有支持的板卡。设置配置信息设置所有板卡的配置信息。读取配置信息读取相应板卡的配置信息。分配变量将变量分配给某个板卡的某个通道。分离变量将变量从某个板卡的某个通道分离。检测变量配置信息是否有效调用板卡类的检测函数,检测变量配置信息是否有效启动启动所有板卡停止停止所有板卡关闭关闭所有板卡。参见附图12,为管理类的UML图(1)属性配置XML文件用于记录驱动部分配置信息的XML文件路径,类型string。(2)方法设置配置信息设置某个变量绑定通道的配置信息。读取配置信息读取某个变量绑定通道的配置信息。分配变量为变量分配通道。分离变量将变量从通道分离。读取读取变量值。写入写入变量值。启动启动测试。停止停止测试。关闭关闭所有10。驱动部分的配置信息记录在一个XML格式文件中,该文件为驱动提供当前系统可支持的输入输出类型及其对应的类名称,以及可支持的板卡类型及类名称等信息。具体的,XML文件中使用“driver”节点作为根节点,每一种输入输出类型使用一个“IOType”子节点。在“IOType”子节点中,“name”表示IO名称,“type”表示IO类型,“description,,表示描述信息,“board”表示可以支持的板卡。每一个板卡以“board”的子节点表示。对于“board”子节点,“name”表示板卡名称,“type”表示板卡类型,“description”表示描述信息,“file”表示该板卡的驱动文件(即板卡层),“channel”表示通道信息。本发明使用了SQLite小型数据库用于测试数据的收集,存储和管理。SQLite是一个轻量级、跨平台的关系型数据库,它使用进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite只需要带上它的一个动态库,就可以使用它的全部功能,在部署的时候能够省去不少麻烦。SQLite数据库在稳定性和效率上的表现非常优秀。为了避免因数据刷新过快,超过10处理能力而导致丢失数据的情况发生,本发明使用双缓存机制存储数据,在把主缓存中的数据写入数据库时,新收集的数据将被写入辅助缓存中,并添加保护以确保数据缓冲不会发生读写冲突。另外,数据缓冲和写数据库功能在不同的线程中实现,写入数据库使用了SQLite的事务机制,这些机制的引入都大幅的提升了数据收集模块的工作效率和安全性,克服了SQLite数据库在连续插入记录时的性能缺陷,保证了检测工作可靠,高效地进行。测试结束后,测试者可浏览测试结果数据库,并从该数据库生成word形式的测试报告。测试报告的模板可定制,这里存储为XML文件格式。本发明的数据结构按照图13所示方式组织。本发明提出的嵌入式系统的自动化检测方法的实施过程如图14所示,下面结合具体实例说明。飞行控制系统(FCS:FlightControlSystem)作为一种典型的嵌入式系统,是飞机航电系统的关键部分,一般在出厂前需要做各种复杂冗长的检测,以确保产品无故障。在外场使用时,有时也需要通过检测来排除故障或进行维护。本发明可使得检测流程高度自动化,减轻人员负担,减少检测时间并提高了测试的准确性。使用本发明对某型号的飞行控制系统进行检测的步骤如下1.对FCS的测试环境进行建模。FCS通过RS422、ARINC429、ΑΙ/Α0、DI/DO等接口与其他航电设备相连,包括惯导、大气机、高度表、舵机、综显、操作杆等设备,如图15所示。按照FCS的接口控制文档配置交联环境的接口变量,形成配置文件“Model,xml”。2.配置显控面板。3.将检测流程以脚本形式描述例如这样一个测试流程检测飞控在改平状态下,俯仰角信号ωζ信号传动比,按表2进行操作,记录舵机位移,并按表中所列公式计算传动比,应符合^ζ=(0.20±0.04)(^;/^(75)),在该项目的检测过程中,应先输入Vy,Hp,Q等参数,然后进入改平状态,输入ωζ(两次,分别为ωζ=上8°/s和ωζ=下8°/s),测量舵机位移(对应两次ωζ的不同输入,得到Li,L2),计算Κζ,与预期结果比较。表<table>tableseeoriginaldocumentpage16</column></row><table>0192]采用测试脚本描述该检测流程,如下所示0193]deftask581()extract改平状态下coz信号传动比检查')############################messageboxCtitle=将TS-19速率陀螺的Wz输入轴平行于TZS-74速率转台的旋转轴。;icon=4;‘)setvalue(H_HR,10)#设置升降速度为10m/ssetvalue(H_Hp,0)#设置气压高度为0kmsetvalue(H_Qc,0)#设置动压为Okg/m2setvalue(H_D0_QGAIPQ,1)#俯仰改平请求接通sleep(0.5)#延时0.5秒setvalue(H_A0_ffz,8)#设置wz=上8°/smessage=messageboxCtitle=记录DCD-29舵机的位移值(单位mm)。;button=石角定;variable=L1的值为;‘)11=handle_MB(message)#记录位移L1extraceCDCD-29舵机的位移值L1=‘+str(ll)+'mm')DBwriteC传动比_改平_1_L1',str(11))#将L1写入数据库setvalue(H_A0_ffz,_8)#设置wz=下8°/smessage=messageboxCtitle=记录DCD-29舵机的位移值(单位mm)。;button=石角定;variable=L2的值为’')12=handle_MB(message)#记录位移L2extraceCDCD-29舵机的位移值L2='+str(12)+'mm')DBwriteC传动比_改平_1_L2',str(12))#将L2写入数据库kwz=2.0*abs(ll_12)/(7*16)#计算KuzextraceC传动比='+str(kwz))DBwriteC传动比_改平_l_Kwz‘,str(kwz))#将Kuz写入数据库extraceC传动比判断')ispass=exassert(kwz>=0.2-0.04andkwz<=0.2+0.04)ifispassextraceC传动比的值正常',1)elseextraceC传动比的值不正常',2)register(‘task541',0,50,60)#测试任务注册类似地,所有的测试流程都可以脚本的形式描述出来,我们将这些脚本文件放入测试工程的script文件夹。4.执行测试接下来就可以对被测系统进行检测了,有两种检测方式全自动检测和手动检测。测试人员选择检测方式后,点击测试开始按钮,如果是全自动测试,系统会弹出测试流程选择对话框,测试者可以从已有的测试脚本中挑选要执行的测试项,以及它们的执行顺序。手动检测方式是指测试者自己操作面板上的按钮,执行各项输入,从测试面板上观察测试结果。相比全自动测试,手动方式增加了灵活性,但自动化程度较低。5.分析测试数据,生成报告测试结束后,测试者可打开数据分析界面,列表显示测试数据库中的数据,通过菜单“生成报告”可生成word形式的测试报告。权利要求一种基于测试脚本技术的嵌入式系统自动化检测系统,其特征在于包括以下模块交联环境建模模块提供可视化建模界面供测试者对SUT的交联设备进行建模,模型最终保存为XML文件,供主程序使用;测试面板配置模块提供可视化界面,供测试人员使用,进行测试面板的搭建工作;测试脚本解释器按照测试语句进行各种函数的调用以及测试数据的实时解析和分发,使测试动作真正被执行;多任务调度模块实现仿真模型以及测试脚本的多任务管理;接口驱动模块介于多任务调度模块和具体硬件的驱动层之间,为多任务调度模块提供了统一的接口;数据收集模块用于测试数据的收集,存储和管理;测试报告生成模块用于将数据收集模块收集的数据生成测试报告;测试管理模块负责测试流程的管理、测试过程控制,包括选择测试脚本,测试的启动,暂停,和停止;通过交联环境建模模块提供的可视化建模界面配置SUT的仿真测试环境,然后将配置好的测试环境存成XML格式文件;通过测试面板配置模块提供的可视化界面选择需要的控件;使用Python语言编写文本格式的测试脚本文件,脚本中描述一个或多个测试用例的操作;测试管理模块接受用户的指令开始自动化测试,通知多任务调度模块测试开始,多任务调度模块调用所述的XML文件中的配置信息动态生成仿真交联设备模型,交联设备模型通过接口驱动模块和SUT相联,然后,多任务调度模块将所述的测试脚本文件提交给测试脚本解释器进行解释执行,测试脚本解释器根据所述的测试脚本中描述的测试任务的属性向多任务调度模块提交任务,多任务调度模块将这些测试任务记录下来,统一调度,多任务调度模块根据其记录的测试任务内容通过交联设备模型、接口驱动模块向SUT施加测试激励,STU将反馈数据通过接口驱动模块传递给数据收集模块存储,测试报告生成模块根据用户指令将数据收集模块收集到的数据生成测试报告。2.权利要求1所述的系统,其特征在于所述的交联环境建模模块包括界面工具包提供可视化页面,供测试者对SUT的交联设备进行建模;模型类库用来存储通过用户界面获得模型的相关信息;测试者通过所述的界面工具包提供的可视化界面对SUT的交联设备进行配置、建模,然后存储到所述的模型类库,通过所述的模型类库中的存储函数把模型的相关信息存储到XML格式的文件中。3.权利要求2所述的系统,其特征在于所述的交联环境建模模块的界面工具包采用MFC的界面工具包提供可视化界面,在可视化界面中可以配置交联环境图,在交联环境图中采用矩形节点表示交联设备,节点间的连线表示设备之间的接口通讯,所述的接口可以是如下总线接口:RS-422,RS-232,AI,AO,DI,DO,ARINC-429,连线上可配置接口变量,配置完接口变量,可以根据用户的需求对变量的属性进行配置,这些变量属性包括传输类型,周期,变量类型,初始值等;所述的变量类型是Block类型;所述的交联环境建模模块为每个模型节点和连接分别绑定一个唯一的UUID,并且记录其在交联环境图中的位置信息。4.权利要求1所述的系统,其特征在于所述的测试面板配置模块提供两类控件显示类和控制类,设置控制面板时,首先导入交联环境模块配置好的XML格式文件,选择需要的显示控件和控制控件,每个显示控件与一个或多个接口变量绑定起来,每个控制控件同一段测试脚本绑定起来,点击该控制控件将触发测试脚本解释器对该脚本的执行。5.权利要求1所述的系统,其特征在于所述的接口驱动模块为三层结构板卡层、10层和管理层;所述的板卡层位于驱动部分的最底层,其直接操作硬件驱动程序,完成测试数据的采集和发送;板卡层中定义了多个板卡类和通道类,每个板卡类是一种型号板卡设备的抽象,每个板卡至少包含一个通道,每个通道和一个变量相互绑定,对于变量的操作可以被视为对一个物理通道的操作;所述的10层中定义了多个10类,10类是输入输出形式的抽象,每一个10类对应一种总线接口;在10类中管理着支持该类型总线的板卡;最后,所述的管理层整体管理所有输入输出类型,并根据配置,为变量分配10端口和物理板卡通道;管理层是驱动部分和系统其它模块的接口,系统通过管理层实现对变量的分配、赋值和取值;管理层检查变量的配置信息是否合法;使用同种总线接口的板卡的信息由板卡层采集后,通过统一的接口一对应该接口的10类——由10层读取,最后由管理层上传至系统的其它模块。6.权利要求1所述的系统,其特征在于所述的数据收集模块使用了SQLite小型数据库用于测试数据的收集,存储和管理。7.权利要求6所述的系统,其特征在于所述的数据收集模块使用双缓存机制存储数据,在把主缓存中的数据写入数据库时,新收集的数据将被写入辅助缓存中,并添加保护以确保数据缓冲不会发生读写冲突,且数据缓冲和写数据库功能在不同的线程中实现,写入数据库使用了SQLite的事务机制。8权利要求1所述的系统,其特征在于所述的测试脚本在开源脚本Python的基础上作了扩展,增加了扩展模块"ts",加入针对实时嵌入式软件测试特性的描述,可以实现测试输入、获取测试反馈以及执行时间控制、测试结果判断、测试脚本的复用、测试脚本接口等功能。9.权利要求8所述的系统,其特征在于所述的测试输入通过扩展模块"ts"中提供的〃setvalue"函数来实现,“setvalue"函数可以用来对三种数据结构进行赋值,并输[tS足艮足宗f苜>窗、,10.权利要求9所述的系统,其特征在于所述的"setvalue"函数共有两个参数,第一个参数为数据结构名或数据结构句柄,第二个参数为要赋予的值,通过第一个参数进行查找,发现此变量确实存在,就调用赋值函数接口将此变量的值更新为第二个参数,否则报错,同时终止脚本运行。11.权利要求8所述的系统,其特征在于所述的获取测试反馈通过扩展模块"ts"中提供的"getvalue"函数来用于对三种数据结构的取值。12.权利要求11所述的系统,其特征在于所述的"getvalue"函数有一个参数,参数为数据结构名或数据结构句柄,输出为数据结构的值,类型为XML中定义的数据结构的类型;通过对参数进行查找,发现此变量确实存在,就调用取值函数接口获得此变量的值,否则报错,同时终止脚本运行13.权利要求8所述的系统,其特征在于所述的执行时间控制通过"ts"模块提供"register"函数将测试任务的类型、执行时间以及周期等信息注册到本发明的测试系统中来实现。14.权利要求13所述的系统,其特征在于所述的"register"函数共有四个参数,第一个参数为任务名称;第二个参数是任务的开始时间;第三个参数是任务的运行时间;第四个参数是任务的周期;所述的任务实际就是脚本中的函数,这个函数没有参数,register的第一个参数就是这个函数的函数名,register在获得函数名后,在当前的运行时环境中找到此函数对象,如果找不到解释器报错,然后终止脚本的运行;然后把它放到一个全局字典中,并把它的相关信息传给调度程序,而当调度程序需要执行此任务时,会执行函数rim_script,它有一个参数是任务名字符串在内存中的地址,函数rim_Script会通过任务名在全局字典找到函数对象,并执行此函数对象,从而实现测试任务的调度执行;后三个时间参数的单位是毫秒。全文摘要本发明公开了一种基于测试脚本技术的嵌入式系统自动化检测系统,该系统包含交联环境建模模块、测试面板配置模块、测试脚本解释器、多任务调度模块、接口驱动模块、数据收集模块、测试报告生成模块、测试管理模块,多任务调度模块根据由脚本解释器解释注册的任务,通过交联环境建模模块传递给接口驱动模块,再由接口驱动模块对被测系统施加激励,从而完成测试,其中接口驱动模块给系统提供统一的接口,本发明解决了目前的测试系统存在的通用性差、自动化程度低的缺点,并且具有二次开发的能力。文档编号G06F9/44GK101833498SQ20091016227公开日2010年9月15日申请日期2009年7月31日优先权日2009年7月31日发明者刘斌,蒋崇武申请人:北京伟晨豪嘉科技有限责任公司;刘斌;蒋崇武
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1