CN113778888A - 代码自动测试方法、系统、设备及存储介质 - Google Patents
代码自动测试方法、系统、设备及存储介质 Download PDFInfo
- Publication number
- CN113778888A CN113778888A CN202111086647.7A CN202111086647A CN113778888A CN 113778888 A CN113778888 A CN 113778888A CN 202111086647 A CN202111086647 A CN 202111086647A CN 113778888 A CN113778888 A CN 113778888A
- Authority
- CN
- China
- Prior art keywords
- tested
- source code
- code
- test
- user
- 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
Links
- 238000010998 test method Methods 0.000 title claims abstract description 20
- 238000012360 testing method Methods 0.000 claims abstract description 147
- 238000000034 method Methods 0.000 claims abstract description 41
- 230000006870 function Effects 0.000 claims description 46
- 238000004590 computer program Methods 0.000 claims description 18
- 230000008676 import Effects 0.000 claims description 18
- 238000002347 injection Methods 0.000 claims description 18
- 239000007924 injection Substances 0.000 claims description 18
- 238000004458 analytical method Methods 0.000 claims description 17
- 230000008569 process Effects 0.000 claims description 16
- 230000002159 abnormal effect Effects 0.000 claims description 8
- 239000013589 supplement Substances 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 7
- 230000003068 static effect Effects 0.000 description 6
- 238000011161 development Methods 0.000 description 3
- 238000002955 isolation Methods 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 239000000243 solution Substances 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提出一种代码自动测试方法、系统、设备及存储介质,该方法包括:根据用户测试指令中的待测试源码名称,获取待测试源码;对待测试源码进行解析,得到待测试源码中所有目标关键字,并获取待测试源码中目标关键字所在的位置;根据预设关键字、预设关键字所在的位置和挡板类型,生成测试语句,所述预设关键字为预先设定的目标关键字,所述用户测试指令包括所述挡板类型;将所述测试语句输出至相应测试方法中,以对所述待测试源码进行测试。本发明实施例利用测试语句对需要进行测试的代码位置进行测试,实现对待测试源码的自动测试,提高了代码测试效率,减轻了测试人员的工作量,同时也避免了人工识别出现的遗漏。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种代码自动测试方法、系统、设备及存储介质。
背景技术
MOCK测试是指在测试过程中,对某些不容易构造或者不容易获取的对象,用一个虚拟对象来创建以便测试的测试方法。单元测试,是指对软件中的最小可测试单元进行检查和验证。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元在与程序的其它部分相隔离的情况下进行测试。对于开发者来说,单元测试是开发过程中一项重要内容,为了做到最小可测单元,隔离程序其它部分,就需要使用MOCK挡板的功能来实现。
针对MOCK挡板的需求,目前市面上主流的MOCK挡板有easymock、jmockit、mockito、powermock、testablemock等等,开发者根据项目的框架、业务场景、代码场景选择适用的MOCK挡板,手动识别代码中需要做挡板的代码场景,并编写了测试案例,手动识别需要做MOCK测试的代码位置费时费力,而且可能出现遗漏的情况。
发明内容
本发明提供一种代码自动测试方法、系统、设备及存储介质,其主要目的在于自动识别需要代码段位置和自动生成测试语句,有效提高代码测试效率。
第一方面,本发明实施例提供一种代码自动测试方法,包括:
根据用户测试指令中的待测试源码名称,获取待测试源码,所述用户测试指令包括对所述待测试源码进行测试的挡板类型;
对所述待测试源码进行解析,得到所述待测试源码中所有目标关键字,并获取所述待测试源码中所述目标关键字所在的位置;
根据预设关键字、所述预设关键字所在的位置和所述挡板类型,生成测试语句,其中所述预设关键字为预先设定的目标关键字,将所述测试语句输出至相应测试方法中,以对所述待测试源码进行测试。
优选地,所述对所述待测试源码进行解析,得到所述待测试源码中所有目标关键字,并获取所述待测试源码中所述目标关键字所在的位置,包括:
将所述待测试源码切分为字符串数组逐行进行解析,匹配出所述目标关键字和所述目标关键字对应的逻辑代码段,不同的目标关键字存储在不同的集合中;
判断所述逻辑代码段是否完整,若完整,则将所述目标关键字直接存储在集合中,若不完整,则对所述目标关键字进行细粒度解析,并将不完整的目标关键字补充完整后存储到对应集合中;
根据所述逻辑代码段,确定所述目标关键字对应的位置。
优选地,所述将所述待测试源码切分为字符串数组逐行进行解析,之前包括:
获取所述待测试源码中的函数信息和变量信息,其中所述函数信息包括系统函数和用户自定义的函数,所述变量信息包括系统变量、用户自定义的包变量和用户自定义的词法变量;
为用户自定义的函数、用户自定义的包变量、用户自定义的词法变量分别设置一对应的前缀标识符。
优选地,所述将所述待测试源码切分为字符串数组逐行进行解析,匹配出所述目标关键字和所述目标关键字对应的逻辑代码段,包括:
如果解析过程中得到函数信息和符号信息确定得到的词素为用户自定义中的一个,在所述词素之前增加对应的前缀标识符,得到处理后的待测试源码,其中,所述用户自定义包括用户自定义的函数、用户自定义的包变量和用户自定义的词法变量;
将处理后的待测试源码输入语法分析器,获取所述目标关键字和所述目标关键字对应的逻辑代码段。
优选地,所述并获取所述待测试源码中所述目标关键字所在的位置,包括:
通过package识别所述待测试源码中的包路径名;
通过import识别所述待测试源码中的导入包;
通过class识别所述待测试源码中的类名;
通过@Autowired、@Resource识别所述待测试源码中的接口注入类;
通过@Value识别所述待测试源码中的属性值注入;
通过new识别所述待测试源码中的新实例;
通过try-catch识别所述待测试源码中的异常场景;
通过this识别所述待测试源码中的本类调用;
通过super识别所述待测试源码中的父类调用。
优选地,所述根据用户测试指令中的待测试源码名称,获取待测试源码,包括:
根据所述待测试源码名称,通过全路径匹配,获取所述待测试源码。
优选地,所述根据预设关键字、所述预设关键字所在的位置和挡板类型,生成测试语句,包括:
将所述预设关键字、所述预设关键字所在的位置和所述挡板类型进行拼接,得到拼接字符串;
并根据所述拼接字符串,生成所述测试语句。
第二方面,本发明实施例提供一种代码自动测试系统,包括:
源码模块,用于根据用户测试指令中的待测试源码名称,获取待测试源码,所述用户测试指令包括对所述待测试源码进行测试的挡板类型;
解析模块,用于对所述待测试源码进行解析,得到所述待测试源码中所有目标关键字,并获取所述待测试源码中所述目标关键字所在的位置;
测试模块,用于根据预设关键字、所述预设关键字所在的位置和所述挡板类型,生成测试语句,其中所述预设关键字为预先设定的目标关键字,并将所述测试语句输出至相应测试方法中,以对所述待测试源码进行测试。
第三方面,本发明实施例提供一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述代码自动测试方法的步骤。
第四方面,本发明实施例提供一种计算机存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述代码自动测试方法的步骤。
本发明提出一种代码自动测试方法、系统、设备及存储介质,通过自动识别出待测试源码、待测试源码中需要进行测试的预设关键字和预设关键字在待测试源码中所在的位置,可以得到需要进行测试的代码位置;并且,结合预设关键字、预设关键字所在的位置和挡板类型,自动生成测试语句。从而利用测试语句对需要进行测试的代码位置进行测试,实现对待测试源码的自动测试。该方法可以对待测试源码自动进行测试,提高了代码测试效率,减轻了测试人员的工作量,同时也避免了人工识别出现的遗漏。
附图说明
图1为本发明实施例中提供的一种代码自动测试方法的应用场景图;
图2为本发明实施例提供的一种代码自动测试方法的流程图;
图3为本发明实施例提供的一种代码自动测试系统的结构示意图;
图4为本发明实施例提供的一种计算机设备的结构示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1为本发明实施例中提供的一种代码自动测试方法的应用场景图,如图1所示,用户在客户端输入用户测试指令,客户端将该用户测试指令发送给服务端,服务端接收该用户测试指令后,根据该用户测试指令执行该代码自动测试方法,以实现对待测试源码的自动测试。
需要说明的是,服务端可以用独立的服务器或者是多个服务器组成的服务器集群来实现。客户端可为智能手机、平板电脑、笔记本电脑、台式计算机等,但并不局限于此。客户端和服务端可以通过蓝牙、USB(Universal Serial Bus,通用串行总线)或者其他通讯连接方式进行连接,本发明实施例在此不做限制。
图2为本发明实施例提供的一种代码自动测试方法的流程图,如图2所示,该方法包括:
S210,根据用户测试指令中的待测试源码名称,获取待测试源码,所述用户测试指令包括对所述待测试源码进行测试的挡板类型;
首先接收用户发送过来的用户测试指令,用户测试指令符合预先设计的指令规则,该用户测试指令包括待测试源码名称和挡板类型,由于对一个项目源码进行测试时,有时候项目功能比较多,对应的项目源码也非常的复杂,常常会出现好几十万条源码的情况,对所有的源码一次性进行测完是十分困难的,一般都会把源码拆分成很多段,一段一段进行测试。并且,有时可能并不需要对整个项目源码都进行测试,而只需要对项目源码中的部分进行测试。
待测试源源码可以是实现某一个功能的功能模块的代码,也可以是多个功能或结构相仿的功能模块的代码,也就是说本发明实施例中提供的代码自动测试方法不仅适用于单个功能模块的代码,而且适用于批量生成多个功能模块的代码,大幅度节约开发人员时间,提高开发人员工作效率。
为了选出需要测试的代码,根据待测试源码名称,选出待测试源码,该待测试源码名称可以是全路径名称,全路径即为绝对路径;还可以是待测试源码的文件名称,即相对路径加上文件名称,本发明实施例中,以全路径名称为例进行说明。
在具体应用中,只要路径以“/”开头的都叫全路径,从项目根目录出发到其它资源的过程,相应地,根据该全路径名称在项目中寻找出待测试源码名称;还可以是根据待测试源码名称在待测试源码中进行匹配,选出待测试源码。
本发明实施例中,通过用户测试指令中的待测试源码名称,在项目代码中自动匹配出需要进行测试操作的待测试源码,由于自动选取出待测试源码,因此可以避免人工识别代码段出现的遗漏。
S220,对所述待测试源码进行解析,得到所述待测试源码中所有目标关键字,并获取所述待测试源码中所述目标关键字所在的位置;
对该待测试源码进行解析,源码解析是指解析出该待测试源码中所用到的函数信息和变量信息,函数信息包括用户自定义函数和系统调用函数,变量信息包括系统定义变量以及用户自定义变量,本发明实施例中,将这些称之为目标关键字,目标关键字还包括在程序设计中用到的一些词,这些词可以表示一些特殊的含义,比如new,这个可以声明新实例,string表示字符串变量类。
在解析的过程中,只能解析出待测试源码中所包含的目标关键字种类,但是并不能知道该待测试源码中关键字所在的具体位置。具体地,哪些字符能够被看做是目标关键字,可以根据用户预先的选择来确定,用户确定目标关键字的种类后,在对待测试源码解析的过程中通过参考所有目标关键字的种类,最后来确定待测试源码中所包含的目标关键字种类。如果用户没有预先进行选择,那么就将所有的目标关键字来作为默认目标关键字,在对待测试源码解析的过程中参考默认目标关键字,最后确定待测试源码中所包含的目标关键字种类。
对待测试代码进行解析得到目标关键词后,对每个目标关键字进行扫描,识别出目标关键字在该待测试源码中的位置。
S230,根据预设关键字、所述预设关键字所在的位置和所述挡板类型,生成测试语句,其中所述预设关键字为预先设定的目标关键字,将所述测试语句输出至相应测试方法中,以对所述待测试源码进行测试。
该预设关键字可以为预先选定的、需要进行测试的目标关键字,可以是全部目标关键字,本发明实施例对此不做具体的限定。预设关键字所在的位置是指在预设关键字在待测试代码中所在的位置,挡板类型为预先选定的类型,根据预设关键字、预设关键字所在的位置和挡板类型,生成测试语句。
具体地,不同的挡板类型,其对应的测试语句的语法和代码结构不同,本发明实施例中,预先将不同挡板类型对应的标准测试语句存储起来,该标准测试语句中预设关键字部分和预设关键字所在位置部分用空白表示,当需要生成测试语句时,根据挡板类型选取出对应的标准测试语句,并且将预设关键字和预设关键字所在的位置,填补到标准测试语句中相应空白位置,最终得到测试语句。
该用户测试指令还包括挡板类型,常用的挡板类型为easymock、jmockit、mockito、powermock、testablemock等,用户可以根据项目的框架、适用业务场景等信息选择合适的挡板。
需要说明的是,本发明中待测试源码限定为JAVA语言编写的源码。
本发明实施例中的挡板类型为MOCK挡板,MOCK挡板类型多,包括目前主流的easymock挡板、jmockit挡板、mockito挡板、powermock挡板和testablemock挡板,本发明实施例均可支持,用户可结合自身项目要求和代码场景,自选其中一种工具来自动生成mock挡板语句,减轻学习成本。
将测试语句输出到相应测试方法中,具体输出方式是通过IO流方式,将测试语句输出到相应测试方法中,由于该测试语句中包含了需要测试的预设关键字以及预设关键字所在的位置,因此,相应测试方法就可以对待测试源码进行自动测试。
本发明提出一种代码自动测试方法,通过自动识别出待测试源码、待测试源码中需要进行测试的预设关键字和预设关键字在待测试源码中所在的位置,可以得到需要进行测试的代码位置;并且,结合预设关键字、预设关键字所在的位置和挡板类型,自动生成测试语句。从而利用测试语句对需要进行测试的代码位置进行测试,实现对待测试源码的自动测试。该方法可以对待测试源码自动进行测试,提高了代码测试效率,减轻了测试人员的工作量,同时也避免了人工识别出现的遗漏。
在上述实施例的基础上,优选地,所述对所述待测试源码进行解析,得到所述待测试源码中所有目标关键字,并获取所述待测试源码中所述目标关键字所在的位置,包括:
将所述待测试源码切分为字符串数组逐行进行解析,匹配出所述目标关键字和所述目标关键字对应的逻辑代码段,不同的目标关键字存储在不同的集合中;
判断所述逻辑代码段是否完整,若完整,则将所述目标关键字直接存储在集合中,若不完整,则对所述目标关键字进行细粒度解析,并将不完整的目标关键字补充完整后存储到对应集合中;
根据所述逻辑代码段,确定所述目标关键字对应的位置。
具体地,将待测试源码的文本切分为字符串数组逐行进行解析,匹配出源代码文件中的目标关键字以及目标关键字对应的逻辑代码段,逻辑代码段是指目标关键字所包含的内容信息。
本发明实施例中,目标关键字包括包路径、导入包、类信息、内部类信息、构造器、公共方法、实例属性等信息,将不同的目标关键字存储在不同的集合中,可以方便区分不同目标关键字对应的内容,方便后续根据目标关键字对待测试源码进行测试。
并且判断解析出的目标关键字是否完整,若完整,直接将目标关键字存储到对应的集合中,若不完整,则进行细粒度解析,将不完整的目标关键字补充完整后存储到相对应的集合中。细粒度可以理解为关注于待测试源码中的细节。比如开发一个软件,这是粗粒度的,这个软件所包含的具体功能模块,细粒度就是这些功能模块如何实现,有哪些类,类有哪些方法。细粒度解析就是解析出该待测试源码中所包含的类、方法等,将待测试源码拆分为最小单位。
具体地,本发明实施例中,以公共方法为单位对待测试源码中的方法类文本进行匹配解析。
本发明实施例中,通过解析需要测试的源代码,自动生成相应的测试代码,比传统的人工编写测试代码更加准确,在类命名、包路径以及方法名称、变量名称、变量类型的使用更加规范,避免人工编写上的错误以及疏漏。
具体地,按标志的“{}”判断目标关键字对应的逻辑代码段是否完整的具体实施方式为:如果只查询到“{”或“}”,则表示目标关键字对应的逻辑代码段不完整,如果字符“{”或“}”都查询得到,则表示目标关键字对应的逻辑代码段是完整的。同样地,如果只查询到“(”或“)”,则表示目标关键字对应的逻辑代码段不完整,如果字符“(”或“)”都查询得到,则表示目标关键字对应的逻辑代码段是完整的。
具体地,分别按照标志“{}”和“()”对不完整的逻辑代码段进行补充,将逻辑代码段对应的文本内容从字符“{”补充到字符“}”,或从字符“(”补充到字符“)”,使目标关键字对应的逻辑代码段完整。
在上述实施例的基础上,优选地,所述将所述待测试源码切分为字符串数组逐行进行解析,之前包括:
获取所述待测试源码中的函数信息和变量信息,其中所述函数信息包括系统函数和用户自定义的函数,所述变量信息包括系统变量、用户自定义的包变量和用户自定义的词法变量;
为用户自定义的函数、用户自定义的包变量、用户自定义的词法变量分别设置一对应的前缀标识符。
在上述实施例的基础上,优选地,所述将所述待测试源码切分为字符串数组逐行进行解析,匹配出所述目标关键字和所述目标关键字对应的逻辑代码段,包括:
如果根据得到函数信息和符号信息确定得到的词素为用户自定义中的一个,在所述词素之前增加对应的前缀标识符,得到处理后的待测试源码,其中,所述用户自定义包括用户自定义的函数、用户自定义的包变量和用户自定义的词法变量;
将处理后的待测试源码输入语法分析器,获取所述目标关键字和所述目标关键字对应的逻辑代码段。
具体地,在对待测试源码进行解析之前,需要先对待测试源码进行预处理,具体为获取到待测试源码中的函数信息和变量信息,函数信息包括系统函数和用户自定义的函数,变量信息包括系统变量、用户自定义的变量以及用户自定义的词法变量。
然后将用户自定的函数、用户自定义的包变量、用户自定义的词法变量前都设置一个统一的前缀标识符,并且在解析过程中,如果根据得到函数信息和符号信息确定得到的词素为用户自定的函数、用户自定义的包变量、用户自定义的词法变量中的一个,则在词素之前增加对应的前缀标识符,得到处理后的待测试源码,将处理后的待测试源码输入语法分析器,获取目标关键字和目标关键字对应的逻辑代码段。
通过预处理待处理源码中的词素进行识别,并标注用户自定义的词素进行标注,方便现有技术中的语法分析器能够处理。
在上述实施例的基础上,优选地,所述目标关键字包括package、import、class、@Autowired、@Resource、@Value、new、try-catch、this、super、if-else中的一种或多种,所述并获取所述待测试源码中所述目标关键字所在的位置,包括:
通过package识别所述待测试源码中的包路径名;
通过import识别所述待测试源码中的导入包;
通过class识别所述待测试源码中的类名;
通过@Autowired、@Resource识别所述待测试源码中的接口注入类;
通过@Value识别所述待测试源码中的属性值注入;
通过new识别所述待测试源码中的新实例;
通过try-catch识别所述待测试源码中的异常场景;
通过this识别所述待测试源码中的本类调用;
通过super识别所述待测试源码中的父类调用。
具体地,对待测试源码进行解析,解析出该待测试源码中目标关键字,本发明实施例中的目标关键字包括package、import、class、@Autowired、@Resource、@Value、new、try-catch、this、super、if-else这些中的任意组合,具体根据实际情况进行确定。
识别出关键字后,需要继续识别出目标关键字在待测试源码中所在的位置,根据每个目标关键字所代表的含义,通过package可以识别出该待测试源码中的包路径名,即包路径的名称;通过import关键字识别出待测试源码中的导入包,导入包即为别人已经打包好的可用的JAVA类,以便自己的程序可以调用;通过class识别待测试源码中的类名;通过@Autowired、@Resource识别待测试源码中的接口注入类;通过@Value识别待测试源码中的属性值注入,属性注入值是指创建对象的时候,为类中属性设置属性值;通过new识别待测试源码中的新实例;通过try-catch识别待测试源码中的异常场景,通过识别出异常场景可以发现由于系统异常、依赖服务异常、应用本身异常等原因引起的系统问题;通过this识别待测试源码中的本类调用;通过super识别待测试源码中的父类调用。
本发明实施例中可以识别的代码中包含属性注入、new实例、接口调用、静态调用、本类调用、父类调用、异常抛出等,用户也可根据需要,灵活配置符合自己实际需要的业务场景,代码场景,提高开发的开发效率。
在上述实施例的基础上,优选地,所述根据用户测试指令中的待测试源码名称,获取待测试源码,包括:
根据所述待测试源码名称,通过全路径匹配,获取所述待测试源码。
具体地,本发明实施例中根据用户测试指令中的待测试源码名称,该待测试源码名称为进行测试源码的全路径名称,根据该全路径名称进行匹配,从整个项目代码中选出待测试源码。
在上述实施例的基础上,优选地,所述根据预设关键字、所述预设关键字所在的位置和挡板类型,生成测试语句,包括:
将所述预设关键字、所述预设关键字所在的位置和所述挡板类型进行拼接,得到拼接字符串;
并根据所述拼接字符串,生成所述测试语句。
具体地,将预设关键字、预设关键字所在的位置和挡板类型进行拼接,得到一个string字符串,比如预设关键字为接口调用和静态调用,而且预设关键字为2个,静态调用为1个,并将2个接口调用、1个静态调用、2个接口调用所在的位置、1个静态调用所在的位置和挡板类型进行拼接,得到string拼接字符串。
根据该拼接字符串,按照所选用挡板类型的语法规则,生成测试语句。
本发明一优选实施例还提供一种代码自动测试方法,该方法包括:
(1)、接收用户测试指令,根据用户测试指令中待测试源码名称,通过全路径匹配,获取所述待测试源码。
(2)、将待测试源码切分为字符串数组逐行进行解析,匹配出目标关键字和目标关键字对应的逻辑代码段,不同的目标关键字存储在不同的集合中。
(3)、按照“{}”“()”判断逻辑代码段是否完整,若“{}”“()”是完整的,则对应的逻辑代码段是完整的,则将所述目标关键字直接存储在集合中。
(4)、若“{}”“()”是不完整的,则对应的逻辑代码段是不完整的,则对目标关键字进行细粒度解析,分别按照标志“{}”“()”对不完整的逻辑代码段进行补充,将不完整逻辑代码段对应的文本内容从字符“{”补充到字符“}”,或,将不完整逻辑代码段对应的文本内容从字符“(”补充到字符“)”,使对应的逻辑代码段完整,并将不完整的目标关键字补充完整后存储到对应集合中。
(5)、根据逻辑代码段,确定目标关键字对应的位置,目标关键字包括package、import、class、@Autowired、@Resource、@Value、new、try-catch、this、super、if-else中的一种或多种;
通过package识别待测试源码中的包路径名;
通过import识别待测试源码中的导入包;
通过class识别待测试源码中的类名;
通过@Autowired、@Resource识别待测试源码中的接口注入类;
通过@Value识别待测试源码中的属性值注入;
通过new识别待测试源码中的新实例;
通过try-catch识别待测试源码中的异常场景;
通过this识别待测试源码中的本类调用;
通过super识别待测试源码中的父类调用。
(6)、从用户测试指令中获取挡板类型,根据用户选取从目标关键字中选出预设关键字,将预设关键字、预设关键字所在的位置和挡板类型进行拼接,得到拼接字符串。
(7)、根据拼接字符串,生成测试语句。
综上,本发明实施例提供一种代码自动测试方法,通过自动识别出待测试源码、待测试源码中需要进行测试的预设关键字和预设关键字在待测试源码中所在的位置,可以得到需要进行测试的代码位置;并且,结合预设关键字、预设关键字所在的位置和挡板类型,自动生成测试语句。从而利用测试语句对需要进行测试的代码位置进行测试,实现对待测试源码的自动测试。该方法可以对待测试源码自动进行测试,提高了代码测试效率,减轻了测试人员的工作量,同时也避免了人工识别出现的遗漏。
图3为本发明实施例提供的一种代码自动测试系统的结构示意图,如图3所示,该系统包括源码模块310、解析模块320和生成模块330,其中:
源码模块310用于根据用户测试指令中的待测试源码名称,获取待测试源码,所述用户测试指令包括对所述待测试源码进行测试的挡板类型;
解析模块320用于对所述待测试源码进行解析,得到所述待测试源码中所有目标关键字,并获取所述待测试源码中所述目标关键字所在的位置;
生成模块330用于根据预设关键字、所述预设关键字所在的位置和所述挡板类型,生成测试语句,其中所述预设关键字为预先设定的目标关键字,将所述测试语句输出至相应测试方法中,以对所述待测试源码进行测试。
在上述实施例的基础上,优选地,所述解析模块包括解析单元、完整单元和确定单元,其中:
所述解析单元用于将所述待测试源码切分为字符串数组逐行进行解析,匹配出所述目标关键字和所述目标关键字对应的逻辑代码段,不同的目标关键字存储在不同的集合中;
所述完整单元用于判断所述逻辑代码段是否完整,若完整,则将所述目标关键字直接存储在集合中,若不完整,则对所述目标关键字进行细粒度解析,并将不完整的目标关键字补充完整后存储到对应集合中;
所述确定单元用于根据所述逻辑代码段,确定所述目标关键字对应的位置。
在上述实施例的基础上,优选地,还包括预处理模块和前缀模块,其中:
所述预处理模块用于获取所述待测试源码中的函数信息和变量信息,其中所述函数信息包括系统函数和用户自定义的函数,所述变量信息包括系统变量、用户自定义的包变量和用户自定义的词法变量;
所述前缀模块用于为用户自定义的函数、用户自定义的包变量、用户自定义的词法变量分别设置一对应的前缀标识符。
在上述实施例的基础上,优选地,所述解析单元包括自定义子单元和提取子单元:
所述自定义子单元用于在解析过程中,如果根据得到函数信息和符号信息确定得到的词素为用户自定义中的一个,在所述词素之前增加对应的前缀标识符,得到处理后的待测试源码,其中,所述用户自定义包括用户自定义的函数、用户自定义的包变量和用户自定义的词法变量;
所述提取子单元用于将处理后的待测试源码输入语法分析器,获取所述目标关键字和所述目标关键字对应的逻辑代码段。
在上述实施例的基础上,优选地,所述确定单元具体包括包路径名子单元、导入包子单元、类名子单元、接口注入类子单元、属性值注入子单元、实例子单元、异常场景子单元、本类调用子单元和父类调用子单元,其中:
所述包路径名子单元用于通过package识别所述待测试源码中的包路径名;
所述导入包子单元用于通过import识别所述待测试源码中的导入包;
所述类名子单元用于通过class识别所述待测试源码中的类名;
所述接口注入类子单元用于通过@Autowired、@Resource识别所述待测试源码中的接口注入类;
所述属性值注入子单元用于通过@Value识别所述待测试源码中的属性值注入;
所述实例子单元用于通过new识别所述待测试源码中的新实例;
所述异常场景子单元用于通过try-catch识别所述待测试源码中的异常场景;
所述本类调用子单元用于通过this识别所述待测试源码中的本类调用;
所述父类调用子单元用于通过super识别所述待测试源码中的父类调用。
在上述实施例的基础上,优选地,所述源码模块包括名称单元和匹配单元,其中:
所述名称单元用于根据所述用户测试指令,获取所述待测试源码名称;
所述匹配单元用于根据所述待测试源码名称,通过全路径匹配,获取所述待测试源码。
在上述实施例的基础上,优选地,所述测试模块包括拼接单元和测试单元,其中:
所述拼接单元用于将所述预设关键字、所述预设关键字所在的位置和所述挡板类型进行拼接,得到拼接字符串;
所述测试单元用于根据所述拼接字符串,生成所述测试语句。
本实施例为与上述方法实施例对应的系统实施例,其具体实施过程与上述方法实施过程相同,详情请参考上述方法实施例,本系统实施例在此不再赘述。
上述代码自动测试系统中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
图4为本发明实施例提供的一种计算机设备的结构示意图,该计算机设备可以是服务器,其内部结构图可以如图4所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括计算机存储介质、内存储器。该计算机存储介质存储有操作系统、计算机程序和数据库。该内存储器为计算机存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储执行代码自动测试方法过程中生成或获取的数据,如用户测试指令、待测试源码名称、挡板类型、目标关键字。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种代码自动测试方法。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例中的代码自动测试方法的步骤。或者,处理器执行计算机程序时实现代码自动测试系统这一实施例中的各模块/单元的功能。
在一实施例中,提供一计算机存储介质,该计算机存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中代码自动测试方法的步骤。或者,该计算机程序被处理器执行时实现上述代码自动测试系统这一实施例中的各模块/单元的功能。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (10)
1.一种代码自动测试方法,其特征在于,包括:
根据用户测试指令中的待测试源码名称,获取待测试源码,所述用户测试指令包括对所述待测试源码进行测试的挡板类型;
对所述待测试源码进行解析,得到所述待测试源码中所有目标关键字,并获取所述待测试源码中所述目标关键字所在的位置;
根据预设关键字、所述预设关键字所在的位置和所述挡板类型,生成测试语句,其中所述预设关键字为预先设定的目标关键字,将所述测试语句输出至相应测试方法中,以对所述待测试源码进行测试。
2.根据权利要求1所述的代码自动测试方法,其特征在于,所述对所述待测试源码进行解析,得到所述待测试源码中所有目标关键字,并获取所述待测试源码中所述目标关键字所在的位置,包括:
将所述待测试源码切分为字符串数组逐行进行解析,匹配出所述目标关键字和所述目标关键字对应的逻辑代码段,不同的目标关键字存储在不同的集合中;
判断所述逻辑代码段是否完整,若完整,则将所述目标关键字直接存储在集合中,若不完整,则对所述目标关键字进行细粒度解析,并将不完整的目标关键字补充完整后存储到对应集合中;
根据所述逻辑代码段,确定所述目标关键字对应的位置。
3.根据权利要求2所述的代码自动测试方法,其特征在于,所述将所述待测试源码切分为字符串数组逐行进行解析,之前包括:
获取所述待测试源码中的函数信息和变量信息,其中所述函数信息包括系统函数和用户自定义的函数,所述变量信息包括系统变量、用户自定义的包变量和用户自定义的词法变量;
为用户自定义的函数、用户自定义的包变量、用户自定义的词法变量分别设置一对应的前缀标识符。
4.根据权利要求3所述的代码自动测试方法,其特征在于,所述将所述待测试源码切分为字符串数组逐行进行解析,匹配出所述目标关键字和所述目标关键字对应的逻辑代码段,包括:
如果解析过程中根据得到函数信息和符号信息确定得到的词素为用户自定义中的一个,在所述词素之前增加对应的前缀标识符,得到处理后的待测试源码,其中,所述用户自定义包括用户自定义的函数、用户自定义的包变量和用户自定义的词法变量;
将处理后的待测试源码输入语法分析器,获取所述目标关键字和所述目标关键字对应的逻辑代码段。
5.根据权利要求1所述的代码自动测试方法,其特征在于,所述获取所述待测试源码中所述目标关键字所在的位置,包括:
通过package识别所述待测试源码中的包路径名;
通过import识别所述待测试源码中的导入包;
通过class识别所述待测试源码中的类名;
通过@Autowired、@Resource识别所述待测试源码中的接口注入类;
通过@Value识别所述待测试源码中的属性值注入;
通过new识别所述待测试源码中的新实例;
通过try-catch识别所述待测试源码中的异常场景;
通过this识别所述待测试源码中的本类调用;
通过super识别所述待测试源码中的父类调用。
6.根据权利要求1至5任一所述的代码自动测试方法,其特征在于,所述根据用户测试指令中的待测试源码名称,获取待测试源码,包括:
根据所述待测试源码名称,通过全路径匹配,获取所述待测试源码。
7.根据权利要求1至5任一所述的代码自动测试方法,其特征在于,所述根据预设关键字、所述预设关键字所在的位置和挡板类型,生成测试语句,包括:
将所述预设关键字、所述预设关键字所在的位置和所述挡板类型进行拼接,得到拼接字符串;
根据所述拼接字符串,生成所述测试语句。
8.一种代码自动测试系统,其特征在于,包括:
源码模块,用于根据用户测试指令中的待测试源码名称,获取待测试源码,所述用户测试指令包括对所述待测试源码进行测试的挡板类型;
解析模块,用于对所述待测试源码进行解析,得到所述待测试源码中所有目标关键字,并获取所述待测试源码中所述目标关键字所在的位置;
测试模块,用于根据预设关键字、所述预设关键字所在的位置和所述挡板类型,生成测试语句,其中所述预设关键字为预先设定的目标关键字,并将所述测试语句输出至相应测试方法中,以对所述待测试源码进行测试。
9.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7中任一项所述代码自动测试方法的步骤。
10.一种计算机存储介质,所述计算机存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述代码自动测试方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111086647.7A CN113778888B (zh) | 2021-09-16 | 2021-09-16 | 代码自动测试方法、系统、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111086647.7A CN113778888B (zh) | 2021-09-16 | 2021-09-16 | 代码自动测试方法、系统、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113778888A true CN113778888A (zh) | 2021-12-10 |
CN113778888B CN113778888B (zh) | 2024-05-17 |
Family
ID=78851519
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111086647.7A Active CN113778888B (zh) | 2021-09-16 | 2021-09-16 | 代码自动测试方法、系统、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113778888B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016201995A1 (zh) * | 2015-06-16 | 2016-12-22 | 中兴通讯股份有限公司 | 实现构建测试对象的方法、装置及业务配置测试的装置 |
CN108984393A (zh) * | 2018-06-12 | 2018-12-11 | 苏宁易购集团股份有限公司 | 一种单元测试代码自动生成方法及装置 |
US20200167268A1 (en) * | 2018-11-26 | 2020-05-28 | Cognizant Technology Solutions India Pvt. Ltd. | System and a method for automated unit test generation |
CN112328226A (zh) * | 2020-09-17 | 2021-02-05 | 北京中数科技术有限公司 | 一种嵌入式系统自动化测试代码生成方法及装置 |
CN113051163A (zh) * | 2021-03-24 | 2021-06-29 | 中国工商银行股份有限公司 | 单元测试方法、装置、电子设备及存储介质 |
CN113238929A (zh) * | 2021-04-25 | 2021-08-10 | 平安普惠企业管理有限公司 | 基于Mock数据的代码测试方法、装置、电子设备及存储介质 |
-
2021
- 2021-09-16 CN CN202111086647.7A patent/CN113778888B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016201995A1 (zh) * | 2015-06-16 | 2016-12-22 | 中兴通讯股份有限公司 | 实现构建测试对象的方法、装置及业务配置测试的装置 |
CN106326088A (zh) * | 2015-06-16 | 2017-01-11 | 中兴通讯股份有限公司 | 实现构建测试对象的方法、装置及业务配置测试的装置 |
CN108984393A (zh) * | 2018-06-12 | 2018-12-11 | 苏宁易购集团股份有限公司 | 一种单元测试代码自动生成方法及装置 |
US20200167268A1 (en) * | 2018-11-26 | 2020-05-28 | Cognizant Technology Solutions India Pvt. Ltd. | System and a method for automated unit test generation |
CN112328226A (zh) * | 2020-09-17 | 2021-02-05 | 北京中数科技术有限公司 | 一种嵌入式系统自动化测试代码生成方法及装置 |
CN113051163A (zh) * | 2021-03-24 | 2021-06-29 | 中国工商银行股份有限公司 | 单元测试方法、装置、电子设备及存储介质 |
CN113238929A (zh) * | 2021-04-25 | 2021-08-10 | 平安普惠企业管理有限公司 | 基于Mock数据的代码测试方法、装置、电子设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
周建辉: "基于TypeMock Isolator隔离框架的单元测试", 常州信息职业技术学院学报, no. 04, 15 August 2013 (2013-08-15), pages 29 - 32 * |
Also Published As
Publication number | Publication date |
---|---|
CN113778888B (zh) | 2024-05-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10642721B2 (en) | Generation of automated testing scripts by converting manual test cases | |
US20200293291A1 (en) | Source code generation from web-sourced snippets | |
CN109800258B (zh) | 数据文件部署方法、装置、计算机设备及存储介质 | |
CN106919612B (zh) | 一种上线结构化查询语言脚本的处理方法及装置 | |
CN111459495B (zh) | 单元测试代码文件生成方法、电子装置及存储介质 | |
CN109597618B (zh) | 程序开发方法、装置、计算机设备及存储介质 | |
WO2020206840A1 (zh) | 代码翻译方法、装置、计算机设备和存储介质 | |
US20070061641A1 (en) | Apparatus and method for generating test driver | |
CN117009231B (zh) | 基于对话式大语言模型的高可靠单元测试自动生成方法及装置 | |
WO2022227314A1 (zh) | 动态同步测试方法、装置、设备及存储介质 | |
CN110543427A (zh) | 测试用例存储方法、装置、电子设备及存储介质 | |
CN113901083A (zh) | 基于多解析器的异构数据源操作资源解析定位方法和设备 | |
US11422917B2 (en) | Deriving software application dependency trees for white-box testing | |
CN111209210A (zh) | 一种生成测试用例方法、装置、电子设备及存储介质 | |
CN113157554A (zh) | 一种软件自动化做题测试方法以及相关设备 | |
CN111240728A (zh) | 应用程序更新方法、装置、设备和存储介质 | |
CN113778888B (zh) | 代码自动测试方法、系统、设备及存储介质 | |
CN113051262B (zh) | 一种数据质检方法、装置、设备及存储介质 | |
US11740895B2 (en) | Generation of software program repair explanations | |
CN114116268A (zh) | Flink SQL语句的校验方法、装置、计算机设备和存储介质 | |
CN115168175A (zh) | 程序错误解决方法、装置、电子设备和存储介质 | |
CN113467815A (zh) | 热更新的应用修复方法、装置、终端设备及存储介质 | |
CN113760291A (zh) | 日志输出的方法和装置 | |
CN113568662B (zh) | 一种基于调用关系的代码变更影响范围分析方法及系统 | |
CN113672282B (zh) | 数据处理方法、设备、产品及存储介质 |
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 |