一种适用于逻辑组态软件中编译器的自动化测试系统及其方法

文档序号:6640375阅读:239来源:国知局
一种适用于逻辑组态软件中编译器的自动化测试系统及其方法
【专利摘要】一种适用于逻辑组态软件中编译器自动化测试的系统及其方法。所述测试系统包括测试驱动工具、测试工具,所述测试驱动工具用于调用测试工具、完成对测试用例的测试并生成测试报告,其中所述测试用例包括待测试工程和用于描述测试过程的测试脚本文件。其中测试工具包括脚本引擎、测试夹具和在线调试模块等;测试驱动工具包括解析配置文件模块、统计模块、执行用例模块、生成报告模块和发送电子邮件模块等。基于该自动化测试系统设计的测试用例不但能够验证逻辑组态软件中编译器的正确性,还能够验证逻辑组态软件中其它一些非GUI类型模块和控制器软件的正确性。本发明可以实现只编写一次测试用例集,每当逻辑组态软件需要发布新版本时可自动执行测试用例集并生成测试报告以判断是否有编译器缺陷,提高了测试工作的效率和质量。
【专利说明】一种适用于逻辑组态软件中编译器的自动化测试系统及其方法

【技术领域】
[0001]本发明属于计算机软件测试领域,尤其涉及一种适用于逻辑组态软件中编译器自动化测试的系统及其方法,使用该测试系统,只需编写一次测试用例,每当逻辑组态软件及其控制器软件需要发布新版本时,可重新自动执行一次测试用例以判断其是否有缺陷。

【背景技术】
[0002]在工业自动化控制中,由逻辑组态软件与控制器软件(也称为上位机与下位机)组成的控制系统广泛的应用于各控制领域:如分布式控制系统(DCS)、可编程控制器(PLC)等。逻辑组态软件负责控制逻辑的建模、编译生成二进制指令并打包为sf文件,然后把Sf文件下装到控制器中,控制器软件解析该文件并执行控制逻辑进而实现控制功能。控制逻辑的二进制指令随着控制器中嵌入的微处理器不同而不同,因此需要不同的编译器后端来为特定的微处理器生成指令。
[0003]编译器是逻辑组态软件中的一个重要模块,它负责把逻辑组态模型转换成可执行指令。通常情况下编译器是可信的,但错误也是在所难免的。编译器的错误对逻辑组态软件来说是致命的,是不能容忍的。编译器的错误包括两种类型,一种是在编译过程中遇到崩溃、死循环等故障导致编译失败,另一种是不声不响地把原本正确的逻辑模型变换为错误的可执行指令。
[0004]控制器软件是控制器的重要模块,负责解析编译器生成的文件并执行控制逻辑;编译器编译出的可执行指令的正确性需要在控制器中验证。
[0005]发现编译器错误的一种有效方法是设计测试用例,然后根据测试用例手工编写测试工程,编译、下装测试工程到控制器软件中,并验证控制逻辑的执行结果是否与预期结果一致。如图1所示,图1为设计并手工执行测试用例的流程图。现有方法的缺点是:
[0006](I)测试用例是使用自然语言来描述的,描述不准确甚至错误的情况时常存在;
[0007](2)每当逻辑组态软件或者控制器软件发布新版本时,都需要重新手工执行测试用例,重复性高;
[0008](3)但是测试周期长,费时费力;
[0009](4)执行过程枯燥、执行效率低且容易出错;
[0010](5)验证逻辑模型在不同控制器上的执行结果是否一致很困难。


【发明内容】

