本发明的技术解决问题是:克服
现有技术的不足,提供一种基于脚本的 三维建模软件自动测试方法,它考虑了三维建模软件的特点,有效地提高三 维建模软件的测试效率,且成本低。
本发明的技术解决方案:
基于脚本的三维建模软件自动测试方法,其特 征在于包括下列步骤:
(1)在回归测试管理工具的控制下,以测试用脚本作为输入启动三维 建模工具开始工作;
(2)经过三维建模工具后输出工作结果;
(3)在回归测试管理工具的控制下,利用比较工具将输出的工作结果 与标准回归测试输出文件进行比较和分析;
(4)最后将比较后的测试结论在工具界面上报告给用户。
所述的回归测试管理工具包括测试用例管理和执行引擎两个主要模
块, 测试用例管理模块管理所有的测试用例索引列表,它要进行测试用例列表的 浏览、测试用例列表的添加和测试用例列表的删除工作,测试用例索引列表 直接对应于磁盘上的回归测试索引文件,当用户下达执行命令后,测试用例 管理模块以回归测试索引文件作为输入,将磁盘上的每个测试用例送入执行 引擎模块中测试;执行引擎负责单个测试用例条目的执行,包括
进程启动、 进程监视和进程返回结果处理部分,三维建模工具与比较工具作为外部的独 立部分由进程启动部分启动,并由进程监视部分监视其执行状态,直到每个 测试用例执行结束,并根据比较结果由进程返回结果处理部分进行处理。
所述的三维建模工具
自下而上由数据层、逻辑层和表现层组成。数据层 是整个软件的核心,负责模型树的维护、环境变量的使用以及OpenFlight 文件的读写等功能;逻辑层主要由Command Center以及一组Command 组成,其功能主要是进行建模操作,对模型树进行某项修改;表现层利用 OpenGL或是DirectX,以二维、三维等多种形式对正在编辑的模型、辅助 点线面等进行实时显示输出,并允许用户对正在运行的命令提供输入。三维 建模工具作为自动化测试的对象,在逻辑层设计了专用于测试的基于脚本系 统的输入
接口。利用此输入接口,回归测试管理工具依次将每个测试用例的 输入脚本作为参数启动三维建模工具,并获取所有的输出。
所述的比较工具以两个同种类型的文件作为输入,经过比较
算法进行比 较,最终输出比较的结果。对于文本比较工具而言,输入文件必须是文本文 件,比较工具以文本行为单位进行比较操作。对于二进制比较工具或定制比 较工具而言,输入文件可以为二进制文件,比较工具以固定长度二进制数据 块或结构化数据块作为比较单位。比较算法通常为外搜索算法,相对于其他 算法,外搜索算法可以有效减少内存的占用。
本发明与现有技术相比的优点在于:
(1)三维建模工具作为自动化测试的对象,拥有专用于测试的基于脚本 系统的输入接口,利用此输入接口,回归测试管理工具依次将每个测试用例 的输入脚本作为参数启动三维建模工具,并获取所有的输出。为了建立这个 专用于测试的接口,本发明的三维建模工具采用层次结构化设计,自下而上 主要分为数据层、逻辑层与用户界面层,各个层次之间相互独立,拥有特定 的
内部接口(C++语言描述)。在内部接口之外,逻辑层还拥有以三维建模 工具脚本语言描述的另一同功能接口,这个接口就是自动化测试专用接口。 本发明在测试对象方面,与传统自动化测试最大的不同在于传统自动化测试 不要求也不能够在测试对象中为测试建立专用的模块。在传统自动化测试 中,所有测试都必须基于用户界面层次进行。而本发明打破这一限制,将自 动化测试直接建立在自动化测试对象的逻辑层或数据层,这样便解决了传统 自动化测试不适用于三维建模软件的问题,为低成本、高效率地建立高
质量 的三维建模软件建立了良好的
基础。
(2)本发明对应于每一个回归测试脚本,编辑制作对应的标准回归测试 输出文件,测试者通过比较工具对比某一次的回归测试输出与标准回归测试 输出文件,即可快速发现该次回归测试中产生的问题、错误,而且由于新需 求、固有错误或优化而进行的程序修改之后,回归测试可以快速发现系统最 新引入的错误,从而减少新错误存在的时间,降低修改错误的成本。
(3)本发明根据三维模型编辑系统的特点,设计了一组专门用于三维模 型编辑的指令集合,使用户可以更加精确的发出建模指令,同时允许用户设 计一组包括顺序、条件分支以及循环的复杂指令集,共同完成一个参数化的 建模动作。
(4)本发明为了减少手工操作,设计了回归测试程序,通过将测试脚本、 标准回归测试输出加入统一的回归测试索引文件,使回归测试可以自动进 行,进一步减小了回归测试代价,降低了系统测试成本。
附图说明
图1为本发明的自动测试方法
流程图;
图2为本发明的回归管理工具组成图;
图3为本发明的一个
实施例中的回归测试工具用户界面图;
图4为本发明中的三维建模工具组成
框架图;
图5本发明中的三维建模工具的
图形用户界面图;
图6为本发明中的一个测试用例生成的三维几何体图。
如图1所示,使用本发明方法进行自动化测试,具体的步骤为:首先用 户(测试者)启动回归测试管理工具,然后在回归测试管理工具的控制下, 令三维建模工具以测试用脚本作为输入开始工作,得到输出结果后,再通过 控制比较工具将输出结果与标准回归测试输出进行比较,最后得到回归测试 成功或失败的结论,输出比较结果。
回归测试索引文件按照条目编制,每一条目对应一项测试,条目内容包 含测试名称、此项测试的各项输入文件名等信息,具体条目如表1所示。
表1 回归测试索引文件 [Circle_01] circle01.txt circle01_out.txt 测试circle命令,缺省base plane
位置,缺省group parent [Usecase_01] usecasel.txt usecasel_out.txt 复杂的测试,Tutor chapter 2
由表1可以看出,每一个回归测试索引项由4行组成,第一行为由方括 号包围的测试用例名称,代表着一项的开始,第二行为测试的输入文件名, 第三行为测试的输出文件名,最后一行为针对此测试用例的解释。利用这样 的回归测试索引文件,用户可以方便的描述一次测试中的所有测试用例,并 且由于已经在文件中说明了输入、输入文件名,因此不需要在运行时再单独 指明,使测试过程完全无需用户参与,实现全面的自动化。
回归测试索引文件是一个文本文件,可以使用任意的
文本编辑器对其进 行编辑。
测试用脚本使用三维建模工具脚本语言书写,符合三维建模工具脚本语 言的语法,具体语法如表2所示。脚本的具体内容根据不同测试的需求而不 同。一般地,测试脚本应该假设测试脚本启动时具有一致的启动环境,同时, 为了满足回归测试的需要,在设计测试脚本的过程中,必须注意脚本运行的 运行结果要有可预期的一致性,否则不能作为回归测试脚本使用。测试脚本 的语义不受任何限制,不论是系统允许的操作或是系统不允许的操作,都可 以作为测试脚本使用。在测试系统是否能够正确处理错误的输入信息时,通 常故意使用具有不正确内容的测试脚本。
三维建模工具脚本系统的语法如表2所示,通过组合使用各种三维建模 命令,可以达到建立复杂模型的目的。
表2 三维建模工具脚本系统语法(部分) 指令 作用 Load 调入一个模型文件 Save 保存一个模型文件 New 新建一个模型文件 Exit 退出系统 List 显示模型树某一
节点的字节点列表 Query 显示模型树某一节点内容 Undo 取消一步 Redo 重做一步 Set 设置或显示环境变量 Rectangle 创建一个矩形 Circle 创建一个圆形 Sphere 创建一个球形 Wall 将平面抬高为立方体 Peak 将平面抬高为锥体 Slice 使用平面对三维对象剪切 Delete 删除模型
基于以上的脚本语法,配合适当的参数,用户可以写出多种不同的测试 脚本,并以此对系统进行充分的测试。关于测试脚本的具体写法,可以参考 下面的两个具体的例子。
比较工具比较两个文件,并指出两个文件的异同。根据具体任务的不同, 系统对比较工具有不同的要求。在对三维建模工具的文本形式的输出进行比 较时,仅使用标准的、由
操作系统提供的文本比较工具即可;但在对三维建 模工具的二进制输出进行比较,尤其是有结构化二进制比较要求的时候,需 要使用针对专用二进制格式的结构化比较工具。
在软件结构方面,比较工具以两个同种类型的文件作为输入,经过比较 算法进行比较,最终输出比较的结果。对于文本比较工具而言,输入文件必 须是文本文件,比较工具以文本行为单位进行比较操作。对于二进制比较工 具或定制比较工具而言,输入文件可以为二进制文件,比较工具以固定长度 二进制数据块或结构化数据块作为比较单位。比较算法通常为外搜索算法, 相对于其他算法,外搜索算法可以有效减少内存的占用。
标准回归测试输出为预期的测试输出。常用的标准回归测试输出文件制 作方法为使用已经编制好的测试脚本运行三维建模软件,得到输出文件。人 工检查此文件,如果其内容完全符合预期,则将此文件归档,作为未来回归 测试的标准回归测试输出使用。当然,标准回归测试输出文件也可以完全由 手工编制,不过相对比较复杂,实际使用此方法较少。
如图2所示,回归测试管理工具包括测试用例管理和执行引擎两个主要 模块,测试用例管理模块管理所有的测试用例索引列表(如表1所示),它 要进行测试用例列表的浏览、测试用例列表的添加和测试用例列表的删除工 作,测试用例索引列表直接对应于磁盘上的回归测试索引文件,在回归测试 管理工具的运行期间,所有的测试用例索引列表的数据项以vector数据结 构存储,以便顺序
访问,当用户下达执行命令后,测试用例管理模块以回归 测试索引文件作为输入,将磁盘上的每个测试用例送入执行引擎模块中测 试。回归测试索引文件按照条目编制,每一条目对应一项测试,条目内容包 含测试名称、此项测试的各项输入文件名等信息。
前面已经提到,回归测试管理工具将负责保证每一项测试启动时的系统 环境的一致性。由于每一次启动三维建模软件后,三维建模软件的内部状态 总保持一致,回归测试管理工具的保证系统环境一致性的工作体现为保证三 维建模软件的外部状态一致。这主要包括:操作系统环境变量的一致性、软 件测试目录与输入输出文件结构的一致性、其他外部参数与外部参考文件的 一致性等。
执行引擎负责单个测试用例条目的执行,它由进程启动、进程监视和进 程返回结果处理部分组成,三维建模工具与比较工具作为外部的独立部分由 进程启动部分启动,并由进程监视部分监视其执行状态,直到每个测试用例 执行结束,并根据比较结果由进程返回结果处理部分进行处理。
图3表示的为回归测试管理工具的主界面。在主界面上,可以看到所有 的测试用例索引列表,测试用例的执行情况等多种信息。
如图4所示,本发明采用的三维建模工具自下而上分别为数据层、逻辑 层和表现层。数据层是整个软件的核心,负责模型树的维护、环境变量的使 用以及OpenFlight文件的读写等功能;逻辑层主要由Command Center以 及一组Command组成,其功能主要是进行建模操作,对模型树进行某项修 改;表现层利用OpenGL或是DirectX,以二维、三维等多种形式对正在编 辑的模型、辅助点线面等进行实时显示输出,并允许用户对正在运行的命令 提供输入。
(1)数据层
DataGraph模块的功能是实现三维模型
数据库,此数据库负责存储与 管理三维模型信息。三维模型信息包括模型的几何拓扑信息;纹理、材质、 光照信息;物理信息;对象信息等等。几何拓扑信息使用树(Tree)结构进行 存储,其他信息则根据具体情况使用映射(Mapping)、向量(Vector)等数据结 构进行存储。
除了DataGraph所提供的
树形结构外,系统还需要存储一些其他的非 结构化数据。目前,这类在DataGraph之外的数据主要包括选择列表与环 境变量。
选择列表(Selection)表示了用户当前的选择状态。用户可以通过三 维图形界面或者Console访问选择列表。模型树的所有节点都可以放在选择 列表之中,使用节点ID表示。一个特殊情况是vertex list,不仅需要使用 vertex list的节点ID,而且还需要一个nVertex序号,表示选择的是第几个 vertex。
环境变量(EnvVar)允许存储一些简单的环境数据,数据一律使用字 符串进行表示。其中,系统定义了一些系统级环境变量,作为系统内部使用, 目前主要包括用于camera、base plane等的数据。虽然环境变量的外界面 使用字符串形式,但内部允许使用任意的格式进行表示,同时,表示特定环 境变量的类型必须自行提供内部类型与字符串类型相互转换的函数。在这种 情况下,允许环境变量对用户的设置进行验证,如果用户输入与要求不符, 可以拒绝用户对环境变量的修改。环境变量机制的利用,使系统中各模块耦 合降低,系统更加灵活。
(2)逻辑层
命令中心Command2Center负责代理执行所有的逻辑层命令。在命令 执行前后,命令中心将对所执行的命令进行包裹,并生成对应的undo命令。 这样,用户可以方便的使用很小的代价进行undo/redo操作。
在系统设计中,命令被分为四种类型,分别为:
COMMAND_TYPE_CREATE创建型命令,此类命令的target为命令的
父节点,在父节点下面创建一个新的模型子树。
COMMAND_TYPE_MODIFY修改型命令,修改一个模型节点,target 即为目标位置。
COMMAND_TYPE_MOD_SUBTREE修改子树型命令,修改一个子 树,target为子树的根节点ID,所有在此子树中的内容都有可能被修改。
COMMAND_TYPE_DELETE删除型命令,删除一个子树,target为子 树的根节点ID,此类指令只有唯一的一个命令:Cmd2Delete。
目前的系统中,共有10条不同的命令,分属以上的四种类型。
另外,还有四种仅用于Undo使用的Command类型,每种类型唯一对 应一个Command,分别为:
COMMAND_TYPE_UNDO_CREATE对应于Cmd2UndoCreate,用于 Undo创建型命令。
COMMAND_TYPE_UNDO_MODIFY对应于Cmd2UndoModify,用于 Undo修改型命令。
COMMAND_TYPE_UNDO_MOD_SUBTREE对应于 Cmd2UndoModSubtree,用于Undo修改子树型命令。
COMMAND_TYPE_UNDO_DELETE对应于Cmd2UndoDeiete,用于 Undo删除型命令(即Cmd2Delete)
利用Command2Center的协助,单个命令的设计得以大大简化,仅需 要考虑针对单一
指定对象、无需恢复的命令执行,而对象的选择、多对象处 理、备份与恢复等复杂的操作都由Command2Center完成,大大降低了命 令的复杂度,增强了系统的
稳定性。
(3)表现层
三维图形界面是系统中的一个复杂的组成部分,其中又分为UI_3D、 Interact以及CmdDlg三个部分。UI_3D主要负责三维图形的实时绘制, Interact负责将
鼠标在屏幕上的二维操作转化为三维空间中的操作,最后 CmdDlg负责维护一个命令对话框,允许用户交互式的使用系统提供的建模 命令。
UI_3D使用系统DataGraph中的数据进行绘制。根据用户的情况,可 以选择使用OpenGL或者DirectX作为底层的绘制引擎。如何保证绘制速度 是这里的核心问题,使用独立的RenderGraph、渲染状态集管理以及视景 体裁减等优化手段是常用的
加速渲染手段。
下面结合具体的实施例对本发明的具体测试过程。
实施例1,测试了创建一个圆形的命令。
(1)首先,输入脚本如表3所示:
表3 测试脚本输入 Circle(0,0,0),(1,1,0),12
(2)同时,还需要提供标准回归测试输出,如表4所示:
表4 标准回归测试输出 [Input]circle(0,0,0),(1,1,0),12 [Log]Command vector size:1 [Log]Inverse command vector size:1 [Result](0)Success [Input]exit
(3)在回归测试管理工具的控制下,测试输入经过三维建模软件的处理, 得到了输出结果,如表5所示输出结果;
表5 输出结果 [Input]circle(0,0,0),(1,1,0),12 [Log]Command vector size:1 [Log]Inverse command vector size:1 [Result](0)Success [Input]exit
(4)比较结果
由于此测试用例非常简单,可以直接观察发现表4与表5的内容完全相 同。而回归测试管理工具需要通过比较工具得出两个文件是否相同的结论, 如表6所示:
表6 标准测试工具的比较结果 正在比较文件D:WORKINGNOWABINTESTOUTcircle01_out.txt和 D:WORKINGNOWABINTESTOUT_STDCIRCLE01_OUT.TXT FC:找不到相异处
(5)此项回归测试通过。类似的,回归测试管理工具将根据回归测试索 引文件逐项进行测试,并将结果反映在回归测试工具的用户界面上,如图3 所示。图5表示的就是系统的主界面。在经过一个创建球体的命令以及一个 Slice(切割)命令之后,在三维界面观察的结果。
实施例2,测试了创建一个复杂几何体的过程。
(1)首先,输入脚本如表7所示:
表7 测试脚本输入 New circle(0,0,0),(10,10,0),13 peak 23,10 wall 34,10 sphere(50,0,0),(60,0,0),2 move 242,(-50,0,20) select clear select add 411,0 set def_color=″87807″ fill_color?
(2)同时,还需要提供标准回归测试输出,如表8所示:
表8 标准回归测试输出 [Input]new [Log]Clear time:0.000 seconds [Result](0)Success [Input] [Input]circle(0,0,0),(10,10,0),13 [Log]Command vector size:1 [Log]Inverse command vector size:1 [Result](0)Success [Input]peak 23,10 [Log]Command vector size:1 [Log]Inverse command vector size:1 [Result](0)Success [Input]wall 34,10 [Log]Command vector size:1 [Log]Inverse command vector size:1 [Result](0)Success [Input]sphere(50,0,0),(60,0,0),2 [Log]Command vector size:1 [Log]Inverse command vector size:1 [Result](0)Success
[Input]move 242,(-50,0,20) [Log]Command vector size:1 [Log]Inverse command vector size:1 [Result](0)Success [Input] [Input]select clear [Result](0)Success [Input]select add 411,0 [Result](0)Success [Input]set def_color=″87807″ [Result](0)Success [Input]fill_color? [Log]Command vector size:1 [Log]Inverse command vector size:1 [Result](0)Success [Input]exit
(3)在回归测试管理工具的控制下,测试输入经过三维建模软件的处理, 得到了输出结果,如表9所示输出结果;
表9 输出结果 [Input]new [Log]Clear time:0.000 seconds [Result](0)Success [Input] [Input]circle(0,0,0),(10,10,0),13 [Log]Command vector size:1 [Log]Inverse command vector size:1 [Result](0)Success [Input]peak 23,10 [Log]Command vector size:1 [Log]Inverse command vector size:1 [Result](0)Success [Input]wall 34,10 [Log]Command vector size:1 [Log]Inverse command vector size:1 [Result](0)Success [Input]sphere(50,0,0),(60,0,0),2 [Log]Command vector size:1 [Log]Inverse command vector size:1
[Result](0)Success [Input]move 242,(-50,0,20) [Log]Command vector size:1 [Log]Inverse command vector size:1 [Result](0)Success [Input] [Input]select clear [Result](0)Success [Input]select add 411,0 [Result](0)Success [Input]set def_color=″87807″ [Result](0)Success [Input]fill_color? [Log]Command vector size:1 [Log]Inverse command vector size:1 [Result](0)Success [Input]exit
(4)比较结果
通过比较工具得出两个文件是否相同的结论,如表10所示:
表10 标准测试工具的比较结果 正在比较文件D:WORKINGNOWAB INTESTOUTusecase01_out.txt和 D:WORKINGNOWABINTESTOUT_STDUSECASE01_OUT.TXT FC:找不到相异处
(5)此项回归测试通过,此项测试同时还生成了一个模型文件,如图6 所示。