文件序列处理方法、装置、终端设备及存储介质与流程

文档序号:24165734发布日期:2021-03-05 17:52阅读:73来源:国知局
1.本申请属于计算机
技术领域
:,尤其涉及一种文件序列处理方法、装置、终端设备及存储介质。
背景技术
::2.目前,常常存在着一些用于形式化描述测试序列的源文件,例如开放式测试序列交换(opentestsequenceexchange,otx)源文件。otx源文件是基于iso13209标准,通过可扩展标记语言(extensiblemarkuplanguage,xml)形式化描述了车辆自动诊断流程的标准化测试序列的文件,从而方便诊断通信过程的数据格式统一。3.然而,现有的解析工具,例如xml解析工具只能将源文件中的数据进行简单的数据读取,导致源文件中的测试序列无法实际运行。技术实现要素:4.有鉴于此,本申请实施例提供了文件序列处理方法、装置、终端设备及存储介质,以解决现有技术中如何让源文件中的测试序列能够实际运行的问题。5.本申请实施例的第一方面提供了一种文件序列处理方法,包括:6.获取源文件;7.解析所述源文件,记录所述源文件中各个节点标签的顺序并为各个所述节点标签设置对应的节点对象,所述节点对象用于存储所述节点标签包含的内容;8.为动作节点标签对应的所述节点对象设置对应的接口函数,所述动作节点标签为所述节点标签中用于描述测试动作的节点标签;所述接口函数用于实现所述动作节点标签描述的测试动作;9.根据记录的所述节点标签的顺序按序组合所述接口函数,得到所述源文件对应的程序文件;所述程序文件为能够编译并生成可执行的测试序列的代码文件。10.可选地,所述解析所述源文件,记录所述源文件中各个节点标签的顺序并为各个所述节点标签设置对应的节点对象,包括:11.解析所述源文件;12.若解析到动作节点标签,则将所述动作节点标签包含的内容与全局容器中存储的已创建节点对象进行比对,确定比对结果;所述已创建节点对象为已创建并存储的节点对象;13.若所述比对结果为所述全局容器中存在目标节点对象,则将所述动作节点标签的唯一标识信息及所述目标节点对象的指针对应存储至所述全局容器中,完成所述动作节点标签的节点对象的设置;其中,所述目标节点对象为包含的内容与所述动作节点标签包含的内容一致的已创建节点对象。14.可选地,在所述若解析到动作节点标签,则将所述动作节点标签包含的内容与全局容器中存储的已创建节点对象进行比对,确定比对结果之后,还包括:15.若所述比对结果为所述全局容器中不存在目标节点对象,则根据所述动作节点标签包含的内容,为所述动作节点标签创建对应的节点对象,并将所述节点对象作为当前的已创建节点对象进行存储;16.将所述动作节点标签的唯一标识信息及所述当前的已创建节点对象的指针对应存储至所述全局容器中,完成所述动作节点标签的节点对象的设置。17.可选地,所述若解析到动作节点标签,则将所述动作节点标签包含的内容与全局容器中存储的已创建节点对象进行比对,确定比对结果,包括:18.将所述动作节点标签包含的内容存储于临时节点对象中,所述临时节点对象为临时存储当前解析到的动作节点标签包含的内容的节点对象;19.将所述临时节点对象与所述全局容器中存储的各个已创建节点对象的类型信息进行比对;20.若所述全局容器不存在与所述临时节点对象的类型信息一致的已创建节点对象,则确定比对结果为:所述全局容器中不存在目标节点对象。21.可选地,在所述将所述临时节点对象与所述全局容器中存储的各个已创建节点对象的类型信息进行比对之后,还包括:22.若所述全局容器存在与所述临时节点对象的类型信息一致的已创建节点对象,则将所述临时节点对象与所述已创建节点对象分别所占用的内存大小进行比对;23.若所述临时节点对象与所述已创建节点对象所占用的内存大小不一致,则确定比对结果为:所述全局容器中不存在目标节点对象。24.可选地,在所述将所述临时节点对象与所述已创建节点对象分别所占用的内存大小进行比对之后,还包括:25.若所述临时节点对象与所述已创建节点对象所占用的内存大小一致,则将所述临时节点对象所包含的内容与所述已创建节点对象所包含的内容一一进行比对;26.若所述临时节点对象所包含的内容与所述已创建节点对象所包含的内容一致,则确定比对结果为:所述全局容器中存在目标节点对象;否则,确定比对结果为:所述全局容器中不存在目标节点对象。27.可选地,在所述获取源文件之后,还包括:28.若检测到所述源文件的文件名包含预设功能标识,则从存储单元中获取与所述预设功能标识对应的模板代码作为目标代码;所述模板代码为提前为具有预设功能标识的一类源文件创建的代码;29.获取所述源文件的文件名包含的电子控制单元ecu名称,将所述ecu名称作为传入参数;30.将所述传入参数传入所述目标代码,得到所述源文件对应的程序文件。31.本申请实施例的第二方面提供了一种文件序列处理装置,包括:32.源文件获取单元,用于获取源文件;33.解析单元,用于解析所述源文件,记录所述源文件中各个节点标签的顺序并为各个所述节点标签设置对应的节点对象,所述节点对象用于存储所述节点标签包含的内容;34.接口函数设置单元,用于为动作节点标签对应的所述节点对象设置对应的接口函数,所述动作节点标签为所述节点标签中用于描述测试动作的节点标签;所述接口函数用于实现所述动作节点标签描述的测试动作;35.接口函数组合单元,用于根据记录的所述节点标签的顺序按序组合所述接口函数,得到所述源文件对应的程序文件;所述程序文件为能够编译并生成可执行的测试序列的代码文件。36.可选地,所述解析单元包括解析模块、比对模块及第一节点对象设置模块:37.解析模块,用于解析所述源文件;38.比对模块,用于若解析到动作节点标签,则将所述动作节点标签包含的内容与全局容器中存储的已创建节点对象进行比对,确定比对结果;所述已创建节点对象为已创建并存储的节点对象;39.第一节点对象设置模块,用于若所述比对结果为所述全局容器中存在目标节点对象,则将所述动作节点标签的唯一标识信息及所述目标节点对象的指针对应存储至所述全局容器中,完成所述动作节点标签的节点对象的设置;其中,所述目标节点对象为包含的内容与所述动作节点标签包含的内容一致的已创建节点对象。40.可选地,所述解析单元还包括第二节点对象设置模块,用于若所述比对结果为所述全局容器中不存在目标节点对象,则根据所述动作节点标签包含的内容,为所述动作节点标签创建对应的节点对象,并将所述节点对象作为当前的已创建节点对象进行存储;将所述动作节点标签的唯一标识信息及所述当前的已创建节点对象的指针对应存储至所述全局容器中,完成所述动作节点标签的节点对象的设置。41.可选地,所述比对模块具体用于将所述动作节点标签包含的内容存储于临时节点对象中,所述临时节点对象为临时存储当前解析到的动作节点标签包含的内容的节点对象;将所述临时节点对象与所述全局容器中存储的各个已创建节点对象的类型信息进行比对;若所述全局容器不存在与所述临时节点对象的类型信息一致的已创建节点对象,则确定比对结果为:所述全局容器中不存在目标节点对象。42.可选地,所述比对模块,还用于若所述全局容器存在与所述临时节点对象的类型信息一致的已创建节点对象,则将所述临时节点对象与所述已创建节点对象分别所占用的内存大小进行比对;若所述临时节点对象与所述已创建节点对象所占用的内存大小不一致,则确定比对结果为:所述全局容器中不存在目标节点对象。43.可选地,所述比对模块,还用于若所述临时节点对象与所述已创建节点对象所占用的内存大小一致,则将所述临时节点对象所包含的内容与所述已创建节点对象所包含的内容一一进行比对;若所述临时节点对象所包含的内容与所述已创建节点对象所包含的内容一致,则确定比对结果为:所述全局容器中存在目标节点对象;否则,确定比对结果为:所述全局容器中不存在目标节点对象。44.可选地,所述文件序列处理装置还包括:45.文件名检测单元,用于若检测到所述源文件的文件名包含预设功能标识,则从存储单元中获取与所述预设功能标识对应的模板代码作为目标代码;所述模板代码为提前为具有预设功能标识的一类源文件创建的代码;46.ecu名称确定单元,用于获取所述源文件的文件名包含的电子控制单元ecu名称,将所述ecu名称作为传入参数;47.参数传入单元,用于将所述传入参数传入所述目标代码,得到所述源文件对应的程序文件。48.本申请实施例的第三方面提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,当所述处理器执行所述计算机程序时,使得终端设备实现如所述文件序列处理方法的步骤。49.本申请实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,当所述计算机程序被处理器执行时,使得终端设备实现如所述文件序列处理方法的步骤。50.本申请实施例的第五方面提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行上述第一方面中任一项所述文件序列处理方法的步骤。51.本申请实施例与现有技术相比存在的有益效果是:本申请实施例中,在解析源文件时,记录源文件中各个节点标签的顺序并为各个节点标签设置对应的节点对象,之后为动作节点标签对应的节点对象设置能够实现具体测试动作的接口函数,并按照之前记录的节点标签的顺序组合各个接口函数,得到能够编译生成可执行的测试序列的代码文件。由于通过前述步骤将源文件中形式化描述测试动作的动作节点标签转化为对应的接口函数,并按照源文件中的测试序列顺序(即节点标签的顺序)来组合各个接口函数,因此能够准确地将用于描述测试序列的源文件转化为可编译执行的程序文件,使得源文件中描述的测试序列最终能够实际运行。附图说明52.为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。53.图1是本申请实施例提供的一种文件序列处理方法对应的应用场景示意图;54.图2是本申请实施例提供的一种文件序列处理方法的实现流程示意图;55.图3是本申请实施例提供的一种动作节点标签的示意图;56.图4是本申请实施例提供的另一种动作节点标签的示意图;57.图5是本申请实施例提供的一种文件序列处理装置的示意图;58.图6是本申请实施例提供的终端设备的示意图。具体实施方式59.以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。60.为了说明本申请所述的技术方案,下面通过具体实施例来进行说明。61.应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。62.还应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。63.还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。64.如在本说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。[0065]另外,在本申请的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。[0066]图1示出了本申请实施例的一种文件序列处理方法对应的应用场景示意图,包括车辆诊断测试平台11、诊断测试装置12及车辆13。其中,车辆诊断测试平台11与所述诊断测试装置12建立通信连接,诊断测试装置12与车辆13的车载自动诊断系统(onboarddiagnostics,obd)接口131连接。该车辆诊断测试平台11可以通过本申请实施例的文件序列处理方法,获取源文件,解析源文件,记录该源文件中各个节点标签的顺序并为各个节点标签设置对应的节点对象;为动作节点标签对应的节点对象设置对应的接口函数,并根据记录的节点标签的顺序按序组合各个接口函数,得到对应的程序文件。之后,车辆诊断测试平台11可以编译该程序文件,得到测试序列(具体为车辆测试序列)对应的可执行文件,并通过运行该可执行文件,控制诊断测试装置12执行该车辆测试序列中的各个测试动作,完成对车辆13的诊断测试。可选地,本申请实施例中的车辆诊断测试平台11具体可以分为服务平台及用户平台,诊断测试装置12具体与该用户平台连接;服务平台通过本申请实施例的文件序列处理方法得到程序文件后,可以提交给用户平台,由用户平台对该程序文件进行编译得到对应的包含可执行的车辆测试序列的可执行文件,之后,用户平台通过该可执行文件控制诊断测试装置12执行该车辆测试序列。可选地,本申请实施例中的诊断测试装置12能够直接运行可执行的车辆测试序列,当车辆诊断测试平台11编译程序文件生成包含可执行的车辆测试序列的可执行文件后,可以直接将该可执行文件发送至该诊断测试装置12,诊断测试装置12运行该可执行文件来执行车辆测试序列中的各个测试动作,完成对车辆13的诊断测试。上述的车辆诊断测试平台、服务平台、用户平台等具体为运行于终端设备的软件平台。[0067]实施例一:[0068]图2示出了本申请实施例提供的一种文件序列处理方法的流程示意图,本申请实施例的执行主体为终端设备,详述如下:[0069]在s201中,获取源文件。[0070]本申请实施例中,源文件为形式化描述(例如通过xml语言描述)测试序列的文件,包括但不限于otx源文件、开放式诊断数据交换(opendiagnosticdataexchange,odx)源文件和xml源文件,其中测试序列由执行某些测试工作(例如车辆诊断测试)所需的各个测试动作组成。该源文件只能形式化描述测试序列,不能直接供应用程序调用执行相应的测试动作。终端设备可以从自身的存储单元获取源文件,或者从其它设备、或者网络下载得到该源文件。示例性地,当源文件具体为otx源文件时,可以通过读取待测车辆的厂家提供的存储了该待测车辆的各个源文件的可读存储介质来获取源文件,或者,可以通过获取待测车辆的车型信息,根据该车型信息从网站上下载该待测车辆对应的源文件,从而获取到源文件。[0071]在s202中,解析所述源文件,记录所述源文件中各个节点标签的顺序并为各个所述节点标签设置对应的节点对象,所述节点对象用于存储所述节点标签包含的内容。[0072]具体地,源文件可以为xml格式,源文件中描述的各个测试相关的数据通过各级的节点标签进行封装存储。具体地,当源文件为otx源文件时,源文件的根节点标签为<otx>,一级节点标签可以包括用于封装元数据的元数据标签<metadata>、用于封装变量集合的变量声明标签<declarations>、用于封装流程集合的流程集合节点标签<procedures>。其中,各个一级节点标签封装的内容可以进一步包括下一级节点标签——二级节点标签,各个二级节点标签可以进一步包括下一级节点标签——三级节点标签等,以此类推。例如,流程集合节点标签<procedures>对应的二级节点标签可以包括各个用于封装单个具体流程信息的流程节点标签<procedure>;流程节点标签<procedure>对应的三级节点标签可以包括各个用于封装单个测试动作的信息的动作节点标签<action>。[0073]本申请实施例中,可以通过第三方xml解析工具(例如开源的xerces-c解析工具)来解析该xml格式的源文件,将源文件各级节点标签中的内容解析出来进行存储。具体地,在xml解析工具依次解析各个节点标签时,记录各个节点标签的顺序,并为各个节点标签设置对应的节点对象,通过该节点对象存储该节点标签中包含的内容(即节点标签封装的内容)。具体地,若本申请实施例中最终需要生成的程序文件为c++代码文件,则该节点对象具体为用于存储节点标签包含的内容的c++对象。[0074]具体地,源文件中的各个节点标签都存在着各自对应的唯一标识信息(例如唯一标识号id),可以通过将各个节点标签的次序序号及对应的唯一标识信息(例如唯一标识号id)对应存储,从而实现各个节点标签的顺序的记录。可选地,可以通过关联容器map节点标签的序号及其唯一标识信息的对应存储。本申请实施例中的关联容器map通过存储各个类似于<key,value>的键值对来实现两个数据的映射存储。为了以示区别,将此处的关联容器称为第一关联容器map1,当xml解析工具解析到一个节点标签时,将当前的次序序号作为key值,将该节点标签的唯一标识号作为value值,存入该第一关联容器map1中,再为该节点标签设置对应的节点对象。当解析完成时,该第一关联容器即完整记录了该源文件中各个节点标签的顺序。其中,该次序序号随着解析到的节点标签的个数递增,例如,解析到第一个节点标签时,该次序序号为1,解析到第二个节点标签时,该次序序号递增为2,解析到第三个节点标签时,该次序序号递增为3,以此类推。[0075]可选地,在为各个节点标签设置对应的节点对象后,可以将该节点标签的唯一标识信息及对应的节点对象的指针绑定存储,以便之后能够实现对该节点对象的准确查找或者调用。例如,可以通过第二关联容器map2来实现各个节点标签的唯一标识信息及对应的节点对象的指针映射存储。[0076]在s203中,为动作节点标签对应的所述节点对象设置对应的接口函数,所述动作节点标签为所述节点标签中用于描述测试动作的节点标签;所述接口函数用于实现所述动作节点标签描述的测试动作。[0077]如步骤s202对源文件的相关介绍,源文件的节点标签中,存在着用于封装单个测试动作的信息的动作节点标签<action>,即,该动作节点标签为源文件的节点标签中用于描述测试动作的节点标签。对于动作节点标签,除了设置对应的节点对象来存储动作节点标签包含的数据外,还需进一步为该动作节点标签对应的节点对象设置对应的接口函数,通过该接口函数实现动作节点描述的测试动作。[0078]具体地,本申请实施例中预存了各种用于实现具体测试动作的接口函数,各个接口函数的函数名与动作节点标签中的名称属性信息一致或者相对应,通过获取动作节点标签对应的节点对象中的名称属性信息,为该动作节点标签对应的节点对象选择与该名称属性信息匹配的接口函数,并将该动作节点标签对应的节点对象中存储的参数信息作为传入参数传入该接口函数,从而完成该节点对象的接口函数设置。[0079]可选地,本申请实施例中,在为动作节点标签对应的节点对象设置对应的接口函数后,将动作节点标签的节点对象的指针及该接口函数的指针绑定存储,从而记录该动作节点的节点标签对应的节点对象与接口函数的对应关系。例如,可以通过第三关联容器map3来实现动作节点标签的节点对象的指针与对应设置的接口函数的指针的映射存储。[0080]在s204中,根据记录的所述节点标签的顺序按序组合所述接口函数,得到所述源文件对应的程序文件;所述程序文件为能够编译并生成可执行的测试序列的代码文件。[0081]本申请实施例中,根据步骤s201中记录的节点标签的顺序,以及通过步骤s203接口函数设置后,按照记录的节点标签的顺序按序组合各个接口函数,得到源文件对应的程序代码。[0082]具体地,可以结合上述的第一关联容器map1、第二关联容器map2、第三关联容器map3,最终确定次序序号与接口函数的指针的对应关系,从而按次序来组合各个接口函数。具体地,包括:步骤a1,通过map1来确定当前次序的节点标签的唯一标识号;步骤a2,根据该唯一标识号查询map2来确定当前次序对应的节点对象的指针;步骤a3,根据该节点对象的指针查询map3确定当前次序对应的接口函数的指针;步骤a4,根据该接口函数的指针调用该接口函数;步骤a5,以向下一个次序作为接下来的当前次序,返回步骤a1继续组合下一个接口函数。[0083]可选地,上述的按序组合各个接口函数具体为在待生成的程序文件中按序声明各个接口函数(即按序写入各个接口函数的函数名及传入参数信息)。之后,需要通过提前写好各个接口函数的具体执行代码的转代码工具,将按序声明的各个接口函数转化为实际的代码(例如c++代码),从而生成最终的程序代码。可选地,设程序代码为c++形式的代码,则根据转代码工具可以生成源文件对应的.cpp文件,并自动生成该.cpp文件对应的.h文件,最终的程序文件包括该.cpp文件及.h文件。可选地,若当前的源文件存在着对应的包名目录或者对其它源文件数据的引用,则该转代码工具还对应地自动在该.cpp文件写入相关的声明引用信息。[0084]本申请实施例中,在解析源文件时,记录源文件中各个节点标签的顺序并为各个节点标签设置对应的节点对象,之后为动作节点标签对应的节点对象设置能够实现具体测试动作的接口函数,并按照之前记录的节点标签的顺序组合各个接口函数,得到能够编译生成可执行的测试序列的代码文件——程序文件。由于通过前述步骤将源文件中形式化描述测试动作的动作节点标签转化为对应的接口函数,并按照源文件中的测试序列顺序(即节点标签的顺序)来组合各个接口函数,因此能够准确地将用于描述测试序列的源文件转化为可编译执行的程序文件,使得源文件中描述的测试序列最终能够实际运行。[0085]可选地,上述的步骤s202包括:[0086]s20201:解析所述源文件;[0087]s20202:若解析到动作节点标签,则将所述动作节点标签包含的内容与全局容器中存储的已创建节点对象进行比对,确定比对结果;所述已创建节点对象为已创建并存储的节点对象;[0088]s20203:若所述比对结果为所述全局容器中存在目标节点对象,则将所述动作节点标签的唯一标识信息及所述目标节点对象的指针对应存储至所述全局容器中,完成所述动作节点标签的节点对象的设置;其中,所述目标节点对象为包含的内容与所述动作节点标签包含的内容一致的已创建节点对象。[0089]在步骤s20201中,通过xml解析工具开始解析源文件。[0090]在步骤s20202中,当解析到动作节点标签,即字段为<action>的标签时,将该动作节点标签包含的内容和全局容器中存储的已创建节点对象进行比对,确定比对结果。其中,全局容器用于存储已创建节点对象的信息,具体用于将已解析的动作节点标签的唯一标识信息及对应的已创建节点对象的指针进行对应存储。该已创建节点对象为已创建并存储的节点对象,具体是在解析到当前的动作节点标签之前,为之前解析到的节点标签创建的节点对象。具体地,该已创建节点对象具体是在之前为之前解析到的动作节点标签对应创建的节点对象。[0091]本申请实施例中,步骤s20202得出的比对结果可以包括两种情况:情况1:全局容器中存在目标节点对象;情况2:全局容器中不存在目标节点对象。本申请实施例中的目标节点对象具体为包含的内容与当前解析到的动作节点标签包含的内容一致的已创建节点对象。[0092]在步骤s20203中,当步骤s20202中得到的比对结果为全局容器中存在目标节点对象,则此时无需为当前解析到的动作节点标签创建对应的节点对象,只需直接将该目标节点对象设置为该动作节点标签对应的节点对象即可。具体地,将该动作节点标签的唯一标识信息与该目标节点对象的指针对应存储至全局容器中,即可完成对当前的动作节点标签对应的节点对象设置。[0093]本申请实施例中,由于在解析到动作节点标签时,能够先从全局容器中查找是否存在与该动作节点标签包含的内容一致的目标节点对象,当存在目标节点对象时,能够直接将该目标节点对象设置为当前解析到的动作节点标签的节点对象,而无需为该动作节点标签重新创建一个节点对象,即无需开辟不同的内存空间来存储内容一致的节点对象,从而节省了内存开销。并且,由于内存中存储的节点对象的数量减少,使得步骤s203中需要为各个节点对象设置的接口函数的操作次数变少,进而提高了文件序列处理的效率。[0094]可选地,在所述步骤s20202之后,还包括:[0095]若所述比对结果为所述全局容器中不存在目标节点对象,则根据所述动作节点标签包含的内容,为所述动作节点标签创建对应的节点对象,并将所述节点对象作为当前的已创建节点对象进行存储;[0096]将所述动作节点标签的唯一标识信息及所述当前的已创建节点对象的指针对应存储至所述全局容器中,完成所述动作节点标签的节点对象的设置。[0097]当步骤s20202中得到的比对结果为全局容器中不存在目标节点对象时,说明当前没有已创建节点对象能够表示当前解析到的动作节点标签的内容。因此,此时为该动作节点标签创建对应的节点对象来存储该动作节点标签包含的内容。创建该动作节点标签对应的节点对象后,将创建的该节点对象作为当前的已创建节点对象(即新得到的已创建节点对象)存储至内存中。[0098]之后,将该动作节点标签的唯一标识信息及该当前的已创建节点对象的指针(指针即为该当前的已创建节点对象在内存中的存储地址信息)对应存储至全局容器中,从而完成对当前的该动作节点标签的节点对象的设置。[0099]本申请实施例中,具体在全局容器中不存在目标节点对象时,创建一个节点对象来存储当前解析到的动作节点标签的内容,从而保证各个内容不一致的动作节点标签的内容都能够有效地被存储。[0100]示例性地,设源文件的第一个动作节点标签称为action1,第二动作节点标签称为action2,第三个动作节点标签称为action3。当解析到action1时,为action1创建对应的节点对象action1并存储至内存空间中,此时action1即为已创建节点对象,同时将action1的唯一标识信息与当前的已创建节点对象action1的指针对应存储全局容器中,完成对当前的动作节点标签action1的节点对象的设置。当解析到action2时,节点对象action1即为当前全局容器已存储的已创建节点对象,此时将action2包含的内容与节点对象action1包含的内容进行比较,若二者的内容不一致,则比对结果为全局容器中不存在当前动作节点标签action2对应的目标节点对象,因此为该action2创建对应的节点对象action2并存储,此时action2即为当前的已创建节点对象,同时将action2的唯一标识信息与当前的已创建节点对象action2对应存储至全局容器中,完成对当前的动作节点标签action2的节点对象的设置。当解析到action3时,节点对象action1、节点对象action2均为当前全局容器中已存储的已创建节点对象,此时将动作节点标签action3包含的内容分别与节点对象action1包含的内容、节点对象action2包含的内容进行比较,若动作节点标签action3包含的内容与节点对象action1包含的内容一致,则将节点对象action1确定为当前的目标节点对象,因此将action3的唯一标识信息与当前的目标节点对象——action1对应存储至全局容器中,从而完成对当前的动作节点标签action3的节点对象的设置。[0101]示例性地,源文件中存在多个用于描述获取负响应信息的动作的动作节点标签(为了方便描述,称为负响应获取动作标签),例如图3、图4即为同一个源文件中存在的两个负响应获取动作标签。这些负响应获取动作标签封装的指定内容(这里的内容具体指<action>标签的子标签结构以及<realisation>子标签封装的内容)通常为一致的,因此在第一次解析到这种负响应获取动作标签时,可以为该第一次解析到的负响应获取动作标签创建对应的负响应获取节点对象。之后,在第二次及第二次之后解析到类似的负响应获取动作标签时,无需重新创建负响应获取节点对象,而只需将第一次创建的负响应获取节点对象作为目标节点对象,完成对应的节点对象的设置即可。[0102]可选地,所述步骤s20202,包括:[0103]将所述动作节点标签包含的内容存储于临时节点对象中,所述临时节点对象为临时存储当前解析到的动作节点标签包含的内容的节点对象;[0104]将所述临时节点对象与所述全局容器中存储的各个已创建节点对象的类型信息进行比对;[0105]若所述全局容器不存在与所述临时节点对象的类型信息一致的已创建节点对象,则确定比对结果为:所述全局容器中不存在目标节点对象。[0106]本申请实施例中,当解析到一个动作节点标签时,具体会先将该动作节点标签的内容存储于临时节点对象中,该临时节点对象只用于临时存储当前解析到的动作节点标签包含的内容,并不会像已创建节点对象一样对数据进行持久保存。[0107]之后,将该临时节点对象与全局容器中存储的各个已创建节点对象的类型信息进行比对。如果该全局容器中不存在与临时节点对象的类型信息一致的已创建节点对象,即可直接确定比对结果为全局容器中不存在目标节点对象。具体地本申请实施例中,节点对象的类型具体根据其对应的节点标签包含的内容中的类型信息所确定,例如,若当前解析到的动作节点标签为如图3所示的标签,则其包含的类型信息具体为<realisation>子标签中的“type="ns:assignment"”,则可以根据该信息设置当前的临时节点对象的类型为assignment。[0108]本申请实施例中,由于直接先根据类型信息的比对来初步查找全局容器中是否存在目标节点对象,当全局容器中不存在与临时节点对象的类型信息一致的已创建节点对象时,即可直接判定当前全局容器中不存在目标节点对象,而无需对临时节点对象、已创建节点对象的所有内容进行一一比对,因此能够提高比对效率,从而提高节点对象的设置效率。[0109]可选地,在所述将所述临时节点对象与所述全局容器中存储的各个已创建节点对象的类型信息进行比对之后,还包括:[0110]若所述全局容器存在与所述临时节点对象的类型信息一致的已创建节点对象,则将所述临时节点对象与所述已创建节点对象分别所占用的内存大小进行比对;[0111]若所述临时节点对象与所述已创建节点对象所占用的内存大小不一致,则确定比对结果为:所述全局容器中不存在目标节点对象。[0112]如果临时节点对象与全局容器中存储的各个已创建节点对象的类型信息进行比对后,确定全局容器存在与当前的临时节点对象的类型信息一致的已创建节点对象,则说明当前已经初步筛选出了可能与临时节点对象一致的已创建节点对象。此时,再进一步分别获取临时节点对象的内存大小信息、已创建节点对象所占用的内存大小信息(该已创建节点对象具体为已经过初步筛选的与临时节点对象类型信息一致的已创建节点对象),并进行比对。[0113]通常,若一个节点对象与另一个节点对象所占用的内存不一致,则可以直接判定这两个节点对象包含的内容不一致。因此,本申请实施例中,当临时节点对象与所述已创建节点对象所占用的内存大小不一致时,则可直接确定比对结果为:全局容器中不存在目标节点对象。[0114]本申请实施例中,由于在初步确定全局容器中存在与当前的临时节点对象的类型信息一致的已创建节点对象后,能够进一步比较临时节点对象与该已创建节点对象的内存大小,从而进行进一步的筛查,当全局容器中不存在与临时节点对象的内存大小一致的已创建节点对象时,即可直接判定当前全局容器中不存在目标节点对象,而无需对临时节点对象、已创建节点对象的所有内容进行一一比对,因此能够提高比对效率,从而提高节点对象的设置效率。[0115]可选地,在所述将所述临时节点对象与所述已创建节点对象分别所占用的内存大小进行比对之后,还包括:[0116]若所述临时节点对象与所述已创建节点对象所占用的内存大小一致,则将所述临时节点对象所包含的内容与所述已创建节点对象所包含的内容一一进行比对;[0117]若所述临时节点对象所包含的内容与所述已创建节点对象所包含的内容一致,则确定比对结果为:所述全局容器中存在目标节点对象;否则,确定比对结果为:所述全局容器中不存在目标节点对象。[0118]当经过上述的类型信息、内存大小的初步筛查后,若全局容器中存在与当前的临时节点对象的类型信息、内存大小均一致的已创建节点对象时,则可进一步将当前的临时节点对象所包含的内容与该已创建节点对象所包含的内容一一进行比对。[0119]当比对确定临时节点对象所包含的内容与当前已创建节点对象所包含的内容一致(这里的内容一致具体可以为除标识信息以外的指定内容一致),则说明当前已经存在与当前解析到的动作节点标签的内容一致的已创建节点对象——即目标节点对象,因此将比对结果确定为全局容器中存在目标节点对象。若比对后确定临时节点对象所包含的内容与当前已创建节点对象所包含的内容不一致,则确定比对结果为全局容器中不存在目标节点对象。[0120]可选地,若动作节点标签存在子标签,临时节点对象、已创建节点对象包含下一级子对象时,则可以采用类似上述的方法,先比较下一级子对象的内存大小,当下一级子对象的内存大小相同时再比较下一级子对象的具体内容。也可以类似地对于相同的下一级子对象,可以直接引用已创建的下一级子对象。[0121]本申请实施例中,当经过类型信息、内存大小的初步筛查后,能够进一步地对当前的临时节点对象与已创建节点对象的具体内容进行一一比对,从而准确地得出比对结果,保证节点对象设置的准确性。[0122]可选地,在所述步骤s201之后,还包括:[0123]若检测到所述源文件的文件名包含预设功能标识,则从存储单元中获取与所述预设功能标识对应的模板代码作为目标代码;所述模板代码为提前为具有预设功能标识的一类源文件创建的代码;[0124]获取所述源文件的文件名包含的电子控制单元ecu名称,将所述ecu名称作为传入参数;[0125]将所述传入参数传入所述目标代码,得到所述源文件对应的程序文件。[0126]通常,在不同电子控制单元(electroniccontrolunit,ecu)对应的不同源文件中,存在一些功能类似的源文件,例如,写车辆识别号码(vehicleidentificationnumber,vin)的源文件、写网络功能的源文件,这些源文件的文件名具有相同的预设功能标识,并且其源文件中的内容基本一致,因此可以提前为各种预设功能标识对应的源文件先分别提前创建对应的代码进行存储,得到各个预设功能标识对应的模板代码。之后,当获取到一个源文件时,先检测该源文件的文件名是否包含预设功能标识,若包含,则直接从存储单元中获取与预设功能标识对应的模板代码作为当前的目标代码,而无需重新进行源文件的解析及代码实现。示例性地,写vin码功能对应的预设功能标识为“writevincode”,写网络功能对应的预设功能标识为“writenetworkcode”。[0127]本申请实施例中,在获取到模板代码作为目标代码后,还需要为目标代码传入当前的源文件对应所要操作的ecu的名称作为传入参数,从而唯一地确定当前的目标代码对应操作的ecu。通常源文件的文件名由其对应的ecu名称及功能标识组成。上述功能类似的源文件除了包含预设功能标识,还包含其自身对应的ecu名称。例如,对于发动机管理系统(enginemanagementsystem,ems),其写vin码功能的源文件的文件名为:ems_writevincode;对于安全气囊控制单元(airbagcontrolunit,acu),其写vin码功能的源文件的文件名为:acu_writevincode。因此,可以通过源文件的文件名来获取其中包含的ecu名称,并将该ecu名称作为当前的目标代码对应的传入参数。[0128]之后,将该传入参数传入该目标代码中,即可得到当前的源文件对应的程序文件。[0129]本申请实施例中,由于对于具有相同功能的源文件,提前设置了对应的模板代码,使得在检测到当前的源文件的文件名包含预设功能标识时,即可直接通过模板代码来快速得到源文件的程序文件,从而提高测试序列的处理效率。[0130]可选地,在上述步骤s204之后,还包括:[0131]对得到的该程序文件进行编译;[0132]若编译不成功,则根据日志信息调整所述程序文件中的代码,已解决编译问题。[0133]可选地,在上述对得到的该程序文件进行编译之后,还包括:[0134]若编译成功,则得到该程序文件对应的可执行文件或者动态链接库;[0135]加载其它预设模块,调用该可执行文件或者动态链接库,实现对应的诊断流程。[0136]示例性地,当源文件具体为otx源文件时,该其它预设模块具体可以包括诊断软件模块、显示程序模块、数据链路协议数据单元(datalinkprotocoldataunit,d-pdu)模块等,这些模块具体为动态链接库(dynamiclinklibrary,dll)或者可执行文件(executablefile,exe)的形式,诊断测试装置加载这些预设模块后即可结合上述的可执行文件或者动态链接库,运行相应的进程,实现对车辆测试序列接口的调用,执行相应的诊断流程。[0137]可选地,在调用该可执行文件或者动态链接库,实现对应的诊断流程的同时还包括:[0138]记录测试过程的日志信息;[0139]根据所述日志信息调整上述的程序文件。[0140]在调用可执行文件或者动态链接库实现诊断流程的同时,记录测试序列执行的日志信息。当存在执行故障时,通过日志信息调制上述的程序文件中相应的代码段,以完善该程序文件。[0141]应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。[0142]实施例二:[0143]图5示出了本申请实施例提供的一种文件序列处理装置的结构示意图,为了便于说明,仅示出了与本申请实施例相关的部分:[0144]该文件序列处理装置包括:源文件获取单元51、解析单元52、接口函数设置单元53、接口函数组合单元54。其中:[0145]源文件获取单元51,用于获取源文件。[0146]解析单元52,用于解析所述源文件,记录所述源文件中各个节点标签的顺序并为各个所述节点标签设置对应的节点对象,所述节点对象用于存储所述节点标签包含的内容。[0147]接口函数设置单元53,用于为动作节点标签对应的所述节点对象设置对应的接口函数,所述动作节点标签为所述节点标签中用于描述测试动作的节点标签;所述接口函数用于实现所述动作节点标签描述的测试动作。[0148]接口函数组合单元54,用于根据记录的所述节点标签的顺序按序组合所述接口函数,得到所述源文件对应的程序文件;所述程序文件为能够编译并生成可执行的测试序列的代码文件。[0149]可选地,所述解析单元52包括解析模块、比对模块及第一节点对象设置模块:[0150]解析模块,用于解析所述源文件;[0151]比对模块,用于若解析到动作节点标签,则将所述动作节点标签包含的内容与全局容器中存储的已创建节点对象进行比对,确定比对结果;所述已创建节点对象为已创建并存储的节点对象;[0152]第一节点对象设置模块,用于若所述比对结果为所述全局容器中存在目标节点对象,则将所述动作节点标签的唯一标识信息及所述目标节点对象的指针对应存储至所述全局容器中,完成所述动作节点标签的节点对象的设置;其中,所述目标节点对象为包含的内容与所述动作节点标签包含的内容一致的已创建节点对象。[0153]可选地,所述解析单元52还包括第二节点对象设置模块,用于若所述比对结果为所述全局容器中不存在目标节点对象,则根据所述动作节点标签包含的内容,为所述动作节点标签创建对应的节点对象,并将所述节点对象作为当前的已创建节点对象进行存储;将所述动作节点标签的唯一标识信息及所述当前的已创建节点对象的指针对应存储至所述全局容器中,完成所述动作节点标签的节点对象的设置。[0154]可选地,所述比对模块具体用于将所述动作节点标签包含的内容存储于临时节点对象中,所述临时节点对象为临时存储当前解析到的动作节点标签包含的内容的节点对象;将所述临时节点对象与所述全局容器中存储的各个已创建节点对象的类型信息进行比对;若所述全局容器不存在与所述临时节点对象的类型信息一致的已创建节点对象,则确定比对结果为:所述全局容器中不存在目标节点对象。[0155]可选地,所述比对模块,还用于若所述全局容器存在与所述临时节点对象的类型信息一致的已创建节点对象,则将所述临时节点对象与所述已创建节点对象分别所占用的内存大小进行比对;若所述临时节点对象与所述已创建节点对象所占用的内存大小不一致,则确定比对结果为:所述全局容器中不存在目标节点对象。[0156]可选地,所述比对模块,还用于若所述临时节点对象与所述已创建节点对象所占用的内存大小一致,则将所述临时节点对象所包含的内容与所述已创建节点对象所包含的内容一一进行比对;若所述临时节点对象所包含的内容与所述已创建节点对象所包含的内容一致,则确定比对结果为:所述全局容器中存在目标节点对象;否则,确定比对结果为:所述全局容器中不存在目标节点对象。[0157]可选地,所述文件序列处理装置还包括:[0158]文件名检测单元,用于若检测到所述源文件的文件名包含预设功能标识,则从存储单元中获取与所述预设功能标识对应的模板代码作为目标代码;所述模板代码为提前为具有预设功能标识的一类源文件创建的代码;[0159]ecu名称确定单元,用于获取所述源文件的文件名包含的电子控制单元ecu名称,将所述ecu名称作为传入参数;[0160]参数传入单元,用于将所述传入参数传入所述目标代码,得到所述源文件对应的程序文件。[0161]需要说明的是,上述装置/单元之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。[0162]所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。[0163]实施例三:[0164]图6是本申请一实施例提供的终端设备的示意图。如图6所示,该实施例的终端设备6包括:处理器60、存储器61以及存储在所述存储器61中并可在所述处理器60上运行的计算机程序62,例如文件序列处理程序。所述处理器60执行所述计算机程序62时实现上述各个文件序列处理方法实施例中的步骤,例如图2所示的步骤s201至s204。或者,所述处理器60执行所述计算机程序62时实现上述各装置实施例中各模块/单元的功能,例如图5所示单元51至54的功能。[0165]示例性的,所述计算机程序62可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器61中,并由所述处理器60执行,以完成本申请。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序62在所述终端设备6中的执行过程。例如,所述计算机程序62可以被分割成源文件获取单元、解析单元、接口函数设置单元、接口函数组合单元,各单元具体功能如下:[0166]源文件获取单元,用于获取源文件。[0167]解析单元,用于解析所述源文件,记录所述源文件中各个节点标签的顺序并为各个所述节点标签设置对应的节点对象,所述节点对象用于存储所述节点标签包含的内容。[0168]接口函数设置单元,用于为动作节点标签对应的所述节点对象设置对应的接口函数,所述动作节点标签为所述节点标签中用于描述测试动作的节点标签;所述接口函数用于实现所述动作节点标签描述的测试动作。[0169]接口函数组合单元,用于根据记录的所述节点标签的顺序按序组合所述接口函数,得到所述源文件对应的程序文件;所述程序文件为能够编译并生成可执行的测试序列的代码文件。[0170]所述终端设备6可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端设备可包括,但不仅限于,处理器60、存储器61。本领域技术人员可以理解,图6仅仅是终端设备6的示例,并不构成对终端设备6的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备还可以包括输入输出设备、网络接入设备、总线等。[0171]所称处理器60可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。[0172]所述存储器61可以是所述终端设备6的内部存储单元,例如终端设备6的硬盘或内存。所述存储器61也可以是所述终端设备6的外部存储设备,例如所述终端设备6上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,所述存储器61还可以既包括所述终端设备6的内部存储单元也包括外部存储设备。所述存储器61用于存储所述计算机程序以及所述终端设备所需的其他程序和数据。所述存储器61还可以用于暂时地存储已经输出或者将要输出的数据。[0173]所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。[0174]在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。[0175]本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。[0176]在本申请所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。[0177]所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。[0178]另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。[0179]所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。[0180]以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1