[0011]有鉴于上述问题,本发明要解决如下的技术问题:
[0012](I)能够准确无误地描述清楚测试用例及其测试过程,且可以通过测试工具自动地执行测试用例。
[0013](2)支持自动地执行测试用例集并生成测试报告,即使测试某个用例过程中出现崩溃、死循环等故障,也完全无须人工干预。
[0014](3)支持验证逻辑模型在不同控制器上执行结果的一致性。
[0015]在介绍本申请的技术方案之前,首先对逻辑组态软件和控制器软件介绍如下:
[0016]所述逻辑组态软件是包含了编译器模块的被测软件之一,还包括在线调试模块、数据模型模块以及其它模块,提供了加载接口、编译接口以及在线调试接口等。编译模块用于把控制逻辑模型编译生成二进制指令并打包为Sf文件;在线调试模块用于连接控制器,可向控制器发送下装、在线、写入等命令,并解析控制器返回的应答信息。
[0017]所述控制器软件运行在控制器中,是被测软件之一,用于解析编译器生成的Sf文件并执行控制逻辑;通过在控制器软件中调度执行编译的二进制指令,可以验证编译器生成的二进制指令的正确性。
[0018]为实现上述目的,本申请具体采用以下技术方案:
[0019]一种适用于逻辑组态软件中编译器的自动化测试系统,其特征在于:
[0020]所述测试系统包括测试工具、测试驱动工具,所述测试驱动工具用于调用测试工具,完成对测试用例的测试并生成测试报告,其中所述测试用例包括待测试工程和用于描述测试过程的测试脚本文件。
[0021]所述测试工具包括脚本引擎、测试夹具和在线调试模块;
[0022]所述脚本引擎接收测试驱动工具所发送的需要执行控制逻辑的控制器类型和测试脚本文件全路径,解析测试脚本文件并生成结构化的测试命令;
[0023]所述测试夹具执行测试命令完成对测试用例的测试:调用逻辑组态软件接口加载待测试工程,加载待测试工程后判断是否加载成功,如果加载失败表示发现缺陷;调用逻辑组态软件接口编译待测试工程,编译待测试工程后将编译结果与预期编译结果进行比较;调用逻辑组态软件接口通过在线调试模块把编译结果下装到控制器中并运行控制逻辑,将运行的控制逻辑结果与预期控制逻辑结果进行比较。
[0024]所述在线调试模块与控制器进行交互并完成调试服务,该模块是同步执行的,是通过对逻辑组态软件中异步执行的在线调试模块进行封装得到的。
[0025]所述测试驱动工具包括解析配置文件模块、统计模块、执行测试用例模块、生成报告模块、发送电子邮件模块;
[0026]所述解析配置文件模块解析测试配置文件并生成结构化的测试配置信息;
[0027]所述执行测试用例模块将测试配置信息中的需要执行控制逻辑的控制器类型和测试脚本文件全路径传递给测试工具,测试工具对测试用例进行测试,并将测试数据返回指执行测试用例模块;当测试工具执行的过程中崩溃或者预定长时间内没有输出执行结果,执行测试用例模块强制关闭测试工具,并继续执行后续工作;
[0028]所述统计模块用于统计测试用例的执行结果;
[0029]所述生成报告模块根据返回所述执行测试用例模块的测试数据和统计模块所统计的测试用例的执行结果生成格式化的测试报告;
[0030]所述发送电子邮件模块用来通过电子邮件把测试报告发送给相关干系人,相关干系人的邮件地址在测试配置文件中描述。
[0031]所述测试配置文件用于描述测试配置信息,包括测试工具名称、测试脚本后缀、测试报告名称、需要执行控制逻辑的控制器类型、测试用例所在目录及其干系人的邮件地址。
[0032]本申请还公开了一种基于所述自动化测试系统的逻辑组态软件中编译器自动化测试方法,其特征在于,所述测试方法包括以下步骤:
[0033](I)设计并用自然语言描述测试用例;
[0034](2)根据自然语言描述的测试用例,编写待测试工程和测试脚本文件(需要在全文统一技术名称),并放置到特定的目录下形成测试用例集;
[0035](3)修改测试配置文件中相关项:测试工具名称、测试脚本后缀、测试报告名称、执行控制逻辑的控制器类型、测试用例所在目录及其干系人的邮件地址;
[0036](4)启动控制器,并连接控制器到运行所述自动化测试系统的本地主机;
[0037](5)启动测试驱动工具,调用测试工具完成对测试用例的测试;
[0038](6)查看测试报告。
[0039]利用本申请技术方案进行逻辑组态软件中编译器的集成测试,有以下好处:
[0040]1、测试人员只需设计、编写一次测试用例,之后可依赖计算机自动执行测试并生成报告,非常方便。
[0041]2、控制逻辑在不同类型控制器上运行结果的一致性能够得到有效地验证。
[0042]本发明经过逻辑组态软件NUCLIDE的集成测试中实验使用,效果良好。

