源代码测试方法、装置、电子设备及存储介质与流程

文档序号:31021375发布日期:2022-08-05 20:31阅读:72来源:国知局
源代码测试方法、装置、电子设备及存储介质与流程

1.本技术涉及大数据以及云技术领域,具体而言,本技术涉及一种源代码测试方法、装置、电子设备及存储介质。


背景技术:

2.单元测试是对程序代码单元进行函数级的测试,可以完成对最小软件设计单元的验证。在前端项目中,单元测试也是必不可少的,前端项目中的单元测试可以保证项目的正确性,避免项目上线后才发现问题。
3.当下前端流行的单元测试框架有mocha和jest等,可以提供测试所需要的环境、模拟测试需要的数据以及对编写好的测试用例进行收集、运行,判断测试用例执行的正确性。在实际使用过程中,采用jest、mocha等前端单元测试框架对测试用例进行测试的效率较低。


技术实现要素:

4.本技术提供了一种可以提高测试效率的源代码测试方法、装置、电子设备及存储介质。
5.一方面,提供了一种源代码测试方法,该方法包括:
6.获取待测试的源代码数据,源代码数据包括待测试源代码以及待测试源代码对应的测试管理信息,其中,测试管理信息为待测试源代码的注释信息,测试管理信息包括测试指示信息或目标人员的联系信息中的至少一项;
7.基于源代码数据,生成对应的测试用例;
8.若测试管理信息包括测试指示信息,则根据测试指示信息对测试用例进行测试,得到测试结果;
9.若测试管理信息包括目标人员的联系信息,则基于目标人员的联系信息,将所述测试结果发给目标人员的电子设备。
10.另一方面,提供了一种源代码测试装置,该装置包括:
11.代码数据获取模块,用于获取待测试的源代码数据,源代码数据包括待测试源代码以及待测试源代码对应的测试管理信息,其中,测试管理信息为待测试源代码的注释信息,测试管理信息包括测试指示信息或目标人员的联系信息中的至少一项;
12.测试用例生成模块,用于基于源代码数据,生成对应的测试用例;
13.测试用例测试模块,用于当测试管理信息包括测试指示信息,则根据测试指示信息对测试用例进行测试,得到测试结果;
14.测试结果发送模块,用于当测试管理信息包括目标人员的联系信息,则基于目标人员的联系信息,将测试结果发给目标人员的电子设备。
15.在一种可能的实现方式中,源代码数据包括至少两个待测试源代码,测试指示信息包括至少两个待测试源代码之间的测试优先级信息;
16.测试用例测试模块在根据测试指示信息对测试用例进行测试时,具体用于:
17.按照至少两个待测试源代码之间的测试优先级信息,依次对各源代码数据对应的测试用例进行测试。
18.在一种可能的实现方式中,源代码数据包括至少两个待测试源代码,测试管理信息还包括各待测试源代码的测试类型,源代码测试装置还包括:
19.测试通过率确定模块,用于统计各测试类型的测试结果,并基于各测试类型的测试结果,确定各测试类型对应的测试通过率。
20.在一种可能的实现方式中,测试用例生成模块具体用于:
21.将源代码数据转化为抽象语法树,抽象语法树上的各节点分别对应于待测试源代码中的各个函数,节点之间的连接关系对应于函数之间的包含关系;
22.根据抽象语法树和源代码数据,生成对应的测试用例。
23.在一种可能的实现方式中,测试用例生成模块在根据抽象语法树和源代码数据,生成对应的测试用例时,具体用于:
24.通过遍历抽象语法树,确定目标结构的节点,目标结构包括函数调用结构;
25.若目标结构的节点在抽象语法树中对应的内容包含调用函数,则将目标结构的节点确定为目标节点;
26.基于各目标节点在源代码数据中对应的内容,得到测试用例。
27.在一种可能的实现方式中,测试用例生成模块在基于各目标节点在源代码数据中对应的内容,得到测试用例时,具体用于:
28.根据各调用函数在源代码数据中对应的内容生成各第一测试用例集,测试用例包括各第一测试用例集;
29.对于任一调用函数,若调用函数在源代码数据中对应的内容包括调用函数的被调用函数,则根据被调用函数在源代码数据中对应的内容生成第二测试用例集,并将第二测试用例集合并至第一测试用例集中。
30.在一种可能的实现方式中,调用函数为describe函数,被调用函数为it函数。
31.又一方面,提供了一种电子设备,电子设备包括存储器和处理器,其中,存储器中存储有计算机程序;处理器在运行计算机程序时,执行本技术任一可选实施方式所提供的源代码测试方法。
32.又一方面,提供了一种计算机可读存储介质,存储介质中存储有计算机程序,计算机程序被处理器执行时实现本技术任一可选实施方式所提供的源代码测试方法。
33.本技术提供的技术方案带来的有益效果是:
34.本技术提供了一种源代码测试方法、装置、电子设备及存储介质,与现有技术相比,本技术可以基于源代码数据,生成对应的测试用例,源代码数据中可以包含测试指示信息,可以根据测试指示信息对测试用例进行测试,测试指示信息能够有效的指示测试用例的测试过程,能够提高测试效率,源代码数据中也可以包含目标人员的联系信息,在对测试用例进行测试得到测试结果时,可以基于目标人员的联系信息,将测试结果发给目标人员的电子设备,实现对源代码相关人员的快速定位,有利于快速将源代码的测试结果告知相关人员,以便进行后续处理,能够有效地提高测试效率。
附图说明
35.为了更清楚地说明本技术实施例中的技术方案,下面将对本技术实施例描述中所需要使用的附图作简单地介绍。
36.图1为本技术实施例提供的一种测试用例的生成方法的流程示意图;
37.图2为本技术实施例提供的一种源代码测试方法的流程示意图;
38.图3为本技术实施例提供的一种源代码测试装置的结构示意图;
39.图4为本技术实施例提供的一种电子设备的结构示意图。
具体实施方式
40.下面详细描述本技术的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本技术,而不能解释为对本技术的限制。
41.本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本技术的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
42.为使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术实施方式作进一步地详细描述。
43.下面以具体地实施例对本技术的技术方案以及本技术的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本技术的实施例进行描述。
44.本技术实施例提供了一种源代码测试方法,可以基于源代码数据,生成对应的测试用例,源代码数据中可以包含测试指示信息,可以根据测试指示信息对测试用例进行测试,测试指示信息能够有效的指示测试用例的测试过程,能够提高测试效率,源代码数据中也可以包含目标人员的联系信息,在对测试用例进行测试得到测试结果时,可以基于目标人员的联系信息,将测试结果发给目标人员的电子设备,实现对源代码相关人员的快速定位,有利于快速将源代码的测试结果告知相关人员,以便进行后续处理,能够有效地提高测试效率。
45.本技术所提供的各可选实施例所涉及到的数据,可以基于云技术实现,在方案实施时所涉及的数据处理/数据计算可以基于云计算实现,
46.云技术(cloud technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。云技术(cloud technology)基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都
需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。
47.云计算(cloud computing)是一种计算模式,它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。
48.作为云计算的基础能力提供商,会建立云计算资源池(简称云平台,一般称为iaas(infrastructure as a service,基础设施即服务)平台,在资源池中部署多种类型的虚拟资源,供外部客户选择使用。云计算资源池中主要包括:计算设备(为虚拟化机器,包含操作系统)、存储设备、网络设备。
49.按照逻辑功能划分,在iaas(infrastructure as a service,基础设施即服务)层上可以部署paas(platform as a service,平台即服务)层,paas层之上再部署saas(software as a service,软件即服务)层,也可以直接将saas部署在iaas上。paas为软件运行的平台,如数据库、web容器等。saas为各式各样的业务软件,如web门户网站、短信群发器等。一般来说,saas和paas相对于iaas是上层。
50.云计算(cloud computing)指it基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需资源;广义云计算指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需服务。这种服务可以是it和软件、互联网相关,也可是其他服务。云计算是网格计算(grid computing)、分布式计算(distributedcomputing)、并行计算(parallel computing)、效用计算(utility computing)、网络存储(network storage technologies)、虚拟化(virtualization)、负载均衡(load balance)等传统计算机和网络技术发展融合的产物。
51.随着互联网、实时数据流、连接设备多样化的发展,以及搜索服务、社会网络、移动商务和开放协作等需求的推动,云计算迅速发展起来。不同于以往的并行分布式计算,云计算的产生从理念上将推动整个互联网模式、企业管理模式发生革命性的变革。
52.本技术各可选实施例还可以基于大数据实现,大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。随着云时代的来临,大数据也吸引了越来越多的关注,大数据需要特殊的技术,以有效地处理大量的容忍经过时间内的数据。适用于大数据的技术,包括大规模并行处理数据库、数据挖掘、分布式文件系统、分布式数据库、云计算平台、互联网和可扩展的存储系统。
53.本技术实施例所提供的源代码测试方法可以适用于任何与源代码测试有关的应用场景,比如可以适用于前端源代码测试的场景中。本技术的各可选实施例,可以由测试设备执行,测试设备可以为终端设备,也可以为服务器或者服务器集群,其中,服务器集群包括至少两个服务器,服务器可以是物理服务器,也可以是前文所提及的云服务器。
54.其中,前端源代码测试包括单元测试,单元测试是对程序代码单元进行函数级的测试,是完成对最小软件设计单元的验证工作。单元测试主要从单元功能、单元接口、数据结构以及语句分支覆盖4个方面进行测试。
55.对单元功能的测试是保证单元模块具有完成符合设计要求的功能;对单元接口的
测试是保证在测试时进出程序单元的数据流正确;对数据结构的测试是保证存储的全局数据、局部数据在算法执行的过程中的完整性;对语句分支覆盖的测试是保证单元函数在极限边界条件能够正确执行函数的每条语句、每个分支,消除无用代码。单元函数是由各种语句组成的程序代码,对各种语句测试用例的设计是单元测试的关键。
56.在前端项目中,单元测试也是必不可少的。前端项目中的单元测试可以保证项目的正确性,避免项目上线后才发现问题,可以实现自动化测试,与人工测试相比可以大大提高效率、可以驱动开发,为了保证代码的可测性,就需要在开发阶段就注意接口的设计。
57.单元测试还具有解释性,测试用例本身就是对接口如何使用的说明,好的测试用例可以让其他人员通过测试用例就明白接口的使用方式,节省了阅读文档的时间。单元测试还能够保障项目的重构,项目难免会出现需要重构的问题,有完整的单元测试,才有重构项目的基础动力。
58.本技术实施例可以为待测试源代码添加注释信息,得到待测试的源代码数据,注释信息也就是测试管理信息,包括但不限于目标人员的联系方式、测试指示信息以及测试类型。其中,为便于描述,在本技术实施例中,目标人员的联系方式用撰写人表示,测试指示信息包括但不限于待测试源代码的测试优先级。
59.本技术实施例中,可以基于待测试的源代码数据生成对应的测试用例,测试设备在执行完测试用例之后,可以收集测试用例,实现对测试行为的管理。
60.为便于理解和说明本技术实施例,下面将对本技术实施例所涉及的术语进行解释和说明。
61.测试用例:为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,用于核实是否满足某个特定软件需求。
62.装饰器:本质上是一个ts(typescript)函数,可以让其他函数在不需要做任何代码变动的前提下增加额外功能,其返回值也是一个函数对象,其中,typescript是一种计算机程序设计语言。
63.抽象语法树(abstract syntax tree,ast):源代码语法结构的一种抽象表示,以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。
64.jsdoc:一个根据javascript(简称js)文件中的注释信息,生成javascript应用程序或库、模块的应用程序接口(application programming interface,api)文档的工具,其中,javascript是一种高级编程语言。
65.describe函数:也可以称为测试组函数或者测试套件函数。describe函数是一个全局函数,用于创建一个测试套件,可以理解为一组测试用例的集合。describe函数接受两个参数,分别为字符串和回调函数,字符串是这个测试套件的名字或标题,通常用于描述被测试内容,回调函数是实现测试套件的代码块,也称为describe块。
66.it函数:也可以称为测试项函数或者测试用例函数。it函数也是一个全局函数,用来在describe块中创建一个测试用例,it函数接受两个参数,分被为字符串和回调函数,字符串是测试用例的名字或标题,回调函数是实现测试用例的代码块,也称为it块。
67.本技术实施例中,提供了一种源代码数据的撰写标准,该源代码数据包括注释部分和逻辑实现部分,注释部分也就是下文所提及的测试管理信息,逻辑实现部分也就是下文所提及的待测试源代码。下面将以待测试源代码可以实现1+2等于3为例,详细介绍本申
请实施例所提供的源代码数据。具体地,本技术实施例的源代码数据记为源代码数据a1,源代码数据a1可以如下所示:
68./**
69.*@author someone//撰写人
70.*@priority p0//测试优先级
71.*@casetype unit//测试类型
72.*///上述为注释部分,下述为逻辑实现部分
73.describe(

test sum’,()=》{
74.it(

add test’,function(){
75.expect(sum(1,2)).tobe(3);//实现1+2等于3
76.});
77.});
78.源代码数据a1也可以称为testbase,是采用jsdoc注释的形式来编写的,集样式的优雅与编写的便捷于一体,可以与前端单元测试框架完成无侵入的结合。源代码数据a1包括注释部分和逻辑实现部分,其中,注释部分是采用注释的形式来插入撰写人、测试优先级以及测试类型,不需要对原代码的逻辑(也就是逻辑实现部分)进行更改,可以方便存量代码的迁移,也便于新项目的接入。
79.本技术实施例中,可以利用源代码数据a1生成对应的测试用例,如图1所示,图1为本技术实施例提供的一种测试用例的生成方法的流程示意图。具体地,可以将源代码数据a1转化为对应的抽象语法树,依次遍历抽象语法树上的各个节点并进行相应的处理。
80.其中,对于源代码数据a1对应的抽象语法树中包含如下所示的抽象语法树代码b1和抽象语法树代码b2。
81.抽象语法树代码b1:
82.[0083][0084]
抽象语法树代码b2:
[0085]
[0086]
[0087][0088]
本技术实施例中,依次遍历抽象语法树上的各个节点并进行相应的处理,对于当前遍历的节点,可以采用如下所示的方式进行相应的处理。为便于理解和说明,下面将以步骤的形式描述该方式,该方式可以包括步骤s11-步骤s17,需要说明的是,步骤编号的大小并不限定步骤的执行顺序。
[0089]
步骤s11,判断当前节点是否为函数调用结构对应的节点,若是,则执行步骤s12,若否,则执行步骤s16。
[0090]
本技术实施例中,函数调用结构是expressionstatement,其中,(enum member)ts.syntaxkind.expressionstatement=226,即kind=226,因此,若当前节点在抽象语法树中对应的内容包含“kind:226”,可以确定该节点为函数调用结构对应的节点。其中,本技术实施例以及下述各实施例中,任一节点在抽象语法树中对应的内容,也可以称为该节点所对应的抽象语法树部分。
[0091]
步骤s12,判断当前节点在抽象语法树中对应的内容是否包含describe,若是,则执行步骤s13,若否,则执行步骤s16。
[0092]
本技术实施例中,若当前节点在源代码数据中对应的内容包含describe函数,则当前节点在抽象语法树中对应的内容包含“escapedtext:'describe'”。可以通过判断当前节点在抽象语法树中对应的内容是否包含“escapedtext:'describe'”,来确定当前节点在抽象语法树中对应的内容是否包含describe,也就是describe函数。
[0093]
步骤s13,describe在源代码数据中对应的内容是否包含it,若是,则执行步骤s14,若否,则执行步骤s15。其中,在本技术实施例以及下述各实施例中,任一函数在源代码数据中对应的内容,也可以称为该函数所对应的源代码数据部分。
[0094]
本技术实施例中,若describe在源代码数据中对应的内容包含it,也就是说,describe函数中包含it函数,则与当前节点连接的节点在抽象语法树中对应的内容包含“escapedtext:'it'”。在实际应用的过程中,可以通过判断与当前节点连接的节点在抽象语法树中对应的内容是否包含“escapedtext:'it'”,来确定describe在源代码数据中对应的内容是否包含it,也就是it函数。
[0095]
需要说明的是,抽象语法树是一种树状结构,抽象语法树上的各节点分别对应于待测试源代码中的各个函数,节点之间的连接关系对应于函数之间的包含关系。若describe函数中包含it函数,则describe在源代码数据中对应的内容包含it函数,即describe在源代码数据中对应的内容包含it在源代码数据中对应的内容,相对应的,describe函数所对应的节点与describe函数包含的it函数所对应的节点连接。
[0096]
步骤s14,利用describe在源代码数据中对应的内容生成第一测试用例集,利用it在源代码数据中对应的内容生成的第二测试用例集,将第二测试用例集合并至第一测试用例集中。
[0097]
本技术实施例中,若describe在源代码数据中对应的内容包含it,则利用describe在源代码数据中对应的内容生成第一测试用例集,且第一测试用例集中包含利用it在源代码数据中对应的内容生成的第二测试用例集。
[0098]
例如,上述提及的源代码数据a1为:
[0099]
/**
[0100]
*@author someone//撰写人
[0101]
*@priority p0//测试优先级
[0102]
*@casetype unit//测试类型
[0103]
*///上述为注释部分,下述为逻辑实现部分
[0104]
describe(

test sum’,()=》{
[0105]
it(

add test’,function(){
[0106]
expect(sum(1,2)).tobe(3);//实现1+2等于3
[0107]
});
[0108]
});
[0109]
该源代码数据a1可以视为一个describe在源代码数据中对应的内容,其中,describe函数中包含it函数,则利用源代码数据a1生成的第一测试用例集如下所示:
[0110]
cases:[
[0111]
suite{
[0112]
name:

test sum’,
[0113]
type:

normal’,
[0114]
meta:[object],//对应于撰写人、测试优先级、测试类型
[0115]
parent:[circular],
[0116]
cases:[array],//第二测试用例集
[0117]
}]
[0118]
其中,“meta:[object]”对应于注释部分,包括但不限于撰写人、测试优先级、测试类型,“cases:[array]”为利用it在源代码数据中对应的内容生成的第二测试用例集,也就是利用“it(

add test’,function(){expect(sum(1,2)).tobe(3);});”生成的第二测试用例集。
[0119]
步骤s15,利用describe在源代码数据中对应的内容生成第一测试用例集。
[0120]
本技术实施例中,若describe在源代码数据中对应的内容不包含it,则利用describe在源代码数据中对应的内容生成第一测试用例集,且第一测试用例集中不包含第二测试用例集。
[0121]
例如,若源代码数据a1的describe函数中不包含it函数,也就是说,若源代码数据a1如下所示:
[0122]
/**
[0123]
*@author someone//撰写人
[0124]
*@priority p0//测试优先级
[0125]
*@casetype unit//测试类型
[0126]
*///上述为注释部分,下述为逻辑实现部分
[0127]
describe(

test sum’,()=》{
[0128]
});
[0129]
则生成的第一测试用例集可以如下所示:
[0130]
cases:[
[0131]
suite{
[0132]
name:

test sum’,
[0133]
type:

normal’,
[0134]
meta:[object],//对应于撰写人、测试优先级、测试类型parent:[circular],
[0135]
}]
[0136]
需要说明的是,本实施例中的describe函数内容为空,仅是为了与describe函数中包含it函数的实施例做区分,在实际应用时,describe函数中可以包含it函数和/或除it函数之外的其他函数和/或其他信息,it函数和其他函数的数量在本技术实施例中不做限定。
[0137]
步骤s16,判断当前节点是否为最后一个节点,若是,则结束流程,若否,则执行步骤s17。
[0138]
步骤s17,将下一个节点作为当前节点。
[0139]
本技术实施例中,若当前节点不为最后一个节点,则将下一个节点作为当前节点,并执行步骤s11及其后续步骤。也就是,可以循环多次执行步骤s11-步骤s17。最终循环结束时,可以得到源代码数据对应的测试用例。
[0140]
例如,在循环结束时,对于源代码数据a1,可以得到如下所示的测试用例:
[0141]
console.dir
[0142]
suite{//根节点对应的测试用例部分,相当于一个文件夹
[0143]
name:

root’,
[0144]
type:

normal’,
[0145]
meta:null,
[0146]
parent:null,
[0147]
cases:[//describe函数对应的测试用例部分,即第一测试用例集
[0148]
suite{
[0149]
name:

test sum’,
[0150]
type:

normal’,
[0151]
meta:[object],//对应于撰写人、测试优先级、测试类型
[0152]
parent:[circular],
[0153]
cases:[array],//it函数对应的测试用例部分,即第二测试用例集
[0154]
}]}
[0155]
需要说明的是,源代码数据可以包含至少一个describe函数,对于每一个describe函数,可以包含至少一个it函数,和/或,至少一个除it函数之外的其他函数。源代码数据对应的测试用例中包含一个根节点对应的测试用例部分,根节点对应的测试用例部分中包含各个describe函数对应的测试用例部分,对于每一个describe函数,其对应的测试用例部分中包含其包含的各it函数对应的测试用例部分。
[0156]
本技术实施例还提供了如下所示的两种待测试的源代码数据,分别记为源代码数据a2和源代码数据a3,其中,源代码数据a2和源代码数据a3均是在逻辑实现部分中插入测试管理信息,对源代码的修改量较大。依旧以待测试源代码可以实现1+2等于3为例,详细介
绍本技术实施例所提供的源代码数据a2和源代码数据a3。
[0157]
源代码数据a2如下所示:
[0158]
export function sum(a:number,b:number):number{
[0159]
return a+b;
[0160]
}
[0161]
@suite(

test sum’,

someone’,priority.high,type.unit)//对应于撰写人、测试优先级、测试类型
[0162]
class suite1{
[0163]
@test
[0164]

adds 1+2to equal 3’(){
[0165]
expect(sum(1,2)).tobe(3);//实现1+2等于3
[0166]
}
[0167]
}
[0168]
其中,源代码数据a2是通过装饰器来编写,其优点在于收集信息的方式相对来说比较优雅,
“‘
someone
’”
对应于撰写人、“priority.high”对应于测试优先级、“type.unit”对应于测试类型。本技术实施例中,可以直接将源代码数据a2转化为对应的测试用例。
[0169]
源代码数据a3如下所示:
[0170]
export function sum(a:number,b:number):number{
[0171]
return a+b;
[0172]
}
[0173]
describe(testbase(

test sum’,

someone’,priority.high,type.unit),()=》{
[0174]
//对应于撰写人、测试优先级、测试类型
[0175]
it(

adds 1+2to equal 3’,()=》{
[0176]
expect(sum(1,2)).tobe(3);//实现1+2等于3
[0177]
});
[0178]
});
[0179]
其中,源代码数据a3是通过在describe函数中注入功能(function)的形式来注入测试管理信息,方式不够优雅,
“‘
someone
’”
对应于撰写人、“priority.high”对应于测试优先级、“type.unit”对应于测试类型,可以直接将源代码数据a3转化为对应的测试用例。
[0180]
本技术实施例中,待测试的源代码数据可以采用源代码数据a1-a3任一项所示的方式进行编写,统一了源代码数据的编写方式,可以一目了然每个源代码数据的撰写人、测试优先级和测试类型。
[0181]
本技术实施例中,可以对源代码数据对应的测试用例(可以是源代码数据a1-a3任一项对应的测试用例)进行测试,得到测试结果,并将测试结果发送至撰写人的电子设备中。
[0182]
在实际测试时,可以对多个测试用例进行测试,按照每一个测试用例对应的测试优先级,优先对优先级高的测试用例进行测试,也可以在测试完成后,按照每一个测试用例对应的优先级,优先将优先级高的测试用例的测试结果发送至对应的撰写人的电子设备
中,还可以在测试完成后,优先分析处理优先级高的测试用例的测试结果。
[0183]
在测试完成后,可以统计每一个测试类型对应的测试结果,确定每一个测试类型的测试通过率,基于每一个测试类型的测试通过率,确定本次测试的效果。
[0184]
上述从具体实施例的角度具体阐述了源代码测试方法,下面将从方法步骤的角度详细介绍本技术实施例的源代码测试方法,该源代码测试方法可以由测试设备执行,具体如图2所示,该方法包括步骤s21和步骤s24。
[0185]
步骤s21,获取待测试的源代码数据,源代码数据包括待测试源代码以及待测试源代码对应的测试管理信息,其中,测试管理信息为待测试源代码的注释信息,测试管理信息包括测试指示信息或目标人员的联系信息中的至少一项。
[0186]
本技术实施例中,待测试的源代码数可以如上文所提及的源代码数据a1所示,待测试源代码可以如上文所提及的逻辑实现部分所示,测试管理信息可以如上文所提及的注释部分所示,测试指示信息包括但不限于上文所提及的测试优先级,目标人员的联系信息包括但不限于上文所提及的撰写人。
[0187]
其中,目标人员的联系信息可以是目标人员的邮箱、即时通讯应用程序的标识信息、电话号码等中的至少一项,在本技术实施例中不做限定。
[0188]
步骤s22,基于源代码数据,生成对应的测试用例。
[0189]
本技术实施例中,步骤s22中,基于源代码数据,生成对应的测试用例,具体可以包括:
[0190]
将源代码数据转化为抽象语法树,抽象语法树上的各节点分别对应于待测试源代码中的各个函数,节点之间的连接关系对应于函数之间的包含关系;根据抽象语法树和源代码数据,生成对应的测试用例。
[0191]
本技术实施例中,可以将源代码数据转化为抽象语法树,其转化方式不做限定,例如,可以采用编译器将源代码数据转化为抽象语法树。
[0192]
本技术实施例中,源代码数据中的函数之间可以存在包含关系,例如,describe函数可以包含it函数,具体可以见前述源代码数据a1中的逻辑实现部分。
[0193]
抽象语法树上的各节点分别对应于待测试源代码中的各个函数,节点之间的连接关系对应于函数之间的包含关系,如源代码数据a1中的describe函数和it函数分别对应于抽象语法树上的两个节点,且这两个节点之间连接,表明describe函数包含it函数。
[0194]
其中,根据抽象语法树和源代码数据,生成对应的测试用例,具体可以包括:
[0195]
通过遍历抽象语法树,确定目标结构的节点,目标结构包括函数调用结构;若目标结构的节点在抽象语法树中对应的内容包含调用函数,则将目标结构的节点确定为目标节点;基于各目标节点在源代码数据中对应的内容,得到测试用例。
[0196]
本技术实施例中,抽象语法树的遍历方式不做限定,例如,遍历方式可以为后序遍历(postorder traversal,lrd),也就是先遍历左子树,然后遍历右子树,最后访问根结点。
[0197]
对于遍历的当前节点,可以确定当前节点是否为目标结构的节点,目标结构包括但不限于函数调用结构。若当前节点在抽象语法树中对应的内容包含“kind:226”,可以确定该节点为函数调用结构对应的节点,具体见前文的相关说明。
[0198]
若目标结构的节点在抽象语法树中对应的内容包含调用函数,则将目标结构的节点确定为目标节点,其中,调用函数包括但不限于describe函数,为了便于描述,下面以调
用函数为describe函数为例进行说明。
[0199]
可以通过判断当前节点在抽象语法树中对应的内容是否包含“escapedtext:'describe'”,来确定当前节点在抽象语法树中对应的内容是否包含describe函数,具体见前文的相关说明。
[0200]
本技术实施例中,基于各目标节点在源代码数据中对应的内容,得到测试用例,具体可以包括:
[0201]
根据各调用函数在源代码数据中对应的内容生成各第一测试用例集,测试用例包括各第一测试用例集;对于任一调用函数,若调用函数在源代码数据中对应的内容包括调用函数的被调用函数,则根据被调用函数在源代码数据中对应的内容生成第二测试用例集,并将第二测试用例集合并至第一测试用例集中。
[0202]
其中,调用函数包括但不限于describe函数,被调用函数包括但不限于it函数,为了便于描述,下面将以调用函数为describe函数,被调用函数为it函数为例进行说明。
[0203]
对于每一个调用函数,可以利用describe函数在源代码数据中对应的内容生成第一测试用例集。若describe函数在源代码数据中对应的内容包含it函数,则利用describe函数在源代码数据中对应的内容生成第一测试用例集,且第一测试用例集中包含利用it函数在源代码数据中对应的内容生成的第二测试用例集;若describe函数在源代码数据中对应的内容不包含it函数,则利用describe函数在源代码数据中对应的内容生成第一测试用例集,且第一测试用例集中不包含第二测试用例集,具体可见前文的相关描述。
[0204]
步骤s23,若测试管理信息包括测试指示信息,则根据测试指示信息对测试用例进行测试,得到测试结果。
[0205]
本技术实施例中,源代码数据的注释信息中可以包括测试指示信息,以根据测试指示信息对测试用例进行测试。测试指示信息包括但不限于测试优先级,为便于说明,下面将以测试指示信息为测试优先级为例进行说明。
[0206]
源代码数据包括至少两个待测试源代码,测试指示信息包括至少两个待测试源代码之间的测试优先级信息;步骤s23中,根据测试指示信息对测试用例进行测试,具体可以包括:
[0207]
按照至少两个待测试源代码之间的测试优先级信息,依次对各源代码数据对应的测试用例进行测试。
[0208]
在一种可能的实现方式中,源代码数据可以为至少两个,每一个源代码数据可以包括待测试源代码和对应的测试管理信息,测试管理信息中包括但不限于测试指示信息或目标人员的联系信息。测试指示信息可以是该待测试源代码的测试优先级,换句话说,测试指示信息是至少两个待测试源代码之间的测试优先级信息,也就是说,测试指示信息是至少两个源代码数据之间的测试优先级信息。
[0209]
本技术实施例中,测试指示信息包括至少两个待测试源代码之间的测试优先级信息,可以按照至少两个待测试源代码之间的测试优先级信息,采用优先级从高到低的顺序依次对各源代码数据对应的测试用例进行测试。
[0210]
例如,待测试源代码c1的测试优先级高于待测试源代码c2,则优先测试待测试源代码c1对应的源代码数据,然后测试待测试源代码c2对应的源代码数据。
[0211]
在实际执行时,也可以按照至少两个待测试源代码之间的测试优先级信息,采用
优先级从高到低的顺序依次对各源代码数据对应的测试结果进行处理,处理方式包括但不限于对测试结果进行分析、将测试结果发送至对应的目标人员的电子设备等。
[0212]
例如,待测试源代码c1的测试优先级高于待测试源代码c2,则在分别测试待测试源代码c1、c2各自对应的源代码数据后,优先将待测试源代码c1对应的测试结果发送至对应的目标人员的电子设备,然后将待测试源代码c2对应的测试结果发送至对应的目标人员的电子设备。
[0213]
步骤s24,若测试管理信息包括目标人员的联系信息,则基于目标人员的联系信息,将测试结果发给目标人员的电子设备。
[0214]
本技术实施例中,测试管理信息中可以包括目标人员的联系信息,可以基于目标人员的联系信息,将测试结果发给目标人员的电子设备。其中,目标人员的联系信息可以是目标人员的邮箱、即时通讯应用程序的标识信息、电话号码等中的至少一项。
[0215]
例如,若目标人员的联系信息是目标人员的邮箱,则可以将测试结果发给目标人员的邮箱,目标人员通过电子设备登录目标人员的邮箱,以接收并查看测试结果。
[0216]
本技术实施例中,对于每一个源代码数据,该源代码数据包括待测试源代码以及待测试源代码对应的测试管理信息,测试管理信息中包括目标人员的联系信息,也就是说,每一个源代码数据存在其对应的目标人员的联系信息。因此,对源代码数据对应的测试用例进行测试后,可以基于源代码数据对应的目标人员的联系信息,将测试结果发送至源代码数据对应的目标人员的电子设备中。
[0217]
本技术实施例中,源代码数据包括至少两个待测试源代码,测试管理信息还包括各待测试源代码的测试类型,该方法还可以包括:
[0218]
统计各测试类型的测试结果;基于各测试类型的测试结果,确定各测试类型对应的测试通过率。
[0219]
本技术实施例中,对于每一个源代码数据,该源代码数据包括待测试源代码以及待测试源代码对应的测试管理信息,测试管理信息中包括待测试源代码的测试类型,也就是说,每一个源代码数据存在其对应的测试类型,任两个源代码数据对应的测试类型可以相同,也可以不同,在此不做限定。
[0220]
对各源代码数据对应的测试用例进行测试后,可以统计每一种测试类型的测试结果,任一个测试类型的测试结果包括至少一个,通过各测试类型的测试结果,可以确定各测试类型对应的测试通过率,并将各测试类型对应的测试通过率直接显示在当前的测试设备中,或者发送至预设人员的电子设备中,或者发送至目标人员的电子设备中。
[0221]
由于每一种源代码数据可以存在其对应的目标人员的联系信息和测试类型,因此,目标人员和测试类型之间也可以存在对应关系。在统计各测试类型对应的测试通过率后,可以向目标人员的电子设备中发送目标人员对应的测试类型的测试通过率。
[0222]
在实际执行时,对于每一种测试类型,可以直接将测试类型的测试通过率发送至测试类型对应的目标人员的电子设备中,也可以将测试类型的测试通过率添加至测试类型对应的测试结果中,将添加测试通过率后的测试结果发送至对应的目标人员的电子设备中。
[0223]
本技术实施例提供了一种源代码测试方法,与现有技术相比,本技术实施例可以基于源代码数据,生成对应的测试用例,源代码数据中可以包含测试指示信息,可以根据测
试指示信息对测试用例进行测试,测试指示信息能够有效的指示测试用例的测试过程,能够提高测试效率,源代码数据中也可以包含目标人员的联系信息,在对测试用例进行测试得到测试结果时,可以基于目标人员的联系信息,将测试结果发给目标人员的电子设备,实现对源代码相关人员的快速定位,有利于快速将源代码的测试结果告知相关人员,以便进行后续处理,能够有效地提高测试效率。
[0224]
上述从方法步骤的角度具体阐述了源代码测试方法,下面从虚拟模块的角度介绍源代码测试装置,具体如下所示:
[0225]
本技术实施例提供了一种源代码测试装置,如图3所示,该源代码测试装置30可以包括:代码数据获取模块301、测试用例生成模块302、测试用例测试模型303以及测试结果发送模块304,其中,
[0226]
代码数据获取模块301,用于获取待测试的源代码数据,源代码数据包括待测试源代码以及待测试源代码对应的测试管理信息,其中,测试管理信息为待测试源代码的注释信息,测试管理信息包括测试指示信息或目标人员的联系信息中的至少一项;
[0227]
测试用例生成模块302,用于基于源代码数据,生成对应的测试用例;
[0228]
测试用例测试模块303,用于当测试管理信息包括测试指示信息,则根据测试指示信息对测试用例进行测试,得到测试结果;
[0229]
测试结果发送模块304,用于当测试管理信息包括目标人员的联系信息,则基于目标人员的联系信息,将测试结果发给目标人员的电子设备。
[0230]
在一种可能的实现方式中,源代码数据包括至少两个待测试源代码,测试指示信息包括至少两个待测试源代码之间的测试优先级信息;
[0231]
测试用例测试模块303在根据测试指示信息对测试用例进行测试时,具体用于:
[0232]
按照至少两个待测试源代码之间的测试优先级信息,依次对各源代码数据对应的测试用例进行测试。
[0233]
在一种可能的实现方式中,源代码数据包括至少两个待测试源代码,测试管理信息还包括各待测试源代码的测试类型,源代码测试装置30还包括:
[0234]
测试通过率确定模块,用于统计各测试类型的测试结果,并基于各测试类型的测试结果,确定各测试类型对应的测试通过率。
[0235]
在一种可能的实现方式中,测试用例生成模块302具体用于:
[0236]
将源代码数据转化为抽象语法树,抽象语法树上的各节点分别对应于待测试源代码中的各个函数,节点之间的连接关系对应于函数之间的包含关系;
[0237]
根据抽象语法树和源代码数据,生成对应的测试用例。
[0238]
在一种可能的实现方式中,测试用例生成模块302在根据抽象语法树和源代码数据,生成对应的测试用例时,具体用于:
[0239]
通过遍历抽象语法树,确定目标结构的节点,目标结构包括函数调用结构;
[0240]
若目标结构的节点在抽象语法树中对应的内容包含调用函数,则将目标结构的节点确定为目标节点;
[0241]
基于各目标节点在源代码数据中对应的内容,得到测试用例。
[0242]
在一种可能的实现方式中,测试用例生成模块302在基于各目标节点在源代码数据中对应的内容,得到测试用例时,具体用于:
[0243]
根据各调用函数在源代码数据中对应的内容生成各第一测试用例集,测试用例包括各第一测试用例集;
[0244]
对于任一调用函数,若调用函数在源代码数据中对应的内容包括调用函数的被调用函数,则根据被调用函数在源代码数据中对应的内容生成第二测试用例集,并将第二测试用例集合并至第一测试用例集中。
[0245]
在一种可能的实现方式中,调用函数为describe函数,被调用函数为it函数。
[0246]
本实施例的源代码测试装置可执行本技术上述任一实施例所示的源代码测试方法,其实现原理相类似,此处不再赘述。
[0247]
源代码测试装置可以是运行于计算机设备中的一个计算机程序(包括程序代码),例如源代码测试装置为一个应用软件;该装置可以用于执行本技术实施例提供的方法中的相应步骤。
[0248]
在一些实施例中,本技术实施例提供的源代码测试装置可以采用软硬件结合的方式实现,作为示例,本技术实施例提供的源代码测试装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本技术实施例提供的源代码测试方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(asic,application specific integrated circuit)、dsp、可编程逻辑器件(pld,programmable logic device)、复杂可编程逻辑器件(cpld,complex programmable logic device)、现场可编程门阵列(fpga,field-programmable gate array)或其他电子元件。
[0249]
在另一些实施例中,本技术实施例提供的源代码测试装置可以采用软件方式实现,存储在存储器中的源代码测试装置,其可以是程序和插件等形式的软件,并包括一系列的模块,包括代码数据获取模块301、测试用例生成模块302、测试用例测试模型303、测试结果发送模块304以及测试通过率确定模块;其中,代码数据获取模块301、测试用例生成模块302、测试用例测试模型303、测试结果发送模块304以及测试通过率确定模块用于实现本技术实施例提供的源代码测试方法。
[0250]
本技术实施例提供了一种源代码测试装置,与现有技术相比,本技术实施例可以基于源代码数据,生成对应的测试用例,源代码数据中可以包含测试指示信息,可以根据测试指示信息对测试用例进行测试,测试指示信息能够有效的指示测试用例的测试过程,能够提高测试效率,源代码数据中也可以包含目标人员的联系信息,在对测试用例进行测试得到测试结果时,可以基于目标人员的联系信息,将测试结果发给目标人员的电子设备,实现对源代码相关人员的快速定位,有利于快速将源代码的测试结果告知相关人员,以便进行后续处理,能够有效地提高测试效率。
[0251]
上述从虚拟模块的角度介绍本技术的源代码测试装置,下面从实体装置的角度介绍本技术的电子设备。
[0252]
本技术实施例提供了一种电子设备,如图4所示,图4所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本技术实施例的限定。
[0253]
处理器4001可以是cpu,通用处理器,dsp,asic,fpga或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本技术公开内容所描述
的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,dsp和微处理器的组合等。
[0254]
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是pci总线或eisa总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0255]
存储器4003可以是rom或可存储静态信息和指令的其他类型的静态存储设备,ram或者可存储信息和指令的其他类型的动态存储设备,也可以是eeprom、cd-rom或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
[0256]
存储器4003用于存储执行本技术方案的计算机程序,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的计算机程序,以实现前述任一方法实施例所示的内容。
[0257]
本技术实施例提供了一种电子设备,本技术实施例中的电子设备包括存储器和处理器,其中,存储器中存储有计算机程序;处理器在运行计算机程序时,执行上述任一实施例所示的源代码测试方法。
[0258]
上述从实体装置的角度介绍本技术的电子设备,下面从存储介质的角度介绍本技术的计算机可读存储介质。
[0259]
本技术实施例提供了一种计算机可读存储介质,存储介质中存储有计算机程序,计算机程序被处理器执行时实现上述任一实施例所示的源代码测试方法。
[0260]
本技术实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述方法实施例涉及的各种可选实现方式中提供的方法。
[0261]
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
[0262]
以上所述仅是本技术的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本技术的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1