一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于操作日志的单元测试方法、装置及介质与流程

2022-03-02 03:48:45 来源:中国专利 TAG:


1.本发明软件测试技术领域,具体涉及一种基于操作日志的单元测试方法、装置及介质。


背景技术:

2.单元测试是指软件的独立单元在与程序的其他部分相隔离的情况下进行的测试,主要用来快速的验证开发的代码是否符合预期。
3.目前,实现单元测试的方法主要为:通过单元测试框架生成初步的单元测试代码,然后经过后续开发人员根据代码逻辑手动修改,获得最终的单元测试代码,进而验证开发的代码是否符合预期。
4.但是,上述通过单元测试框架生成初步的单元测试代码的方法,无法实现单元测试的全覆盖,也没有具体的入参生成,需要后续开发人员根据代码逻辑来手动修改,如果代码量非常大的话,单元测试编写的时间甚至会比功能代码编写花费的时间更长,大大降低了开发人员的开发效率。


技术实现要素:

5.针对现有技术的上述不足,本发明提供一种基于操作日志的单元测试方法、装置及介质,以解决上述技术问题。
6.第一方面,本发明提供一种基于操作日志的单元测试方法,该方法包括:获取操作日志;根据操作日志,获取测试函数以及测试函数对应的正常流数据;根据测试函数,确定测试函数对应的全覆盖数据;基于正常流数据,确定全覆盖数据是否合格;当合格时,生成单元测试代码,并导入全覆盖数据至单元测试代码,进而通过具有全覆盖数据的单元测试代码对测试函数进行测试。
7.进一步地,获取操作日志,具体包括:当接收到预设的操作界面上传的完成开发测试指令时,确定操作界面完成开发操作;获取操作界面对应的操作日志。
8.进一步地,根据操作日志,获取测试函数以及测试函数对应的正常流数据,具体包括:获取操作日志对应的测试函数、测试函数名称、正常流输入参数以及正常流返回值;其中,正常流返回值的类型为字符串类型。
9.进一步地,全覆盖数据包括可执行输入参数、可执行返回值、不可执行输入参数以及不可执行返回值;根据测试函数,确定测试函数对应的全覆盖数据,具体包括:获取测试函数中的判断语句;根据判断语句中的判断条件,确定测试函数对应的可执行输入参数以及不可执行输入参数;其中,可执行输入参数为满足判断条件的输入参数;不可执行输入参数为不满足判断条件的输入参数;
10.根据测试函数,确定可执行输入参数对应的返回值以及不可执行输入参数对应的返回值。
11.进一步地,正常流数据包括正常流输入参数以及正常流返回值;基于正常流数据,
确定全覆盖数据是否合格,具体包括:当正常流输入参数存在于可执行输入参数中以及正常流返回值存在于可执行返回值中时,确实全覆盖数据合格;当正常流输入参数不存在于可执行输入参数中和/或正常流返回值不存在于可执行返回值中时,生成报错指令,以弹出报错界面。
12.进一步地,在根据测试函数,生成单元测试代码,并导入全覆盖数据至单元测试代码之后,方法还包括:导入正常流输入参数至单元测试代码进行单元测试;以获得第一返回值;确定第一返回值是否存在于正常流数据的正常流返回值中;当存在时,确定单元测试代码关于正常流测试合格;导入不可执行输入参数至单元测试代码进行单元测试;以获得第二返回值;确定第二返回值是否存在于不可执行返回值中;当存在时,确定单元测试代码关于异常流测试合格;当检测到单元测试代码对应的正常流测试和异常流测试都合格时,确定单元测试代码关于测试函数合格。
13.进一步地,方法还包括:存储操作日志;存储测试函数以及测试函数对应的正常流数据;存储测试函数对应的全覆盖数据;存储单元测试代码以及单元测试生成的操作数据。
14.第二方面,本发明还提供一种基于操作日志的单元测试装置,装置包括:日志获取模块,用于获取操作日志;日志解析模块,用于根据操作日志,获取测试函数以及测试函数对应的正常流数据;代码解析模块,用于根据测试函数,确定测试函数对应的全覆盖数据;基于正常流数据,确定全覆盖数据是否合格;单元测试生成模块,用于生成单元测试代码,并导入全覆盖数据至单元测试代码,进而通过具有全覆盖数据的单元测试代码对测试函数进行测试。
15.进一步地,装置还包括:存储模块,用于存储日志获取模块获取的操作日志;存储日志解析模块获得的测试函数以及测试函数对应的正常流数据;存储代码解析模块获取的全覆盖数据以及存储单元测试生成模块生成单元测试代码以及单元测试生成的操作数据。
16.第三方面,本发明还提供一种非易失性计算机存储介质,其上存储有计算机指令,计算机指令在被执行时实现上述任一项的一种基于操作日志的单元测试方法。
17.基于前文的描述,本领域技术人员能够理解的是,本发明的有益效果在于,本发明通过分析操作日志,获取满足测试函数对应的判断语句的正常流数据,以便于后续可执行输入参数的验证,以及便于后续关于单元测试代码的正常流测试对应的校验数据的获取。通过分析测试函数,获得了测试函数对应的全覆盖数据(即,可执行输入参数以及不可执行输入参数),为后续的单元测试代码提供了全覆盖的输入参数,实现了具体的输入参数的生成,减少了后续开发人员根据代码逻辑来手动修改的人工过程,大大提高了开发人员的开发效率;为后续代码修改和兼容提供很大的便利,实现了快速的验证开发的代码是否符合预期。
18.此外,本发明设计原理可靠,结构简单,具有非常广泛地应用前景。
附图说明
19.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
20.图1是本发明一个实施例的基于操作日志的单元测试方法的示意性流程图。
21.图2是本发明一个实施例的基于操作日志的单元测试装置的示意性框图。
具体实施方式
22.为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
23.现阶段,主要通过元测试框架生成单元测试代码,因为只是根据测试代码(开发代码)来生成,无法实现单元测试的全覆盖,也没有具体的输入参数的生成,需要后续开发人员根据代码逻辑来手动修改,如果代码量非常大的话,单元测试编写的时间甚至会比功能代码编写花费的时间更长,大大降低了开发人员的开发效率;而单元测试又是必不可少的,单元测试可以为后续代码修改和兼容提供很大的便利,可以快速的验证开发的代码是否符合预期。
24.为了节约开发时间,提高开发效率,本发明提供了一种基于操作日志的单元测试方法、装置及介质。
25.另外,在本技术实施例中提出的一种基于操作日志的单元测试方法,其执行主体是服务器。
26.下面通过附图对本发明实施例提出的技术方案进行详细的说明。
27.如图1所示,本实施公开了一种基于操作日志的单元测试方法,主要包括以下步骤:
28.步骤101、获取操作日志。
29.需要说明的是,操作日志为开发人员在开发测试函数对应代码的调试过程中产生的日志。开发人员在开发过程中往往是边开发边测试,当代码开发完成,并且通过了测试,开发工作才算完成,因此该过程会存在大量的操作日志,将该操作日志收集起来就有了后续的单元测试的正常流输入参数的参照数据。
30.作为示例地,服务器检测到存在操作界面完成开发操作时,服务器获取开发操作对应的操作日志。
31.此外,本实施例可以确定服务器获取测试函数对应的操作日志的时机,作为示例地,当服务器接收到测试函数对应的操作界面上传的完成开发测试指令时,确定操作界面完成开发操作。具体地,基于若干开发人员的操作,服务器实时获取若干操作界面上传的数据,当检测到当前接收到的数据为完成开发测试指令时,服务器获取开发该测试指令中包含的操作界面对应的地址,进而确定相应的操作界面完成开发操作。
32.步骤102、根据所述操作日志,获取测试函数以及所述测试函数对应的正常流数据。
33.需要说明的是,测试函数为等待单元测试的开发代码对应的函数。正常流数据包括正常流输入参数以及正常流返回值;正常流输入参数为满足测试函数对应的判断语句的参数;其中,正常流输入参数与正常流返回值对应,正常流输入参数的数量大于等于正常流返回值的数量。
34.作为示例地,测试函数的代码开发过程中会测试n组不同的正常流输入参数,这n组正常流输入参数主要覆盖正常流(满足判断语句)的情况。将每个分支判断继续向下解析,当满足分支判断会得到一个正常流返回值,最终会得到m组返回结果,n组正常流输入参数和m组正常流返回值之间存在对应关系,将n组正常流输入参数和m组正常流返回值,其中n》=m。
35.作为示例地,服务器获取操作日志对应的测试函数、测试函数名称、正常流输入参数以及正常流返回值;其中,正常流返回值的类型为字符串类型。
36.具体地,以java开发为例,服务器可以使用日志切面来收集操作日志,服务器通过定义日志切面,获取每个测试函数的正常流输入参数和正常流返回值以及测试函数名称等,在日志切面中正常流输入参数的获取顺序不变,正常流返回值可以直接转化为对应的json字符串,方便后续和执行结果对比。
37.本领域的技术人员能够理解的是,本发明通过获取操作日志中开发人员测试用的正常流输入参数以及正常流返回值,为后续单元测试全覆盖数据提供了校验标准,以及为后续验证单元测试代码对应的参数测试是否合格提供了校验标准。
38.步骤103、根据测试函数,确定测试函数对应的全覆盖数据;基于所述正常流数据,确定所述全覆盖数据是否合格。
39.需要说明的是,全覆盖数据包含可执行输入参数、可执行返回值、不可执行输入参数以及不可执行返回值;其中,可执行输入参数为满足测试函数中全部判断语句的若干组输入参数;不可执行输入参数为不满足测试函数中任意一个或多个判断语句的若干组输入参数。进一步地,本领域技术人员能够理解的是,在上述步骤中出现的正常流输入参数仅仅是开发人员在测试过程中使用的一组或几组可执行输入参数,且正常流输入参数包含在可执行输入参数中。
40.作为示例地,服务器获取测试函数中的判断语句;根据所述判断语句中的判断条件,确定测试函数对应的可执行输入参数以及不可执行输入参数;其中,所述可执行输入参数为满足所述判断条件的输入参数;所述不可执行输入参数为不满足判断条件的输入参数;根据测试函数,确定所述可执行输入参数对应的返回值以及不可执行输入参数对应的返回值。以此实现全覆盖数据的获取。
41.具体地,判断语句可以是任何具有判断功能的编程语句,以java为例,常用的判断语句包括条件判断语句if...else...和switch...case...语句。条件判断语句if...else...的判断方法通常是在if语句中添加布尔表达式,布尔表达式大部分都是对数据的各种运算,如关系运算符和逻辑运算符,然后得出一个布尔值。switch...case...语句可以判断一个变量与一系列值中某个值是否相等,每个值称为一个分支,因此可以通过case语句中的值来获取到符合各个case语句的值(可执行输入参数)以及所有条件都不满足的值(不可执行输入参数)。
42.本发明在获取到全覆盖数据后,还可以通过正常流数据对全覆盖数据进行测试。
43.作为示例地,服务器检测正常流输入参数是否存在于可执行输入参数中以及所述正常流返回值是否存在于可执行返回值中。当所述正常流输入参数存在于可执行输入参数中以及所述正常流返回值存在于可执行返回值中时,确实全覆盖数据合格;当正常流输入参数不存在于可执行输入参数中和/或正常流返回值不存在于可执行返回值中时,服务器
生成报错指令,以弹出报错界面。
44.本领域技术人员能够理解的是,由于在上述步骤中出现的正常流输入参数仅仅是开发人员在测试过程中使用的一组或几组可执行输入参数,因此正常流输入参数必然存在与可执行输入参数中,因此,服务器可以根据上述步骤获取到的正常流输入参数校验可执行输入参数是否存在参数遗漏的问题。
45.步骤104、当合格时,生成单元测试代码,并导入全覆盖数据至所述单元测试代码,进而通过具有全覆盖数据的单元测试代码对测试函数进行测试。
46.需要说明的是,单元测试代码为根据测试函数自动生成的代码。其中包含测试函数能够运行的测试环境以及测试函数对应的编程代码。
47.具体地,服务器将测试函数输入任意可行的单元测试代码设备,以生成单元测试代码,并导入全覆盖数据至所述单元测试代码,进而通过具有全覆盖数据的单元测试代码对测试函数进行测试。
48.在单元测试代码完成后,本发明还可以对该单元测试代码进行测试,以验证该单元测试代码是否合格。
49.作为示例地,服务器导入正常流输入参数至正常单元测试代码进行单元测试;以获得第一返回值;确定第一返回值是否存在于正常流数据的正常流返回值中;当存在时,确定单元测试代码关于正常流测试合格;导入不可执行输入参数至单元测试代码进行单元测试;以获得第二返回值;确定第二返回值是否存在于预设的不可执行返回值中;当存在时,确定单元测试代码关于异常流测试合格;当检测到单元测试代码对应的正常流测试和异常流测试都合格时,确定测试函数合格。
50.具体地,在单元测试代码中输入正常流输入参数,调用测试函数获取函数的测试返回值,判断测试返回值和存储的正常流返回值,如果测试函数的测试返回值和存储的可执行正常流返回值一致则表示成功。需要说明的是,由于存在获取信息的测试函数,每次获取的信息都可能有差别,这种情况下则测试返回值为返回信息中的状态,状态如果与正常流返回值一致,则表示成功。在测试函数的开发中,一般都存在返回的成功失败标志和状态码,后续单元测试可以预先存储成功标志和状态码为正常流返回值。
51.本领域的技术人员能够理解的是,正常流输入参数是开发人员在测试过程中使用的一组或几组可执行输入参数,是开发人员输入的具有百分百准确性的可执行输入数据,使用正常流输入参数测试单元测试代码是否合格,准确率以及可信度都比较高。
52.除此之外,本发明还能够存储上述操作内容以便于服务器随时调取任一步的执行结果。
53.作为示例地,服务器存储操作日志;存储正常流数据;存储全覆盖数据以及单元测试过程中单元测试代码以及单元测试产生的操作数据。
54.需要说明的是,服务器存储操作日志,以便于后续从操作日志中提取正常流数据,以及在后续操作出错时回溯错误来源;服务器存储正常流数据,以便于为后续单元测试对应的全覆盖数据提供校验标准,以及为后续验证电源测试代码对应的参数测试是否合格提供校验标准,以及在后续操作出错时回溯错误来源。服务器存储全覆盖数据以及单元测试过程中产生的操作数据,以便于在后续操作出错时回溯错误来源。
55.基于前文的描述,本领域技术人员能够理解的是,本发明通过分析操作日志,获取
满足测试函数对应的判断语句的正常流数据,以便于后续可执行输入数据的验证,以及实现了后续关于单元测试代码的正常流测试对应的校验数据的获取。通过分析测试函数,获得了测试函数对应的全覆盖数据(即,可执行输入参数以及不可执行输入参数),为后续的单元测试代码提供了全覆盖的输入参数,实现了具体的输入参数的生成,减少了后续开发人员根据代码逻辑来手动修改的人工过程,大大提高了开发人员的开发效率;为后续代码修改和兼容提供很大的便利,实现了快速的验证开发的代码是否符合预期。
56.图2为本技术实施例提供的一种基于操作日志的单元测试装置。如图2所示,本技术实施例提供的单元测试装置,该单元测试装置包括:日志获取模块、日志解析模块、代码解析模块、单元测试生成模块以及存储模块;
57.其中,日志获取模块,用于获取操作日志;
58.日志解析模块,用于根据所述操作日志,获取测试函数以及所述测试函数对应的正常流数据;
59.代码解析模块,用于根据测试函数,确定测试函数对应的全覆盖数据;基于所述正常流数据,确定所述全覆盖数据是否合格。
60.单元测试生成模块,用于生成单元测试代码,并导入全覆盖数据至所述单元测试代码,进而通过具有全覆盖数据的单元测试代码对测试函数进行测试。
61.存储模块,用于存储日志获取模块获取的操作日志;存储日志解析模块获得的正常流数据;存储代码解析模块获取的全覆盖数据以及存储单元测试生成模块生成的操作数据。
62.如图2所示,日志获取模块与日志解析模块以及存储模块相连,用于获取、存储以及传输操作日志。
63.需要说明的是,操作日志为开发人员在开发测试函数对应代码的调试过程中产生的日志。开发人员在开发过程中往往是边开发边测试,当代码开发完成,并且通过了测试,开发工作才算完成,因此该过程会存在大量的操作日志,将该操作日志收集起来就有了后续的单元测试的正常流输入参数的参照数据。
64.作为示例地,在服务器检测到日志获取模块完成获取测试函数对应的操作日志后,日志获取模块中的传输指令以及存储指令将会被激活,将会向日志解析模块传输操作日志,以及通过存储模块存储操作日志。
65.日志解析模块还与代码解析模块以及存储模块相连,用于获取正常流数据、存储正常流数据以及传输正常流数据。
66.需要说明的是,正常流数据包括正常流输入参数、正常流返回值以及测试函数名称。具体地,正常流输入参数为是开发人员在测试过程中使用的一组或几组可执行输入参数,是开发人员输入的具有百分百准确性的可执行输入数据。正常流返回值为该正常流输入参数输入测试函数后获得的返回值。其中,正常流输入参数与正常流返回值对应;且正常流输入参数的数量大于等于正常流返回值的数量。
67.具体地,测试函数的代码开发过程中会测试n组不同的正常流输入参数,这n组正常流输入参数主要覆盖正常流(满足判断语句)的情况。将每个分支判断继续向下解析,当满足分支判断会得到一个正常流返回值,最终会得到m组返回结果,n组正常流输入参数和m组正常流返回值之间存在对应关系,将n组正常流输入参数和m组正常流返回值,其中n》=
m。
68.作为示例地,服务器通过日志解析模块获取操作日志中的测试函数、测试函数名称、正常流输入参数以及正常流返回值。基于此完成正常流数据的获取,然后向代码解析模块传输正常流数据。
69.本领域的技术人员能够理解的是,本发明通过获取操作日志中开发人员测试用的正常流输入参数以及正常流返回值,为后续单元测试全覆盖数据提供了校验标准,以及为后续验证电源测试代码对应的参数测试是否合格提供了校验标准。
70.代码解析模块还与单元测试生成模块以及存储模块相连,用于获取正常流参数、生成全覆盖数据、存储全覆盖数据以及传输全覆盖数据。
71.需要说明的是,全覆盖数据包含可执行输入参数、可执行返回值、不可执行输入参数以及不可执行返回值;其中,可执行输入参数为满足测试函数中全部判断语句的若干组输入参数;不可执行输入参数为不满足测试函数中任意一个或多个判断语句的若干组输入参数。进一步地,本领域技术人员能够理解的是,在上述步骤中出现的正常流输入参数仅仅是开发人员在测试过程中使用的一组或几组可执行输入参数,且正常流输入参数包含在可执行输入参数中。
72.具体地,服务器通过代码解析模块获取测试函数中的判断语句;根据判断语句中的判断语句,确定测试函数对应的可执行输入参数以及不可执行输入参数;判断正常流输入参数是否在可执行输入参数中;若存在于在可执行输入参数中,代码解析模块判定可执行输入参数以及不可执行输入参数为全覆盖数据;若不存在于可执行输入参数中,代码解析模块生成报错指令至服务器,并弹出报错界面。
73.单元测试生成模块还与存储模块相连,用于获取存储模块中存储的测试函数、全覆盖数据、正常流数据以及存储单元测试生成模块在运行时的操作数据。
74.具体地,服务器控制代码解析模块将全覆盖数据以及测试函数输入单元测试生成模块,以通过单元测试生成模块生成单元测试代码。
75.在单元测试代码完成后,本发明中的单元测试生成模块还可以对单元测试代码进行测试,以验证该单元测试代码是否合格。
76.作为示例地,服务器控制单元测试生成模块获取正常流输入参数;以通过单元测试生成模块中的单元测试代码获得第一返回值;单元测试生成模块判断第一返回值是否存在于正常流数据的正常流返回值中;当存在时,确定单元测试代码关于正常流测试合格;导入不可执行输入参数至单元测试代码进行单元测试;以获得第二返回值;确定第二返回值是否存在于不可执行返回值中;当存在时,确定单元测试代码关于异常流测试合格;当检测到单元测试代码对应的正常流测试和异常流测试都合格时,确定测试函数合格。
77.除此之外,本发明实施例还提供了本发明实施例还提供了一种非易失性计算机存储介质,其上存储有可执行指令,在该可执行指令被执行时,实现如上述的一种基于操作日志的单元测试方法。
78.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括要素的
过程、方法、商品或者设备中还存在另外的相同要素。
79.至此,尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献