【专利附图】

【附图说明】
[0043]为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍。
[0044]图1为手工测试的流程图。
[0045]图2为本发明的自动化测试系统的总体框图。
[0046]图3为使用测试用例中测试命令序列描述的测试过程流程图。
[0047]图4为测试工具中的在线调试模块实现原理图。
[0048]图5为自动化测试的流程图。

【具体实施方式】
[0049]下面结合说明书附图来说明本发明的【具体实施方式】。一种适用于逻辑组态软件中编译器自动化测试的系统的总体框图如图2所示。
[0050]所述一种适用于逻辑组态软件中编译器的自动化测试系统,所述测试系统包括测试工具、测试驱动工具,所述测试驱动工具用于调用测试工具,完成对测试用例的测试并生成测试报告,其中所述测试用例包括待测试工程和用于描述测试过程的测试脚本文件。其中测试工具和测试驱动工具是本发明技术方案密切相关的部分。
[0051]测试工具的主要功能是读取并解析命令行参数指定的脚本文件,根据脚本中描述的测试过程执行测试,并生成测试报告。
[0052]所述测试工具包括脚本引擎、测试夹具和在线调试等模块。
[0053]所述脚本引擎接收测试驱动工具所发送的需要执行控制逻辑的控制器类型和测试脚本文件全路径,解析测试脚本文件并生成结构化的测试命令,是用于描述测试过程的测试脚本的语言解析器,使用flex和bison工具实现,用于把测试脚本转换成格式化的测试命令。
[0054]所述测试夹具是用于执行测试命令序列,与预期结果比较并生成测试报告。测试命令包括加载工程(即加载待测试工程并与预期加载目标结果比较)、编译工程(即编译测试工程生成可执行文件并与预期编译目标结果)、下装工程(即把编译生成的可执行文件下装到控制器中并运行控制逻辑)、在线(即连接控制器以便进行调试)、写入变量(即修改正在执行程序中的某个变量值为特定值)、强制变量(即修改正在执行程序中的某个变量值为特定值,并禁止执行对该变量进行赋值的语句)、释放强制变量(即允许执行对该变量进行赋值的语句)、执行若干周期(即周期任务执行若干个周期后暂停)、读取变量(即读取该变量的实时值)、与预期值比较(即比较某个变量的实时值和预期值)、退出在线(即断开与控制器的连接,停止调试)等。如附图3所示,图示一个典型的测试用例使用到的测试命令及其执行过程:首先加载工程并与预期结果比较,如果不一致则报告错误;如果加载成功且与预期结果一致,则执行编译工程命令并与预期结果比较,如果不一致则报告错误;如果编译成功且与预期结果一致,则执行下装和在线操作,若失败则报告错误;如果在线成功,则执行写入、强制和释放强制操作,然后执行若干周期,读取变量实时值并与预期结果比较,如果不一致则报告错误;如果一致则执行下一组测试命令(包括写入、强制、释放强制、执行若干周期、读取变量实时值、与预期结果比较等),直至所有命令执行完后,退出在线。执行测试命令过程中需要调用逻辑组态软件中提供的工程文件加载/保存接口、编译接口,以及在线调试模块的接口。
[0055]所述在线调试模块是基于被测软件(逻辑组态软件)中在线调试模块封装的。逻辑组态软件中的在线调试模块是异步执行的,比如执行下装操作时,调用下装接口后立即返回,等下装操作完成后在线提示模块再发射一个信号告知调用方该操作已经完成。测试工具的在线调试模块是同步执行的,仍以下装操作为例,调用下装接口后并不立即返回,而是等下装操作完成后再返回。如图4所示,图4是以下装命令为例说明测试工具中的在线调试模块实现原理图,以下装操作为例,测试夹具模块调用在线调试模块的下装命令,该命令首先获取一个信号量(该操作对应的唯一信号量),然后调用逻辑组态软件中在线模块的下装操作(该操作是异步执行),接着等待再次获得该信号量,由于已经获取了该信号量,不可能再次获得该信号量,只好等待;当逻辑组态软件中在线模块的下装操作命令完成后,释放该信号量,测试工具中在线模块中下装命令才能获取信号量并完成命令。通过这种方式,测试工具中在线模块中下装命令实现同步执行(需要通过文字详细介绍附图4的内容)。
[0056]所述测试驱动工具的主要功能是按照测试配置文件的要求,通过调用测试工具,完成对测试用例集的测试并生成测试报告。
[0057]所述测试驱动工具包括解析配置文件模块、统计模块、执行测试用例模块、生成报告模块、发送电子邮件模块等。测试驱动工具是Python语言开发的;Python是一种面向对象、解释型计算机程序设计语言。Python语法简洁而清晰,具有丰富和强大的类库,它能够把用其它语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。
[0058]所述解析配置文件模块是使用Python的ConfigParser模块来实现的,所述解析配置文件模块解析测试配置文件并生成结构化的测试配置信息。
[0059]所述统计模块实现统计测试用例的数量的方法是,首先定义一个初始值为O的变量,然后在测试配置文件制定的目录及其子目录下,查找指定类型后缀(在测试配置文件中指定)的文件,每发现一个该变量就加1,该变量的最终值即为测试用例的数量。统计模块的另一个作用是在测试用例执行过程中记录测试用例的执行情况,包括测试用例是否通过以及测试报告,其记录格式为三元组(测试用例名称,是否通过,测试报告)。
[0060]所述执行测试用例模块的关键是使用subprocess模块Popen方法。如果被调用进程返回O表示测试用例通过,如果被调用进程返回I表示测试用例未通过,如果被调用进程返回其它值表示测试工具崩溃。测试工具的输出信息通过管道会送到执行测试用例模块;如果测试用例模块长时间未收到测试工具的输出信息则表明测试工具可能出现了死循环,需要强制关闭测试工具,并标记该测试用例为未通过。
[0061]所述生成报告模块是根据统计数据生成用户可读的报告格式(报告rtf、html、xml、txt 等等)。
[0062]所述发送电子邮件模块是使用Python的smtplib, email模块来实现的。
[0063]本申请还公开了一种基于所述自动化测试系统的逻辑组态软件中编译器自动化测试方法,使用一个具体实施例说明实施方式,如图5所示,图5为设计并自动执行测试用例的流程图。
[0064]所述测试方法包括以下步骤:
[0065](I)依据IEC61131-3标准及需求规格说明书设计并用自然语言描述测试用例;
[0066](2)脚本化测试用例,其过程是根据自然语言描述的测试用例,编写待测试工程和测试脚本文件,并放置到特定的目录下形成测试用例集;
[0067](3)修改测试配置文件中相关项:测试工具名称、测试脚本后缀、测试报告名称、执行控制逻辑的控制器类型、测试用例所在目录及其干系人的邮件地址;
[0068](4)启动控制器,并连接控制器到运行所述自动化测试系统的本地主机;
[0069](5)启动测试驱动工具,调用测试工具完成对测试用例的测试;
[0070](6)查看测试报告。
[0071]首先根据需求文档设计或者国际标准IEC 61131-3(定义逻辑组态软件中编译器的源语言规范的标准)设计测试用例,并使用自然语言描述测试用例。
[0072]根据自然语言描述的测试用例,编写被测工程和测试脚本。
[0073]修改测试配置文件,然后在命令行窗口输入Verify.py(测试驱动工具),测试驱动工具调用测试工具逐个执行测试用例,最终汇总成测试报告。
[0074]对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明实施例的精神或范围的情况下,在其它实施例中实现。因此,本发明实施例将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
【权利要求】
1.一种适用于逻辑组态软件中编译器的自动化测试系统,其特征在于: 所述测试系统包括测试工具、测试驱动工具,所述测试驱动工具用于调用测试工具,完成对测试用例的测试并生成测试报告,其中所述测试用例包括待测试工程和用于描述测试过程的测试脚本文件。
2.根据权利要求1所述的自动化测试系统,其特征在于: 所述测试工具包括脚本引擎、测试夹具和在线调试模块; 所述脚本引擎接收测试驱动工具所发送的需要执行控制逻辑的控制器类型和测试脚本文件全路径,解析测试脚本文件并生成结构化的测试命令; 所述测试夹具执行测试命令完成对测试用例的测试:调用逻辑组态软件接口加载待测试工程,加载待测试工程后判断是否加载成功,如果加载失败表示发现缺陷;调用逻辑组态软件接口编译待测试工程,编译待测试工程后将编译结果与预期编译结果进行比较;调用逻辑组态软件接口通过在线调试模块把编译结果下装到控制器中并运行控制逻辑,将运行的控制逻辑结果与预期控制逻辑结果进行比较; 所述在线调试模块与控制器进行交互并完成调试服务,该模块是同步执行的。
3.根据权利要求2所述的自动化测试系统,其特征在于: 所述测试驱动工具包括解析配置文件模块、统计模块、执行测试用例模块、生成报告模块、发送电子邮件模块; 所述解析配置文件模块解析测试配置文件并生成结构化的测试配置信息; 所述执行测试用例模块将测试配置信息中的需要执行控制逻辑的控制器类型和测试脚本文件全路径传递给测试工具,测试工具对测试用例进行测试,并将测试数据返回给执行测试用例模块;当测试工具执行的过程中崩溃或者预定长时间内没有输出执行结果,执行测试用例模块强制关闭测试工具,并继续执行后续工作; 所述统计模块用于统计测试用例的执行结果; 所述生成报告模块根据返回所述执行测试用例模块的测试数据和统计模块所统计的测试用例的执行结果生成格式化的测试报告; 所述发送电子邮件模块用来通过电子邮件把测试报告发送给相关干系人,相关干系人的邮件地址在测试配置文件中描述。
4.根据权利要求3所述的自动化测试系统,其特征在于: 所述测试配置文件用于描述测试配置信息,包括测试工具名称、测试脚本后缀、测试报告名称、需要执行控制逻辑的控制器类型、测试用例所在目录及其干系人的邮件地址。
5.基于权利要求1-4所述自动化测试系统的逻辑组态软件中编译器自动化测试方法,其特征在于,所述测试方法包括以下步骤: (1)设计并用自然语言描述测试用例; (2)根据自然语言描述的测试用例,编写待测试工程和测试脚本文件,并放置到特定的目录下形成测试用例集; (3)修改测试配置文件中相关项:测试工具名称、测试脚本后缀、测试报告名称、执行控制逻辑的控制器类型、测试用例所在目录及其干系人的邮件地址; (4)启动控制器,并连接控制器到运行所述自动化测试系统的本地主机; (5)启动测试驱动工具,测试工具完成对测试用例的测试;
(6)查看测试报告。
【文档编号】G06F11/36GK104516818SQ201410836381
【公开日】2015年4月15日 申请日期:2014年12月29日 优先权日:2014年12月29日
【发明者】王沿海, 刘刚, 黄磊, 徐延明, 李维, 师嘉, 魏莹 申请人:北京四方继保自动化股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1