CN116166567A - 一种基于图形编程的测试用例生成方法及装置 - Google Patents

一种基于图形编程的测试用例生成方法及装置 Download PDF

Info

Publication number
CN116166567A
CN116166567A CN202310438340.1A CN202310438340A CN116166567A CN 116166567 A CN116166567 A CN 116166567A CN 202310438340 A CN202310438340 A CN 202310438340A CN 116166567 A CN116166567 A CN 116166567A
Authority
CN
China
Prior art keywords
class
test case
response
graph
statement
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202310438340.1A
Other languages
English (en)
Other versions
CN116166567B (zh
Inventor
李健开
王晋杰
王重阳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Chengdu Huaxing Huiming Technologies Co ltd
Original Assignee
Chengdu Huaxing Huiming Technologies Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Chengdu Huaxing Huiming Technologies Co ltd filed Critical Chengdu Huaxing Huiming Technologies Co ltd
Priority to CN202310438340.1A priority Critical patent/CN116166567B/zh
Publication of CN116166567A publication Critical patent/CN116166567A/zh
Application granted granted Critical
Publication of CN116166567B publication Critical patent/CN116166567B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本发明公开了一种基于图形编程的测试用例生成方法及装置,用于设备测试领域,包括:初始化目标测试用例语言运行环境包括:载入内置了各种方法对应的程序集以及与每个程序集绑定的图形的图形化编程工具;在图形化编辑工具的编辑区中拖动图形构建测试用例图组,将测试用例图组反射为对应的语法树;并将语法树序列化存储为XML文件;从XML文件中提取测试流程部分的全部语句,将测试流程部分的全部语句反序列化为用例执行装置可识别的类结构;将类结构存储为测试用例文件发送至用例执行装置中执行。只需拖动对应的图形,就能生成测试用例文件,减少测试用例的编写时间,降低编写测试用例的难度,提高测试效率。

Description

一种基于图形编程的测试用例生成方法及装置
技术领域
本发明涉及设备测试技术领域,具体涉及一种基于图形编程的测试用例生成方法及装置。
背景技术
在自动化测试系统中,一般需要测试系统生成测试用例并且直接执行这些测试用例,然而在生成测试用例时一般采用的方法包括直接编程、具有输入输出的界面式交互用例或者将测试方法序列化,测试方法序列化是由开发人员先用代码编写各种测试方法,然后将这些测试方法编译成一个动态库(编译后一般以*.dll文件存储),在测试系统中引入这个动态库,通过反射的方式取出动态库中的方法,根据测试要求组合成一个新的测试用例,按照组合顺序来执行各个测试方法,达到测试目的。但这些方法均需要现场执行测试的人员编写代码,每次执行测试用例都需对代码进行修改,对于一些紧急任务来说,当需要对测试用例进行频繁修改和不断创建新的测试用例时,将会浪费大量时间对代码进行编写和修改,若现场测试人员的编程能力不足时,将会无法在短时间内编写出正确的测试用例,因此需要一种能够快速构建出测试用例的方法,减少测试用例的编写时间降低编写测试用例的难度。
发明内容
本发明的目的在于提供一种基于图形编程的测试用例生成方法及装置,采用图形化编程工具,预先配置好图形运行所需的运行程序,包括了显示程序和运行后图形对应的响应程序,为了方便存储,将程序集对应的语句序列化后存储为XML文件,由于在用例执行装置中执行时只会执行响应程序对应的语句,因此需要从XML文件中提取出对应的响应元素,将响应元素反序列化用例执行装置可识别的类结构存储到测试用例文件中;这样就可以直接将测试用例文件发送给用例执行装置执行,通过图形编程的方式自动生成测试用例执行装置可识别的测试用例文件,减少测试用例的编写时间,降低编写测试用例的难度,提高测试效率。
一方面,本申请提供一种基于图形编程的测试用例生成方法,包括以下步骤:
S1、在图形化编程工具中配置图形的运行程序集,运行程序集包括显示程序以及对应的响应程序;
S2、运行图形化编程工具,在图形化编辑工具的编辑区中通过拖拽添加图形,构建出一个当前测试用例图组,当前测试用例图组包括了若干个图形;
S3、获取当前测试用例图组的每个图形对应的运行程序集,将每个图形对应的运行程序集反射为对应的一个运行语句;一个运行语句中包含了显示语句和响应语句;将当前测试用例图组中所有图形对应的运行语句进行组合,得到当前测试用例图组对应的一个语法树;
S4、将语法树序列化保存,得到XML文件;XML文件包括显示元素和响应元素;其中,显示元素对应运行语句的显示语句,响应元素对应运行语句的响应语句;
S5、从XML文件中提取出响应元素作为测试流程部分;
S6、将测试流程部分反序列化为类结构存储;得到用例执行装置可执行的测试用例文件。
进一步地,运行程序集由类文件编译得到,类文件包含了若干个类以及该类对应的类成员,类成员包括方法、属性、变量及事件,显示程序和响应程序分别对应不同的类。
进一步地,步骤S3中反射过程的具体步骤包括:
动态获取运行程序集中的类和类成员;
将一个运行程序集加载为一个Assembly对象;一个Assembly对象对应一个运行语句;Assembly对象包括若干个类实例以及各类实例对应的类实例成员;类实例成员包括:方法、属性、变量及事件;显示语句和响应语句分别对应不同的类实例;
加载过程包括:
根据类动态创建类实例,类实例名称和类名相同;根据该类的类成员动态创建类实例对应的类实例成员。
进一步地,显示元素和响应元素分别对应不同的XML元素,每个XML元素均包括开始标签、元素体和结束标签,其中,开始标签和结束标签完全匹配,元素体内可嵌套其他XML元素。
进一步地,步骤S4中将语法树序列化的方法为:
将每个运行语句的显示语句和响应语句分别转换为对应的XML元素:
对每个类实例,分别创建XML元素,将类实例的类名作为对应XML元素的开始标签和结束标签的标签名;
对于每个类实例成员,分别创建XML元素,将类实例成员的名称作为对应XML元素的开始标签和结束标签的标签名;
类实例对应的一个XML元素中嵌套了若干个类实例成员对应的XML元素。
进一步地,步骤S5中提取过程包括:
在XML文件中查询,定位到标签名为Body type的第一个XML元素;
从标签名为Body type的第一个XML元素中提取出元素体的全部内容,将元素体的全部内容作为测试流程部分。
进一步地,图像化编程工具中配置的图形及程序集包括:
用于声明函数定义的第一图形,第一图形的响应程序的类名均包括关键字Declaration;
用于表达表达式的第二图形,第二图形的响应程序的类名均包括关键字Expression;
以及用于表示程序语句的第三图形,第三图形的响应程序的类名均包括关键字Statement;
三种图形之间可交叉组合,组合后图形的响应程序的类名包括了组合图形所有图形对应的关键字。
进一步地,响应程序包括仪器驱动方法、逻辑控制方法、数学方法或测试方法中的一种或多种。
进一步地,步骤S6中将测试流程部分反序列化为Script类结构存储。
第二方面,本申请提供一种基于图形编程的测试用例生成装置,包括:
初始化模块,在图形化编程工具中配置图形的运行程序集,运行程序集包括显示程序以及对应的响应程序;
图形编辑模块,运行图形化编程工具,在图形化编辑工具的编辑区中通过拖拽添加图形,构建出一个当前测试用例图组,当前测试用例图组包括了若干个图形;
语句生成模块,获取当前测试用例图组的每个图形对应的运行程序集,将每个图形对应的运行程序集反射为对应的一个运行语句;一个运行语句中包含了显示语句和响应语句;将当前测试用例图组中所有图形对应的运行语句进行组合,得到当前测试用例图组对应的一个语法树;
序列化模块,用于将语法树序列化保存,得到XML文件;XML文件包括显示元素和响应元素;其中,显示元素对应运行语句的显示语句,响应元素对应运行语句的响应语句;
提取模块,用于从XML文件中提取出响应元素作为测试流程部分;
测试用例生成模块,将测试流程部分反序列化为类结构存储;得到用例执行装置可执行的测试用例文件;
发送模块,用于将测试用例文件下发至用例执行装置中。
本发明具有的有益效果:
本申请中为了提高现场测试人员对测试用例的快速编写和修改,采用图形化的编程工具编写测试用例,预先配置好图形运行所需的运行程序,包括了显示程序,和点击图形后的响应程序,显示程序用于描述图形的显示属性,例如大小,位置和显示样式等这样当需要编写测试用例时,只需拖动对应的图形,形成一个测试用例图组,即可将程序集反射为对应的运行语句,将图组中的所有图形对应的运行语句组合即可得到语法树,将语法树XML序列化后存储,由于在用例执行装置中执行时只需要响应语句即可,显示语句对应于显示程序,用于在可视化显示图形的显示属性,在执行测试用例时时不需要的,因此需要从XML文件中提取响应元素对应的全部语句作为测试流程部分,最后将测试流程部分的全部内容反序列化为用例执行装置可识别的类结构;得到测试用例文件;这样就可以直接将测试用例文件发送给用例执行装置执行,通过图形编程的方式自动生成测试用例执行装置可识别的测试用例文件,减少测试用例的编写时间,降低编写测试用例的难度,提高测试效率。
附图说明
图1为现有技术中测试用例生成方法示意图;
图2为本发明实施例提供的一种基于图形编程的测试用例生成方法示意图;
图3为本发明实施例提供的反射关系示意图;
图4为本发明实施例提供的由图形生成一个测试用例文件的方法示意图;
图5为本发明实施例提供的序列化保存后的XML文件内容。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
另外,为了清楚和简洁起见,可能省略了对公知的结构、功能和配置的描述。本领域普通技术人员将认识到,在不脱离本公开的精神和范围的情况下,可以对本文描述的示例进行各种改变和修改。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。
在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。
现有技术中,在编写测试用例时,常采用以下三种方法:
直接编码
直接编码的方式是当前应用的最多的方式,是通过在测试系统中直接编写用例脚本,保存到计算机上后,再到执行用例界面载入测试用例,并执行测试用例的方式。测试系统中有一个编写脚本的IDE,当前用得最多的两种脚本语言是Python和C#,测试系统需要提供这两种语言的运行环境才能执行。
界面式用例
界面测试用例是一种特殊的测试用例,他是一个配置型的测试用例,需要开发人员先开发出一套完整的程序,这套程序拥有界面,输入和输出等,如果需要运行到另外一个测试系统里,则需要是实现测试系统预设的平台接口;它也可以完全独立运行,其实就是一套独立的软件。
测试方法序列
测试方法序列是开发人员先用代码编写各种的测试方法,然后将这些测试方法编译成一个动态库,在测试系统中引入这个动态库(*.dll文件),通过反射的方式取出动态库中的方法,根据测试要求组合成一个新的测试用例,按照组合顺序来执行各个测试方法,达到测试目的。
以上三种方法均需要现场测试人员对测试用例进行现场编程,以C#脚本编写用例为例,如图1所示,得到测试用例的编程过程包括:在测试用例生成装置中初始化目标测试用例语言运行环境,载入公共语言运行时CLR,载入IDE,使用C#IDE编写C#用例脚本;在测试用例生成装置中调试后保存,将编写的测试用例输出保存为.cs/.dll格式的用例文件。可以看出,在这个编程的过程中,需要线程测试人员具有一定的编程能力,并且在不同的测试条件下需要重新编写测试用例,对于一些紧急的测试任务来说,采用编程的方法速度较慢,且对于编程能力不足的人员来说,无法快速创建出测试用例,因此,本申请提出了以下解决方案。
在介绍本申请的技术方案之前,先对需要涉及的概念进行说明:
1、IDE
IDE是IntegratedDevelopmentEnvironment的缩写,中文称为集成开发环境,用来表示辅助程序员开发的应用软件,是它们的一个总称。有一些熟知的IDE,开发Python会用到PythonWin、MacPython、PyCharm,开发C#会常用到VisualStudio,开发Java常用Eclipse。IDE通常由以下几个部分组成:
源代码编辑器:一个旨在帮助开发人员轻松编写软件代码的文本编辑器,特色功能包括:视觉提示突出显示语法、特定编程语言的自动补全功能、检查正在编写的代码是否存在错误。
本地构建版本自动化:这些实用工具可以在创建软件的本地构建版本时自动执行简单的可重复任务,如将计算机源代码编译成二进制代码、封装二进制代码、运行自动测试。
调试器:一个用于测试其他程序的程序,它能以图形方式显示原始代码中的错误位置。
有了IDE,开发人员可以快速着手为新应用编写代码,而无需在设置时手动配置和集成多个实用工具。此外,由于各个实用工具集成在了同一个工作台中,开发人员再也无需针对不同的工具分别花费数小时来学习它们的使用方法。这大大造福了开发新手,使其可以借助IDE快速掌握团队的标准工具和工作流程。事实上,IDE中的大多数功能都专为节约时间而生,比如智能代码补全功能和自动代码生成功能,它们可使开发人员无需完整输入字符序列。
2、反射
开发人员编写的所有代码都会编译到程序集文件中,并在运行时以“Assembly对象”的方式加载到内存中运行。如图所示。由于开发人员在编写代码时,会编写不同的类(Class)文件,每个类又包含了类的成员,比如有方法,属性,变量以及事件等,这些内容最后都会被编译到程序集里面。程序运行时会把程序集加载到内存中,以Assembly对象存在,类则以Type的形式存在,类成员也会以他们相应的对象存在,如图3所示。
反射是用来在程序运行时动态获取或创建对象的一种机制,它能实现:
在程序运行时,动态获取程序集,类型(class,interface)和类型的成员信息(方法,字段,属性等)。
在程序运行时,动态创建类型实例,以及调用方法和动态创建出来的类型实例的成员。
在实际应用中,图形化编程工具内置了各种测试方法、仪器驱动等程序集,在图形化编程工具运行时,就可以加载这些程序集到内存中,通过反射,取出其中内置的各种方法、变量等,并根据其中绑定的一些特性,判定其类型,分别显示为图形化编辑工具对应的图形中的一种。
3、序列化和反序列化
序列化和反序列化的主要作用包括:在进程下次启动时读取上次保存的对象的信息;在不同的AppDomain或进程之间传递数据;在分布式应用系统中传递数据,常见的序列化的方法:BinaryFormatter、SoapFormatter或者XML序列化;序列化的过程包括:得到一个存储对象的类型—>创建一个写入文件流—>定义要序列化的类型—>调用序列化方法;反序列化与序列化过程相反,包括:定义一个装载对象的类型—>创建一个读出文件流—>定义要反序列化的类型—>调用反序列化方法。
以下结合具体实施例,对本申请实施例的测试用例生成方法进行说明。
实施例1
如图2所示,本实施例提供一种基于图形编程的测试用例生成方法,包括以下步骤:
S1、初始化目标测试用例语言运行环境,载入公共语言运行时CLR,载入IDE,载入图形化编程工具,在图形化编程工具中配置图形的运行程序集,运行程序集包括显示程序以及对应的响应程序;
S2、运行图形化编程工具,在图形化编辑工具的编辑区中通过拖拽添加图形,构建出一个当前测试用例图组,当前测试用例图组包括了若干个图形;
可选地,本实施例中同样载入了IDE,因此也可以选择采用现有技术的编程方法在IDE中编写测试用例。
S3、获取当前测试用例图组的每个图形对应的运行程序集,将每个图形对应的运行程序集反射为对应的一个运行语句;一个运行语句中包含了显示语句和响应语句;将当前测试用例图组中所有图形对应的运行语句进行组合,得到当前测试用例图组对应的一个语法树;
S4、将语法树序列化保存,得到XML文件;XML文件包括显示元素和响应元素;其中,显示元素对应运行语句的显示语句,响应元素对应运行语句的响应语句;
S5、从XML文件中提取出响应元素作为测试流程部分;
S6、将测试流程部分反序列化为类结构存储;得到用例执行装置可执行的测试用例文件。
可以理解的是,本申请在现有的基本编程流程不变的情况下,引入了图形化编程工具,图形化编程让开发人员使用更少的时间完成编程,这是由于每个图形上有这个图形对应的方法的中文描述并且这个图形也绑定了对应的方法的程序集,一个图形替代了一段代码,只要开发人员能读懂方法的中文描述就能知道这个图形的用途,知道如何对图形进行组合,因此可以根据测试过程的需求,用各种不同的图形来组合一个测试流程,那么这个测试流程就可以生成一个测试用例。
具体地,图像化编程工具中的图形对应的程序集实际上包括了使图形按照对应的图形属性(包括图像的大小、位置、样式等可视化的图形信息)进行显示的显示程序以及运行测试用例图组对应的测试用例文件时图形对应的响应程序,在本实施例中,图形化编程工具中配置了三种类型的图形包括:
用于声明函数定义的第一图形,第一图形的响应程序的类名均包括关键字Declaration;
用于表达表达式的第二图形,第二图形的响应程序的类名均包括关键字Expression;
以及用于表示程序语句的第三图形,第三图形的响应程序的类名均包括关键字Statement;
三种图形之间可交叉组合,组合后图形的响应程序的类名包括了组合图形所有图形对应的关键字。
由于每种图形包括多个不同的图形,使一个图形代表一种方法,绑定一个程序集,在图形化编程工具运行时加载程序集到内存中,由于开发图形化编程工具的工程师已经把大量的测试方法、仪器驱动、数学方法等开发完毕并编译为对应的响应程序集,内置到了图形化编程工具里面,初始化工具时,根据这些响应方法的类分别展示为以上三种图形中的一种,测试用例开发人员在使用时用鼠标拖动这些图形到编辑区域,若干个图形通过一定的组合,形成一个完整的测试流程,即构建出了一个测试用例图组。每个测试用例图组会形成一个对应的语句列表,由于有些语句里面会嵌套其他的语句,因此这个列表展开后是一个树结构即语法树,保存时,把这个树结构序列化成一个文件(序列化:将语句里的对象转换为xml文件),就形成了一个XML文件结构,里面的内容就是语法树的内容。
而从测试用例图组生成对应的测试用例文件的过程如图4所示,包括了反射、序列化、提取和反序列化。下面将对这四个过程详细描述。
1、反射
由于每个运行程序集由类文件编译得到,类文件包含了若干个Class类以及Class类对应的类成员,类成员包括方法、属性、变量及事件;显示程序和响应程序分别对应不同的类。显示程序用于编写图形显示的各种属性,例如图形的位置、大小、样式、显示区域、颜色等,而响应程序根据上述三种图形的其中一种的响应方法执行具体的方法内容。
这样当在图形化编程工具的编辑界面中拖动图形组成测试用例图组时,在后台中的程序运过程为,将运行程序集加载到内存中,以Assembly对象存在,类则以Type类实例的形式存在,类成员也会以他们相应的类实例成员存在。
构建当前测试用例图组时,其在后台的程序运行过程包括步骤S3,步骤S3获取当前测试用例图组的每个图形对应的运行程序集,将每个图形对应的运行程序集反射为对应的一个运行语句;一个运行语句中包含了显示语句和响应语句;则反射过程的具体步骤包括:
S31、动态获取运行程序集中的Class类和Class类的类成员;
S32、将一个运行程序集加载为一个Assembly对象;Assembly对象包括Type类实例以及Type类实例对应的类实例成员;一个Assembly对象为一个运行语句;
加载过程包括:
根据Class类动态创建Type类实例,Type类实例名称和类名相同;根据Class类的类成员动态创建的Type类实例的类实例成员。根据Class类名区分显示语句和响应语句。
2、序列化
本实施例序列化方法采用的是XML序列化,XML文件一般包括声明、根元素和若干个XML元素,且每个XML元素包括开始标签、元素体和结束标签,其中,开始标签和结束标签成对出现且一一对应(即完全匹配),元素体内可嵌套其他XML元素,且在开始标签中还可以描述对应的XML元素的属性,属性是使用与特定XML元素关联的对应“名称—值”的XML构造。其中包含的有关XML元素内容的信息并非总是用于显示,而是用于描述XML元素的某种属性。如图5所示,将显示语句和响应语句分别序列化为用于描述显示信息(如大小、样式、位置、颜色等)的显示元素和用于描述响应方法的响应元素,显示元素和响应元素都是不同的XML元素,且显示元素之间与语法树结构对应,呈现出相互嵌套的结构,且显示元素用于描述测试用例图组的图形的显示属性,例如大小位置样式等,而响应元素之间对应于语法树结构按照响应方法被执行的顺序相互嵌套,这样步骤S4中将语法树序列化的方法为:
将每个运行语句的显示语句和响应语句分别转换为对应的XML元素,由于一个运行语句对应一个Assembly对象,一个Type类实例对应一个XML元素,且Type类实例的类名为对应XML元素的开始标签和结束标签的标签名,一个类实例成员也对应一个XML元素,且类实例成员的名称作为对应XML元素的开始标签和结束标签的标签名,Type类实例对应的一个XML元素中嵌套了若干个类实例成员对应的XML元素。如图5所示,给出了一个根据测试用例图组序列化后的XML文件,可以看出,显示元素位于响应元素之前,且响应元素的内容被包含在了标签名为Body的XML元素中。重复执行10次的图形为第三图形,其对应的响应语句序列化后的响应元素为:从<Statement type="Fuxi.Scratch.Engine.LoopStatement,Fuxi.Scratch.Engine">到</Statement>,打印“Helloworld”的图形为第三图形,其对应的响应元素为:<Statement type="Fuxi.Scratch.Engine.PrintStatement,Fuxi.Scratch.Engine">到</Statement>。可以看出这两个图形是相互嵌套的,其对应的响应元素也相互嵌套。
3、提取
由于在生成XML文件时,真正需要执行测试的测试流程部分的语句被保存到了<Body>到</Body>内。执行测试用例时真正需要执行的语句其实是<Body>到</Body>中间的全部内容,当存在多对<Body>到</Body>时,根据查询到的第一个<Body>到其对应的结束标签</Body>,提取这对标签中元素体的所有内容,并将<Body>元素体的全部内容作为测试流程部分的全部内容,在本实施例中即为从<Body type="Fuxi.Scratch.Engine.BlockStatement">到最后一个</Body>中间的全部内容。如下所示,下述展示的内容即为从图5中提取出的响应元素的全部内容:
<BlockStatement type="Fuxi.Scratch.Engine.BlockStatement,Fuxi.Scratch.Engine">
<Body>
<Statement type="Fuxi.Scratch.Engine.LoopStatement,Fuxi.Scratch.Engine">
<Loop type="Fuxi.Scratch.Engine.Literal">
<Expression type="Fuxi.Scratch.Engine.Literal, Fuxi.Scratch.Engine">
<Raw value="10" />
</Expression>
</Loop>
<Body type="Fuxi.Scratch.Engine.BlockStatement">
<BlockStatementtype="Fuxi.Scratch.Engine.BlockStatement,Fuxi.Scratch.Engine">
<Body>
<Statement type="Fuxi.Scratch.Engine.PrintStatement,Fuxi.Scratch.Engine">
<Message type="Fuxi.Scratch.Engine.Literal">
<Expression type="Fuxi.Scratch.Engine.Literal, Fuxi.Scratch.Engine">
<Raw value=""Hello World!"" />
</Expression>
</Message>
</Statement>
</Body>
</BlockStatement>
</Body>
</Statement>
</Body>
</BlockStatement>
可以看出,上述响应元素对应的响应方法为:在图形化编程工具的界面上拖拽一个变量,设置变量为a,并给a赋值为“Helloworld”,再拖拽一个具有答应功能的图形,循环打印十次这个变量a。根据图形化编程工具工作原理,测试用例开发人员通过拖动图形来组合成一个完整的测试用例图,这时每一个图形都是一个运行语句,每一个图像对应的响应语句在图形化编程工具里面以Statement图形表示,对应地,此时在后台生成的为Statement类实例,Statement类实例对应一个XML元素,如上所述“<BlockStatement type=" BlockStatement"> </BlockStatement>”为一对开始标签和结束标签,其中间的内容即为元素体,可以看出这个元素体内嵌套了多个其他的XML元素,并且其与上述当前测试用例图组生成的语法树结构对应。
4、反序列化
上述给出的测试流程部分的全部内容对应的是序列化后的XML文件中的部分内容,用例执行装置无法直接执行这个XML文件的内容,因此需要将这个XML文件中与测试流程部分对应的标签名为Body的元素体的全部内容反序列化(反序列化:将xml文件变为程序里的对象)为一个Script类结构;这样在用例执行装置中执行测试用例文件时,就可以将测试用例文件中的Script类加载到内存中,按照<Body>到</Body>中元素体的全部内容一条一条的取出类名关键词为Statement的响应语句并执行,直到所有的响应语句执行完毕。反序列化的过程与序列化的过程相似,需要先构造一个装载XML文件的类,根据这个类依次引用XML文件中的对象,包括引用对象的类实例以及类实例成员。
可以理解的是,通过本实施例生成的测试用例,不需要开发人员具备编码基础,直接通过拖拽图形的方式来编写测试用例。操作简单,能快速搭建测试用例,如果测试过程有修改,也能快速的对流程进行修改。提高测试效率。
实施例2
本实施例2在实施例1的基础上,提供一种基于图形编程的测试用例生成装置,用于实现实施例1所描述的方法,包括:
初始化模块,在图形化编程工具中配置图形的运行程序集,运行程序集包括显示程序以及对应的响应程序;
图形编辑模块,运行图形化编程工具,在图形化编辑工具的编辑区中通过拖拽添加图形,构建出一个当前测试用例图组,当前测试用例图组包括了若干个图形;
语句生成模块,获取当前测试用例图组的每个图形对应的运行程序集,将每个图形对应的运行程序集反射为对应的一个运行语句;一个运行语句中包含了显示语句和响应语句;将当前测试用例图组中所有图形对应的运行语句进行组合,得到当前测试用例图组对应的一个语法树;
序列化模块,用于将语法树序列化保存,得到XML文件;XML文件包括显示元素和响应元素;其中,显示元素对应运行语句的显示语句,响应元素对应运行语句的响应语句;
提取模块,用于从XML文件中提取出响应元素作为测试流程部分;
测试用例生成模块,将测试流程部分反序列化为类结构存储;得到用例执行装置可执行的测试用例文件;
发送模块,用于将测试用例文件下发至用例执行装置中。
在用例执行装置中,执行测试用例的过程为:
加载测试用例文件中的Script类到内存中,依次执行<Body>到</Body>的全部语句。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,依据本发明的技术实质,在本发明的精神和原则之内,对以上实施例所作的任何简单的修改、等同替换与改进等,均仍属于本发明技术方案的保护范围之内。

Claims (10)

1.一种基于图形编程的测试用例生成方法,其特征在于,包括以下步骤:
S1、在图形化编程工具中配置图形的运行程序集,运行程序集包括显示程序以及对应的响应程序;
S2、运行图形化编程工具,在图形化编辑工具的编辑区中通过拖拽添加图形,构建出一个当前测试用例图组,当前测试用例图组包括了若干个图形;
S3、获取当前测试用例图组的每个图形对应的运行程序集,将每个图形对应的运行程序集反射为对应的一个运行语句;一个运行语句中包含了显示语句和响应语句;将当前测试用例图组中所有图形对应的运行语句进行组合,得到当前测试用例图组对应的一个语法树;
S4、将语法树序列化保存,得到XML文件;XML文件包括显示元素和响应元素;其中,显示元素对应运行语句的显示语句,响应元素对应运行语句的响应语句;
S5、从XML文件中提取出响应元素作为测试流程部分;
S6、将测试流程部分反序列化为类结构存储;得到用例执行装置可执行的测试用例文件。
2.根据权利要求1所述的一种基于图形编程的测试用例生成方法,其特征在于,运行程序集由类文件编译得到,类文件包含了若干个类以及该类对应的类成员,类成员包括方法、属性、变量及事件,显示程序和响应程序分别对应不同的类。
3.根据权利要求2所述的一种基于图形编程的测试用例生成方法,其特征在于,步骤S3中反射过程的具体步骤包括:
动态获取运行程序集中的类和类成员;
将一个运行程序集加载为一个Assembly对象;一个Assembly对象对应一个运行语句;Assembly对象包括若干个类实例以及各类实例对应的类实例成员;类实例成员包括:方法、属性、变量及事件;显示语句和响应语句分别对应不同的类实例;
加载过程包括:
根据类动态创建类实例,类实例名称和类名相同;根据该类的类成员动态创建类实例对应的类实例成员。
4.根据权利要求3所述的一种基于图形编程的测试用例生成方法,其特征在于,显示元素和响应元素分别对应不同的XML元素,每个XML元素均包括开始标签、元素体和结束标签,其中,开始标签和结束标签完全匹配,元素体内可嵌套其他XML元素。
5.根据权利要求4所述的一种基于图形编程的测试用例生成方法,其特征在于,步骤S4中将语法树序列化的方法为:
将每个运行语句的显示语句和响应语句分别转换为对应的XML元素:
对每个类实例,分别创建XML元素,将类实例的类名作为对应XML元素的开始标签和结束标签的标签名;
对于每个类实例成员,分别创建XML元素,将类实例成员的名称作为对应XML元素的开始标签和结束标签的标签名;
类实例对应的一个XML元素中嵌套了若干个类实例成员对应的XML元素。
6.根据权利要求4所述的一种基于图形编程的测试用例生成方法,其特征在于,步骤S5中提取过程包括:
在XML文件中查询,定位到标签名为Body type的第一个XML元素;
从标签名为Body type的第一个XML元素中提取出元素体的全部内容,将元素体的全部内容作为测试流程部分。
7.根据权利要求2所述的一种基于图形编程的测试用例生成方法,其特征在于,图像化编程工具中配置的图形及程序集包括:
用于声明函数定义的第一图形,第一图形的响应程序的类名均包括关键字Declaration;
用于表达表达式的第二图形,第二图形的响应程序的类名均包括关键字Expression;
以及用于表示程序语句的第三图形,第三图形的响应程序的类名均包括关键字Statement;
三种图形之间可交叉组合,组合后图形的响应程序的类名包括了组合图形所有图形对应的关键字。
8.根据权利要求1所述的一种基于图形编程的测试用例生成方法,其特征在于,响应程序包括仪器驱动方法、逻辑控制方法、数学方法或测试方法中的一种或多种。
9.根据权利要求1所述的一种基于图形编程的测试用例生成方法,其特征在于,步骤S6中将测试流程部分反序列化为Script类结构存储。
10.一种基于图形编程的测试用例生成装置,其特征在于,包括:
初始化模块,在图形化编程工具中配置图形的运行程序集,运行程序集包括显示程序以及对应的响应程序;
图形编辑模块,运行图形化编程工具,在图形化编辑工具的编辑区中通过拖拽添加图形,构建出一个当前测试用例图组,当前测试用例图组包括了若干个图形;
语句生成模块,获取当前测试用例图组的每个图形对应的运行程序集,将每个图形对应的运行程序集反射为对应的一个运行语句;一个运行语句中包含了显示语句和响应语句;将当前测试用例图组中所有图形对应的运行语句进行组合,得到当前测试用例图组对应的一个语法树;
序列化模块,用于将语法树序列化保存,得到XML文件;XML文件包括显示元素和响应元素;其中,显示元素对应运行语句的显示语句,响应元素对应运行语句的响应语句;
提取模块,用于从XML文件中提取出响应元素作为测试流程部分;
测试用例生成模块,将测试流程部分反序列化为类结构存储;得到用例执行装置可执行的测试用例文件;
发送模块,用于将测试用例文件下发至用例执行装置中。
CN202310438340.1A 2023-04-23 2023-04-23 一种基于图形编程的测试用例生成方法及装置 Active CN116166567B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310438340.1A CN116166567B (zh) 2023-04-23 2023-04-23 一种基于图形编程的测试用例生成方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310438340.1A CN116166567B (zh) 2023-04-23 2023-04-23 一种基于图形编程的测试用例生成方法及装置

Publications (2)

Publication Number Publication Date
CN116166567A true CN116166567A (zh) 2023-05-26
CN116166567B CN116166567B (zh) 2023-08-11

Family

ID=86422249

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310438340.1A Active CN116166567B (zh) 2023-04-23 2023-04-23 一种基于图形编程的测试用例生成方法及装置

Country Status (1)

Country Link
CN (1) CN116166567B (zh)

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102156784A (zh) * 2011-04-18 2011-08-17 烽火通信科技股份有限公司 验证环境图形化的芯片验证方法与装置
US8683318B1 (en) * 2004-07-14 2014-03-25 American Express Travel Related Services Company, Inc. Methods and apparatus for processing markup language documents
WO2014115189A1 (en) * 2013-01-28 2014-07-31 Nec Corporation Method and system for transforming specification scripts to program code
CN107015903A (zh) * 2016-01-27 2017-08-04 阿里巴巴集团控股有限公司 一种界面测试程序的生成方法、装置及电子设备
CN107239284A (zh) * 2017-05-31 2017-10-10 河南思维轨道交通技术研究院有限公司 一种图形化智能化测试用例和测试序列编制方法
CN108459957A (zh) * 2017-11-29 2018-08-28 平安科技(深圳)有限公司 基金系统测试用例的测试方法、装置、设备及存储介质
CN110232014A (zh) * 2019-02-25 2019-09-13 上海蔚来汽车有限公司 业务流程自动化测试方法、装置、控制器及介质
CN111414170A (zh) * 2020-03-05 2020-07-14 莱诺斯科技(北京)股份有限公司 一种可视化编排测试过程的装置及方法
CN112181396A (zh) * 2019-07-02 2021-01-05 北京京东尚科信息技术有限公司 Rn代码自动生成系统、方法、设备及介质
CN115576603A (zh) * 2022-11-23 2023-01-06 云账户技术(天津)有限公司 一种获取代码片段中的变量值的方法及装置
US20230060212A1 (en) * 2018-08-31 2023-03-02 Devfactory Innovations Fz-Llc Method, Apparatus, and System for Blaming a Test Case/Class for a Survived Mutation
CN115858337A (zh) * 2022-11-04 2023-03-28 Oppo广东移动通信有限公司 测试方法、测试装置、计算机可读存储介质以及电子设备

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8683318B1 (en) * 2004-07-14 2014-03-25 American Express Travel Related Services Company, Inc. Methods and apparatus for processing markup language documents
CN102156784A (zh) * 2011-04-18 2011-08-17 烽火通信科技股份有限公司 验证环境图形化的芯片验证方法与装置
WO2014115189A1 (en) * 2013-01-28 2014-07-31 Nec Corporation Method and system for transforming specification scripts to program code
CN107015903A (zh) * 2016-01-27 2017-08-04 阿里巴巴集团控股有限公司 一种界面测试程序的生成方法、装置及电子设备
CN107239284A (zh) * 2017-05-31 2017-10-10 河南思维轨道交通技术研究院有限公司 一种图形化智能化测试用例和测试序列编制方法
CN108459957A (zh) * 2017-11-29 2018-08-28 平安科技(深圳)有限公司 基金系统测试用例的测试方法、装置、设备及存储介质
US20230060212A1 (en) * 2018-08-31 2023-03-02 Devfactory Innovations Fz-Llc Method, Apparatus, and System for Blaming a Test Case/Class for a Survived Mutation
CN110232014A (zh) * 2019-02-25 2019-09-13 上海蔚来汽车有限公司 业务流程自动化测试方法、装置、控制器及介质
CN112181396A (zh) * 2019-07-02 2021-01-05 北京京东尚科信息技术有限公司 Rn代码自动生成系统、方法、设备及介质
CN111414170A (zh) * 2020-03-05 2020-07-14 莱诺斯科技(北京)股份有限公司 一种可视化编排测试过程的装置及方法
CN115858337A (zh) * 2022-11-04 2023-03-28 Oppo广东移动通信有限公司 测试方法、测试装置、计算机可读存储介质以及电子设备
CN115576603A (zh) * 2022-11-23 2023-01-06 云账户技术(天津)有限公司 一种获取代码片段中的变量值的方法及装置

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
DEJAN STOJANOVIC: "Set entry assembly in Unit testing methods", pages 1 - 5, Retrieved from the Internet <URL:《https://dejanstojanovic.net/aspnet/2015/january/set-entry-assembly-in-unit-testing-methods/》> *
LIHOO: "C#反射Assembly 详细说明", pages 1 - 6, Retrieved from the Internet <URL:《https://www.cnblogs.com/lihoo/p/7765515.html》> *
吉顺慧 等: "基于支配关系的数据流测试用例生成方法", 《计算机科学》, vol. 47, no. 9, pages 40 - 46 *

Also Published As

Publication number Publication date
CN116166567B (zh) 2023-08-11

Similar Documents

Publication Publication Date Title
US7496906B2 (en) Evaluation of a code segment
Voelter et al. mbeddr: Instantiating a language workbench in the embedded software domain
US20060075305A1 (en) Method and system for source-code model-based testing
US8930879B2 (en) Application building
Rask et al. Visual studio code vdm support
Bandener et al. Extending DMM behavior specifications for visual execution and debugging
Dinh et al. Modern front-end web development: how libraries and frameworks transform everything
Pech JetBrains MPS: Why Modern Language Workbenches Matter
Wu et al. Unit testing for domain-specific languages
CN116166567B (zh) 一种基于图形编程的测试用例生成方法及装置
Leite et al. Designing and executing software architectures models using SysADL Studio
Samara A practical approach for detecting logical error in object oriented environment
Gargantini et al. A metamodel-based simulator for ASMs
Campos et al. FlexiXML: a portable user interface rendering engine for UsiXML
Chiş et al. Moldable tools for object-oriented development
Wilkes Advanced Python Development
Gotti et al. A Model Driven approach for multi-platform execution of interactive UIS designed with IFML
Blunk et al. Modelling a debugger for an imperative voice control language
Savolainen et al. Spine deliverable 2.1 software design document
Graf et al. Gaining insight into executable models during runtime: Architecture and mappings
Alankus et al. Advanced C++: Master the technique of confidently writing robust C++ code
Jeffery Build Your Own Programming Language: A programmer's guide to designing compilers, interpreters, and DSLs for solving modern computing problems
Renggli Dynamic Language Embedding
Merino et al. Bacatá: A Language Parametric Notebook Generator
Čamra FPVS: integrace FreePascalu do Visual Studia

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant