测试系统集成开发环境ETest的架构设计与工作原理

嵌入式系统软件配置项和系统测试时需要构建出半实物仿真测试环境(hardawre in loop simution test platform,hil),与被测系统(unit under test,uut)相连的各个外围系统的信号、总线数据报文通过hil系统产生,hil系统则接收由uut发送的各类信号和总线数据报文。建立通用化的半实物仿真测试平台是测试建设的必然选择,也是面向不同领域装备快速构建各类工装测试系统的基础。长期以来,我国在半实物仿真测试平台的建设方面主要依赖两个渠道,一是以国外进口的半实物仿真测试平台为基础进行二次开发,形成满足特定装备领域应用的测试系统;二是采用通用编程开发环境开发具体装备的测试。这两种渠道都难以形成自主可控的产业生态,不利于国家在工业基础软件方面的技术进步和发展。
etest是一款面向半实物仿真测试系统开发的国产自主可控集成开发环境,其核心是嵌入式测试领域描述语言etl(embedded test language),可完整用语言描述设备及其接口、接口连接关系、通信协议模板、操作监控面板以及测试脚本,并为etl设计和开发了智能化代码编辑器、图形化交联环境绘制工具、可视化监控面板设计工具、etl实时运行引擎等模块。etest可显著提高测试系统的开发效率,具有1 ms级实时响应性能,可以为用户提供异步操作的测试程序开发模式,在多接口上执行并发i/o,是测试系统开发的利器。
1etest的架构设计与工作原理
1.1etest的架构设计
etest技术架构设计如图1所示。
图1  etest架构设计
构成etest的核心是测试系统描述语言etl,etl描述的语义可在etl运行器上直接执行。最下层为驱动层,所有硬件板卡的驱动采用visa虚拟化仪器标准进行封装,确保硬件驱动对上服务的标准化。当采用的硬件板卡不同时,如果硬件板卡不符合visa协议标准,通过修改et-visa层的软件代码可以屏蔽不同厂家硬件板卡驱动的差异。若硬件板卡符合visa协议标准,则可以直接使用。et-visa组件的存在,使得无需更改etestx之上的软件就能快速完成采用不同硬件系统的测试工装搭建。
在驱动层之上是etestx执行器,etestx执行器实现了et-aysn异步i/o与事件循环、et-dpd协议解析器、et-engine脚本运行引擎、et-record实时记录仪、et-timer高分辨定时器、et-rttask实时任务调度、etvdman虚拟仪器管理、et-simu仿真引擎、et-debug远程调试。etestx执行器实现了在目标机之上可运行测试脚本。etestd api服务实现上位机和下位机之间的通信服务,使得上层的各类脚本可以直接运行。
etestd api远程代理运行在上位机中,处理各类测试脚本,实现测试脚本在上位机透明运行,etestd api远程代理中提供了c#、lua、python、c/c++、javascript、java等多种语言的软件开发工具包,etestd api的存在使得etestdev具有在vscode、pycharm、visual studio等通用开发平台中开发测试系统的能力,etest也在这些通用开发平台中提供了etl插件。除了可以在vscode、pycharm、visual studio等通用开发平台中使用etl插件外,etest也提供了完整的设计器,在设计器中可以完成测试环境设计、测试数据与流程设计、通信协议设计、监控界面设计、测试脚本编辑、测试数据分析等功能,采用etest设计器可以开发出完整的测试系统,从而打造属于国产自主可控的嵌入式系统测试平台开发生态。
1.2etest的运行原理
etest的核心是嵌入式测试领域专用语言etl,用于描述测试环境中各要素,包含了设备接口描述device、连接拓扑描述topology、通信协议描述protocol、操作面板描述panel、测试执行脚本语言etlua,其中device、topology、protocol、panel部分采用根、元素、元素属性的语法规则,etlua则采用lua形式的语法规则。
采用etl编写的测试程序可在etl运行器上直接执行,运行器的核心是异步事件循环,测试脚本在主循环上执行,主循环中无任何阻塞操作,所有的i/o都被异步执行,在高性能线程池中运行着异步i/o、复杂的计算模型、数学仿真模型以及远程的驱动代理,线程池与主循环之间同样采用异步通信的方式进行同步。
etest的数据流图如图2所示,使用系统时由测试需求分析人员根据被测软件的需求规格说明进行测试需求分析,形成外部接口需求、外部接口的信号与协议特征需求。测试设计人员利用etest上位机软件对外部接口需求、信号与协议特征需求进行可视化的描述,对外接口需求通过交联环境可视化绘制功能绘制出交联关系拓扑图,信号与协议特征需求通过协议可视化配置形成协议模板。测试设计人员利用etest进行测试用例设计、测试数据设计,测试用例设计与测试数据设计结果连同交联关系拓扑图、协议模板一起打包形成测试项目方案文件。
测试执行时,测试项目方案文件下载到etest下位机中,下位机执行引擎对测试脚本程序、信号与协议数据包进行解析,形成输出数据流,通过硬件接口板卡发送到被测件中。硬件接口板卡将输出数据流转换为线路信号输入到被测件中,被测件根据接收到的输入信号按照自身逻辑执行,若有输出数据,则通过被测件自身的接口输出到硬件接口板卡。硬件接口板卡将被测件输出的信号通过驱动程序转换为etest下位机执行引擎的输入数据流。etest下位机执行引擎根据测试用例设计逻辑、输入数据流、输出数据流对测试结果进行判断,形成测试结果数据,将测试结果数据向etest上位机回传。
图2  etest的数据流图
etest上位机一方面将回传的测试结果数据通过ui渲染引擎作为人机交互界面进行展示,另一方面将回传的测试结果通过报告模板与测试报告生成模块生成测试报告。
1.3测试执行绑定关系
利用etest所编写的测试程序要运行在测试执行引擎上,需要将监控页面、网络变量、连接拓扑、测试用例数据以及运行时的控制台组成有机整体,形成图3所示的测试执行绑定关系。
图3  测试执行绑定关系
测试程序是运行在测试执行引擎上的,测试执行引擎执行时可以向控制台输出调试信息,控制台通过交互命令在测试执行时调用测试程序中的函数或使用临时编写的脚本向测试执行引擎进行命令交互,以应对测试过程中的命令突发情况。
若使测试程序在测试执行引擎上有序进行,必须建立测试程序与环境拓扑的绑定关系,测试程序只有绑定到交联环境图中,才能使所编写的测试程序与交联环境拓扑图相连起来。一个测试程序只能绑定到一个环境拓扑图中,测试程序绑定环境拓扑图后,就说明该测试程序是针对怎样的测试环境进行的,实现了测试程序与测试环境分离,测试程序不再需要与测试环境紧密耦合在一起,而是通过这种绑定关系联系在一起。也就确保了测试程序能够运行在测试环境拓扑所对应的硬件设备中。 
交联环境拓扑中包含了测试设备与被测件之间的连接关系,测试设备也就是这里看到的虚拟设备,在绘制图形时会指明该测试设备有哪些接口通道、是哪种通道的类型。虚拟的测试设备需要将接口通道绑定到具体的硬件板卡上,硬件板卡通过与被测件相连,则建立了etest与被测系统之间的通信与信号连接通道。
在利用etest设计测试监控页面时,在监控页面中包含有面板、面板上有组件,监控界面需要绑定到测试用例数据上,绑定上之后监控界面就能具有测试项目的执行能力,因为测试用例数据又绑定在测试程序上。
在etest中,设计了网络变量,用于在各个执行器之间或执行器与监控界面共享网络数据,网络变量的设计使得测试程序的开发不用考虑各个执行器之间的通信,通过网络变量解决了多执行器分布式环境下变量定义的问题,在测试程序中可以如同测试程序中定义的变量一样使用网络变量,这极大地方便了多执行器之间的协同。
监控页面中的每个组件都会绑定一个网络变量,也会绑定一个动作响应函数,动作响应函数可传递网络变量作为响应参数,这样前端的监控页面就可以从组件中读取出网络变量值,并把网络变量值作为动作响应函数的参数值传递到响应函数中,在响应函数中就可以使用传入的网络变量。
2etest的开发模式
2.1etest主界面
etest采用vscode类似的布局,最左侧是功能工具栏区,从上到下依次包含测试用例脚本、监控面板、仿真模型、通信协议、连接拓扑、设备接口、项目设置、资源库、项目库等;然后是功能目录区,切换到每个功能后,该区列出该功能的目录结构组成;点击功能目录区相应的叶子节点后,中间显示出工作区,根据叶子节点的不同类型,工作区的可操作的内容会有所不同;最右侧则是属性设置区,工作区中选中某个对象后,右侧直接显示出相应的属性,可以进行属性值的设置,etest的主界面窗口如图4所示。
图4  etest的主界面窗口
在使用etlua进行测试脚本开发时,提供了etlua代码编辑器,该编辑器全面支持语法高亮、自动完成、代码块折叠、实时语法检查等,并在最右侧提供了导航图。
2.2etest的使用模式
etest提供了快速测试、自动化测试和测试系统开发3种使用模式。
快速测试使用模式通过配置测试环境和通信协议后,就可以自动生成可视化的测试页面,在测试页面中直接进行人工操作,执行快速的调试与测试。快速测试使用模式无需编程,通过简单的测试环境、信号与协议的配置,就可以开展测试工作。
自动化测试使用模式通过可视化的配置测试环境和通信协议后,设计测试用例和开发测试脚本程序,测试用例使用yaml标记语言定义测试数据,基本结构为key: value键值对象。key代表了变量名称,value可以是包括键值对象、数组、纯量的数据,也可以使用缩进表示层级关系,组成更复杂的测试用例数据。测试程序开发时,etest则提供了etlua、python、etl三种测试程序开发模式,etlua、python分别使用lua和python语法开发测试程序,etl则使用图形化的方式开发测试程序,并且可将etl测试程序同步转化为etlua语言形式的测试程序。
完成测试程序开发后,就可以开展测试用例的执行,执行时可以选择单个用例执行,也可以选择多个用例直接批量执行,执行结果在右侧控制台显示测试程序中的print信息以及elog信息。
测试系统开发使用模式是etest最强大的使用模式,在这种使用模式下,可以开发出面向不同行业应用的测试系统。利用etest开发测试系统时,下位机部分只需要开发信号采集处理板驱动程序、总线通信驱动程序,上位机部分开发可直接利用etest集成开发环境开发操作终端的测试应用软件。etest开发测试应用软件如图5所示。图5  etest开发测试应用软件
在下位机软件开发过程中,etest定义了驱动开发的标准et-visa,提供了驱动开发的规范,这使得所开发出来的板卡驱动具有一定的标准互换性。
etestd api服务、etestx执行器直接二进制复用,它们与板卡驱动以及嵌入式操作系统一起构成了测试单元可执行包,这个测试单元可执行包是完全通用的,不会因被测试对象的不同而不同。
在上位机软件开发过程中,利用测试环境编辑器开发测试环境描述,利用监控面板设计器开发检测应用软件的人机交互界面,利用测试程序编辑器开发测试程序逻辑。开发完成后,通过将这些内容与etest提供的etl语言引擎、ui渲染器、测试数据记录、测试执行调度、etestd远程代理等二进制包打包发布为测试应用软件。
虽然针对不同的测试对象所打包发布的测试应用软件整体上会有所不同,看似不具有通用性,但etl语言引擎、ui渲染器、测试执行调度、测试数据记录、测试报告生成、etestd远程代理等模块都不需要修改,改动部分只需要包括etl描述数据包即可。针对每种不同被测对象,只需要做简单的配置和脚本化的测试程序逻辑开发,就可以快速形成测试应用软件,大幅提高了开发效率,而且节省了研发经费。
在最终形成的操作终端可执行包和测试单元可执行包,按照包模块划分,共有11个模块。其中,针对不同的被测对象,软件模块需要编写的部分只有信号采集处理板驱动、总线通信板驱动、etl语言描述包3部分,通用率达到了72%。由于信号采集板驱动、总线通信板驱动可以作为系列化驱动,也可以作为通用部分看待,那么在所有的软件模块中针对不同的被检测对象,只需要更改etl语言描述包部分就可以实现,从这个意义上来讲,软件通用性达到了90.9%。通过架构设计和测试领域的组件化开发,可以将测试设备研发的工作量降低为10%。
2.3etlua开发与调试
etest提供的编程接口包括了全局api、数据缓存库ebuff、定时器库etimer、日志输出库elog、数学计算库math、数字信号处理库e_dsp、界面开发库eui、并发操作库e_sync、matlab集成库e_matlab、simulink集成库e_simulink等。这些编程接口为etest开发测试系统提供了便利。
使用etlua开发测试程序时,对于协议收发的两个基本api是write_msg和read_msg,分别用于向通道写入报文数据和从通道读出并解析出消息对象,其函数原型如下:
result=write_msg(channel,prot,msg,is_strict,option)
result=read_msg(channel,prot,tout_ms,option)
其中,channel为通道对象,prot为协议描述对象,msg为测试程序中的消息对象,msg为etlua中的dict类型。
只要在etest集成开发环境中描述出测试环境拓扑、协议模板后,测试程序就只需要操作msg以实现测试逻辑即可,通道的buffer操作以及由msg到protocal的打包与解包均由etest框架来完成。
etlua测试程序可以操作测试用例,测试用例中具有专用于开展测试的数据结构etestdata,可用如下类似的形式表示:
etestdata: {min: 0,max: 100,value: 30}
其含义是测试数据最小值为0、最大值为100、默认值为30。在测试程序中可以直接使用etestdata.getvalue(str)生成测试程序,str可以为“min”、“min+”、 “min-”、“max”、 “max+”、 “max-”以及“random”,实现出测试中的等价类、边界值以及随机值数据的产生。
etlua还提供了on_buff_recv用于订阅通道发生数据输入时的事件,其函数原型为:
on_buff_recv(channel,callback)
在callback回调函数中可以直接对数据缓存区ebuff进行操作,进行解包处理。
为进一步简化测试程序的编写,在etest的复用库中提供了onrcvfromchannel模块,用于进行协议onrcvfromchannel以及协议处理函数的注册,原型如下:
onrcvfromchannel.registerproto(proto,fun)
其中,proto为在etest中定义的协议,fun是当解析到具有该协议包的数据时,协议包的处理函数可以在这个处理函数中对接收到已经解包完成的协议包进行各种处理,如计算、界面显示、通信响应等。
有了write_msg、read_msg、on_buff_recv、etestdata以及onrcvfromchannel等机制,使得测试程序的开发既简单又有效。但即使如此,开发完成后的测试程序也难免存在错误,对测试程序调试就显得尤为重要。
测试程序需要与被测件的各个通道相连才能进行真正的调试工作,而在现实情况下,被测件并不一定能在开发测试程序时拿到,或者即使能拿到,由于被测件需要有串口、总线以及各类i/o资源以及被测件本身存在错误而导致调试困难。此时被测件的模拟以及虚拟通道就显得尤为重要。
在etest中提供了包括串口、can、di/do、ai/ao等mocker通道,用于模拟真实的通道资源,同时可以将测试程序设置为模拟被测件。通过被测件的模拟就可以驱动测试程序的调试工作,模拟被测件以一个单独控制台的形式运行在模拟执行器上,模拟被测件在接到测试程序发送的数据后,向测试程序反馈数据包,以检验测试程序在打包、解包处理中的正确性。
3etest应用案例
测试系统集成开发环境etest软件的执行器不仅具有windows、linux、银河麒麟等桌面非实时操作系统版本,也具有vxworks、rtlinux、rtx等实时操作系统版本,另外执行器可以分布在由网络组成的不同节点上,这使得etest可以搭建出从单机到多机应用的不同规模的仿真测试环境。基于etest软件,我们已开发出针对列车控制系统、核电dcs控制系统、无人机飞行控制系统、底盘电子系统等测试工装与检测设备,经过各行业测试系统开发过程的检验,etest已成为测试系统开发的利器。
某型号无人机飞行控制系统由气压空速传感器、姿态传感器、gps定位导航、飞控计算机、电源控制器、旋翼舵机等部分组成,为完成飞控系统的联调联试、性能鉴定、故障检测等任务,需要开发一款既能在无人机飞控系统研发阶段实验室使用的仿真测试系统,又能在使用维护阶段使用的检测维修设备。测试系统需要具有5路rs232、2路rs422、2路can、4路开关量、4路pwm输出、2路频率输出接口。整套测试系统软件部分采用etest作为软件开发环境,通过测试环境的连接拓扑描述出飞控计算机的连接拓扑,如图6所示。
图6 无人机飞控系统仿真测试连接拓扑
利用etest的etl协议描述语言描述涉及到的总线通信协议以及信号,如图7所示,对于协议中的字段,设置自动匹配、自动验证、自动值等属性,自动值属性在报文打包时若没有消息赋值,则采用自动值作为该字段的值,自动匹配在报文解包时用于解析出符合要求的协议报文,自动验证则对接收到的报文自动验证该字段值是否正确,这些属性为测试程序开发提供了便利。
图7 无人机飞控系统协议开发
在连接拓扑、信号与协议描述配置完成后,使用etest的测试用例数据描述、测试程序开发、测试监控窗体开发等模块,设计开发出测试用例数据、测试程序和测试监控窗体,测试监控窗体的运行界面如图8所示。
图8 无人机飞控系统测试监控窗体
etest提供了测试工装程序的打包输出功能,打包时可以通过配置界面配置系统名称、测试模式、被测设备、测试套、测试项,在测试项配置页面选择测试套、适用的测试模式、适用的被测设备后,配置该被测设备的所有测试项。在etest的ui设计管理页面,具有打包输出的工具栏按钮,执行打包输出后,可在配置的目录下生成由etestplayer.exe为主体的测试工装程序,执行etestplayer.exe可直接运行,运行后可在主界面框架的上部选择被测设备,在下部选择测试项,可调出被测设备测试项对应的测试页面,如图9所示,在该测试页面中可以开展收、发数据的测试工作。
图9 被测设备测试项测试页面
4 结论与展望
etest是首款符合atml标准的国产自主可控的仿真测试系统集成开发环境,具有跨平台的运行能力,可利用etest开发出运行于国产计算平台的测试系统,广泛应用于第三方测试机构的测试环境搭建、装备研制部门的测试工装开发以及检测设备研发单位的产品研制。作为工业基础软件,etest填补了我国在测试系统集成开发环境方面的空白,提出的etl语言具有完善的工具链,测试系统的设计与开发模式便捷、灵活,突破了领域语言定义与应用、异步事件循环调度、动态脚本实时处理、跨平台的ide架构设计与开发等多项关键技术,显著提高了测试系统的开发效率,该ide已在多个型号研制中发挥了重要作用,可以推广应用于航空、航天、船舶等领域的装备研制过程的软硬件开发调试和测试试验。期待早日建立起国产国产自主可控自动测试系统的装备开发生态,迎接工业软件中国制造的光明未来。


COVID-19大流行的到来对物联网技术发展有何影响?
射频放大器的类型及其区别_射频放大器稳定条件
rs485转PWM转换模块电流电压转PWM转换器
C++之字符串类学习的总结
stm8 halt低功耗模式
测试系统集成开发环境ETest的架构设计与工作原理
公益诉讼勘查检测一体机莱恩德LD-GS300
FPGA的ARINC429总线接口卡原理设计
润开鸿协办2023 GOTC全球开源技术峰会OpenHarmony专区
ADI院士荣登《电子设计》名人堂
百度输入法10.0版本发布:AI助聊,实现“一键帮写”的效果
捷通华声荣获《2019北京市软件企业核心竞争力评价(创新型)》
博世与庆铃汽车成立合资公司,共同开发燃料电池解决方案
开源的openharmony
为什么巨头不约而同重视渺小的智能语音开发板
华盛昌推出AC-15EX/AC-15EXS防爆型NCV非接触测电笔
美国将大力建设电动车充电站 赫尔大学开发出新型健康监控传感器
耳机diy图解 戴上后竟异常舒适
ADI举行两场在线研讨会
DARPA使用人工智能创建现实环境