发明内容
有鉴于此,本申请至少提供一种代码生成方法及装置,有利于提高接口的测试效率和接口代码的编写效率。
第一方面,本申请提供了一种代码生成方法,包括:
在目标接口的接口代码发生代码更新时,获取更新后的接口代码;
从所述更新后的接口代码中提取当前接口特征信息;
若所述当前接口特征信息与更新前的接口代码对应的接口特征信息不同,则基于所述当前接口特征信息生成用于测试所述目标接口的接口功能的接口测试代码。
在一种可能的实施方式中,所述接口特征信息包括以下至少一项:
接口路由信息、接口请求方式信息、接口格式信息、接口功能描述信息、接口代码头部信息、接口代码参数信息、接口代码体信息。
在一种可能的实施方式中,从所述更新后的接口代码中提取当前接口特征信息之后,上述代码生成方法还包括:
若所述当前接口特征信息与更新前的接口代码对应的接口特征信息不同,则将所述当前接口特征信息存入预设数据库中;其中,所述预设数据库用于存储发生更新的接口特征信息;
在基于所述当前接口特征信息生成用于测试所述目标接口的接口功能的接口测试代码之前,还包括:
从所述预设数据库中,获取更新前的接口代码对应的接口特征信息。
在一种可能的实施方式中,从所述更新后的接口代码中提取当前接口特征信息之后,上述代码生成方法还包括:
获取用于存储接口特征信息的、具有预设结构的结构体,并按照所述预设结构,将所述当前接口特征信息存入所述结构体;
所述将所述当前接口特征信息存入预设数据库中,包括:
从所述结构体中获取所述当前接口特征信息,并按照所述结构体的预设结构对应的数据存储格式,将所述当前接口特征信息存入预设数据库中。
在一种可能的实施方式中,上述代码生成方法还包括:
建立所述结构体与所述预设数据库的映射关系;
在将所述当前接口特征信息存入预设数据库中之前,或从所述预设数据库中,获取更新前的接口代码对应的接口特征信息之前,还包括:
基于所述映射关系,定位所述预设数据库。
在一种可能的实施方式中,基于所述映射关系,定位所述预设数据库,包括:
在将所述当前接口特征信息存入预设数据库中之前,基于存储所述当前接口特征信息的结构体,确定与该结构体具有映射关系的所述预设数据库;
从所述预设数据库中,获取更新前的接口代码对应的接口特征信息之前,基于存储更新前的接口代码对应的接口特征信息的结构体,确定与该结构体具有映射关系的所述预设数据库。
在一种可能的实施方式中,上述代码生成方法还包括:
若首次生成所述目标接口的接口代码,则从首次生成的所述接口代码中提取初始接口特征信息;
基于提取的初始接口特征信息生成用于测试所述目标接口的接口功能的接口测试代码。
第二方面,本申请提供了一种代码生成装置,包括:
代码扫描模块,用于在目标接口的接口代码发生代码更新时,获取更新后的接口代码;
信息提取模块,用于从所述更新后的接口代码中提取当前接口特征信息;
代码生成模块,用于在所述当前接口特征信息与更新前的接口代码对应的接口特征信息不同时,基于所述当前接口特征信息生成用于测试所述目标接口的接口功能的接口测试代码。
在一种可能的实施方式中,所述接口特征信息包括以下至少一项:
接口路由信息、接口请求方式信息、接口格式信息、接口功能描述信息、接口代码头部信息、接口代码参数信息、接口代码体信息。
在一种可能的实施方式中,所述代码生成装置还包括:
信息存储模块,用以在所述当前接口特征信息与更新前的接口代码对应的接口特征信息不同时,将所述当前接口特征信息存入预设数据库中;其中,所述预设数据库用于存储发生更新的接口特征信息;
信息获取模块,用于从所述预设数据库中,获取更新前的接口代码对应的接口特征信息。
在一种可能的实施方式中,所述信息存储模块还用于获取用于存储接口特征信息的、具有预设结构的结构体,并按照所述预设结构,将所述当前接口特征信息存入所述结构体;以及从所述结构体中获取所述当前接口特征信息,并按照所述结构体的预设结构对应的数据存储格式,将所述当前接口特征信息存入预设数据库中。
在一种可能的实施方式中,上述代码生成装置还包括:
映射建立模块,用于建立所述结构体与所述预设数据库的映射关系;
数据库定位模块,用于基于所述映射关系,定位所述预设数据库。
在一种可能的实施方式中,所述数据库定位模块具体用于,在将所述当前接口特征信息存入预设数据库中之前,基于存储所述当前接口特征信息的结构体,确定与该结构体具有映射关系的所述预设数据库;以及,从所述预设数据库中,获取更新前的接口代码对应的接口特征信息之前,基于存储更新前的接口代码对应的接口特征信息的结构体,确定与该结构体具有映射关系的所述预设数据库。
在一种可能的实施方式中,所述信息提取模块还用于,在首次生成所述目标接口的接口代码时,从首次生成的所述接口代码中提取初始接口特征信息;
所述代码生成模块还用于基于提取的初始接口特征信息生成用于测试所述目标接口的接口功能的接口测试代码。
第三方面,本申请提供了一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如上述的代码生成方法的步骤。
第四方面,本申请还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如上述的代码生成方法的步骤。
本申请提供了一种代码生成方法及装置,其中,本申请能够在接口代码发生更新时,从更新后的接口代码中获取新的接口特征信息,并在接口特征信息也发生更新时,基于新的接口特征信息生成用于接口功能测试的接口测试代码。上述技术方案避免了人工编写和更新接口测试代码,有效提高了接口代码的编写效率和接口的测试效率,同时节省了人力资源。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。
另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请实施例中将会用到术语“包括”,用于指出其后所声明的特征的存在,但并不排除增加其它的特征。
如图1所示,本申请实施例提供了一种代码生成方法,该方法应用于需要进行代码自动生成的终端设备,具体的,包括如下步骤:
S110、在目标接口的接口代码发生代码更新时,获取更新后的接口代码。
这里,接口代码由相关的研发人员进行编写和更新,在研发人员更新了接口代码的时候,触发接口代码扫描脚本,自动扫描接口代码,从而能够自动获取到更新后的接口代码。
上述是由研发人员在更新了接口代码后,通过触发接口代码扫描脚本来获取更新后的接口代码的,在实际应用中,也可以利用其他方式获取更新后的接口代码,例如,可以每隔预设时间,自动执行接口代码扫描脚本,以获取当前的接口代码,并将当前获取的接口代码与上一次获取的接口代码进行比较,如果比较结果显示两者不同,则将当前获取的接口代码作为更新后的接口代码。本申请对触发获取更新后的接口代码的方式并不进行限定。
S120、从所述更新后的接口代码中提取当前接口特征信息。
这里,具体可以通过接口特征信息提取脚本,自动从更新后的接口代码中提取接口特征信息。在具体实施中,上述接口特征信息可以包括以下至少一项:接口路由信息、接口请求方式信息、接口格式信息、接口功能描述信息、接口代码头部信息、接口代码参数信息、接口代码体信息。
在执行此步骤之前,需要根据应用场景的不同,编写适用的接口特征信息提取脚本,例如,根据应用场景,编写适用于WEB框架的接口特征信息提取脚本。以用gin编写的WEB框架下的接口特征信息提取脚本为例,可以根据Router的定义方式,提取接口的请求"Method"(即接口请求方式信息)、"Path"(即接口路由信息);根据调用的controller,获取具体的接口处理方式,并通过读取"DefaultQuery"关键字获取"code","state"两个query参数(即接口代码参数信息);通过读取到bind关键字,分析UserLoginReq结构体,获取到Format为"json"的Body体参数分别为"username"、"password"(即接口代码体信息)。
S130、若所述当前接口特征信息与更新前的接口代码对应的接口特征信息不同,则基于所述当前接口特征信息生成用于测试所述目标接口的接口功能的接口测试代码。
在执行此步骤之前,首选需要获取更新前的接口代码对应的接口特征信息。具体地,可以从存储接口特征信息的预设数据库中提取更新前的接口特征信息。
在执行此步骤之前,还需要将当前接口特征信息与更新前的接口代码对应的接口特征信息进行比较,若相同,则不必生成新的接口测试代码,利用原来的接口测试代码进行接口功能测试即可,如果不相同,则需要生成新的接口测试代码,以进行接口功能的测试。
此步骤中,在当前接口特征信息与更新前的接口代码对应的接口特征信息不同时,具体可以利用预设设置好的代码生成脚本,例如,java的apachefreemark,基于提取得到的接口特征信息自动生成接口测试代码。
本申请中,需要预先设置代码生成脚本,在设置代码生成脚本的时候,需要考虑各类HTTP请求方式的特征等。
在一些实施例中,从所述更新后的接口代码中提取当前接口特征信息之后,上述代码生成方法还包括:
若所述当前接口特征信息与更新前的接口代码对应的接口特征信息不同,则将所述当前接口特征信息存入预设数据库中;其中,所述预设数据库用于存储发生更新的接口特征信息。
上述预设数据库用于存储每次发生更新的接口特征信息,在将接口特征信息存入预设数据库之前,需要将当前获取的当前接口特征信息与更新前的接口代码对应的接口特征信息进行比较,若不相同,再将当前接口特征信息存入预设数据库;若相同,则不将当前接口特征信息存入预设数据库。
在一些实施例中,在基于所述当前接口特征信息生成用于测试所述目标接口的接口功能的接口测试代码之前,上述代码生成方法还包括:
从所述预设数据库中,获取更新前的接口代码对应的接口特征信息。
由于接口特征信息存储在预设数据库中,因此,在获取到当前接口特征信息之后,需要从预设数据库中获取更新前的接口代码对应的接口特征信息。
在一些实施例中,从所述更新后的接口代码中提取当前接口特征信息之后,上述代码生成方法还包括如下步骤:获取用于存储接口特征信息的、具有预设结构的结构体,并按照所述预设结构,将所述当前接口特征信息存入所述结构体。
上述结构体的具体结构可以根据实际应用场景灵活设置,例如,可以将结构体设置为HTTP Restful风格,如下:
在提取到上述接口特征信息之后,可以将提取的接口特征信息赋值给上述结构体。
在设置好结构体之后,可以基于结构体的特征,设置预设数据库的数据存储格式。之后,从所述结构体中获取所述当前接口特征信息,并按照所述结构体的预设结构对应的数据存储格式,将所述当前接口特征信息存入预设数据库中。
另外,在生成接口测试代码的时候,可基于提取到的当前接口特征信息直接进行生成处理,也可以从预设数据库中提取当前接口特征信息,再基于从预设数据库提取的当前接口特征信息生成接口测试代码。
在具体实施时,可以利用mysql关系数据库作为预设数据库。在数据库中可以建立应用程序接口API表,利用API表存储结构体中的接口特征信息。
在一些实施例中,上述代码生成方法还包括如下步骤:建立所述结构体与所述预设数据库的映射关系。也可以是建立结构体与预设数据库中的API表的映射关系。
基于上面建立的映射关系,在将所述当前接口特征信息存入预设数据库中之前,或从所述预设数据库中,获取更新前的接口代码对应的接口特征信息之前,可以定位到所述预设数据库,继而可以将当前接口特征信息存入预设数据库,或从预设数据库中获取接口特征信息。
在具体实施时,可以利用ORM框架建立结构体与预设数据库的映射关系。
在一些实施例中,基于所述映射关系,定位所述预设数据库,具体可以利用如下步骤实现:
在将所述当前接口特征信息存入预设数据库中之前,基于存储所述当前接口特征信息的结构体,确定与该结构体具有映射关系的所述预设数据库。
从所述预设数据库中,获取更新前的接口代码对应的接口特征信息之前,基于存储更新前的接口代码对应的接口特征信息的结构体,确定与该结构体具有映射关系的所述预设数据库。
上述实施例中,对接口代码更新后生成接口测试代码的过程进行了说明,本申请还公开了首次生成接口代码后生成接口测试代码的步骤,具体的,如图2所示:
S210、若首次生成所述目标接口的接口代码,则从首次生成的所述接口代码中提取初始接口特征信息。
这里,可以是研发人员首次生成接口代码后,手动触发代码扫描脚本获取接口代码,之后由接口特征信息提取脚本提取初始接口特征信息。也可以是,代码扫描脚本在预设时间到达时,自动扫描得到接口代码,并经过判断,确定该接口代码是首次生成的接口代码,再由接口特征信息提取脚本提取初始接口特征信息。
S220、基于提取的初始接口特征信息生成用于测试所述目标接口的接口功能的接口测试代码。
这里,由于接口代码是首次生成的,因此只有初始接口特征信息,可以直接利用初始接口特征信息生成接口测试代码。
上述实施例中的代码生成方法能够在接口代码首次生成后,或接口代码发生更新后,自动扫描得到新的接口代码,以及进行后续的接口特征信息提取、接口测试代码生成等,在需要有大量的接口需要维护时,上述方法能够提高接口测试代码生成效率和接口测试效率,降低接口维护成本。
对应于上述代码生成方法,本申请实施例还提供了一种代码生成装置,该代码生成装置应用于具有代码生成功能的终端设备,并且该代码生成装置及其各个模块能够执行与上述代码生成方法相同的方法步骤,并且能够达到相同的有益效果,因此对于重复的部分不再赘述。
具体地,如图3所示,本申请实施例提供的代码生成装置包括:
代码扫描模块310,用于在目标接口的接口代码发生代码更新时,获取更新后的接口代码。
信息提取模块320,用于从所述更新后的接口代码中提取当前接口特征信息。
代码生成模块330,用于在所述当前接口特征信息与更新前的接口代码对应的接口特征信息不同时,基于所述当前接口特征信息生成用于测试所述目标接口的接口功能的接口测试代码。
在一些实施例中,所述接口特征信息包括以下至少一项:
接口路由信息、接口请求方式信息、接口格式信息、接口功能描述信息、接口代码头部信息、接口代码参数信息、接口代码体信息。
如图4所示,本申请实施例还提供了一种代码生成装置,包括代码扫描模块410、信息提取模块420、代码生成模块430、信息存储模块440、信息获取模块450。
代码扫描模块410、信息提取模块420、代码生成模块430与上一个实施例中的代码扫描模块310、信息提取模块320和代码生成模块330作用相同,这里不再赘述。
信息存储模块440用以在所述当前接口特征信息与更新前的接口代码对应的接口特征信息不同时,将所述当前接口特征信息存入预设数据库中;其中,所述预设数据库用于存储发生更新的接口特征信息;
信息获取模块450用于从所述预设数据库中,获取更新前的接口代码对应的接口特征信息。
在一些实施例中,所述信息存储模块440还用于获取用于存储接口特征信息的、具有预设结构的结构体,并按照所述预设结构,将所述当前接口特征信息存入所述结构体;以及从所述结构体中获取所述当前接口特征信息,并按照所述结构体的预设结构对应的数据存储格式,将所述当前接口特征信息存入预设数据库中。
在一些实施例中,上述代码生成装置还包括:
映射建立模块460,用于建立所述结构体与所述预设数据库的映射关系;
数据库定位模块470,用于基于所述映射关系,定位所述预设数据库。
在一些实施例中,所述数据库定位模块470具体用于,在将所述当前接口特征信息存入预设数据库中之前,基于存储所述当前接口特征信息的结构体,确定与该结构体具有映射关系的所述预设数据库;以及,从所述预设数据库中,获取更新前的接口代码对应的接口特征信息之前,基于存储更新前的接口代码对应的接口特征信息的结构体,确定与该结构体具有映射关系的所述预设数据库。
在一些实施例中,所述信息提取模块420还用于,在首次生成所述目标接口的接口代码时,从首次生成的所述接口代码中提取初始接口特征信息;
所述代码生成模块430还用于基于提取的初始接口特征信息生成用于测试所述目标接口的接口功能的接口测试代码。
本申请实施例公开了一种电子设备,如图5所示,包括:处理器501、存储器502和总线503,所述存储器502存储有所述处理器501可执行的机器可读指令,当电子设备运行时,所述处理器501与所述存储器502之间通过总线503通信。
所述机器可读指令被所述处理器501执行时执行以下代码生成方法的步骤:
在目标接口的接口代码发生代码更新时,获取更新后的接口代码;
从所述更新后的接口代码中提取当前接口特征信息;
若所述当前接口特征信息与更新前的接口代码对应的接口特征信息不同,则基于所述当前接口特征信息生成用于测试所述目标接口的接口功能的接口测试代码。
本申请实施例还提供的一种对应于代码生成方法及装置的计算机程序产品,包括存储了程序代码的计算机可读存储介质,程序代码包括的指令可用于执行前面方法实施例中的方法,具体实现可参见方法实施例,在此不再赘述。
上文对各个实施例的描述倾向于强调各个实施例之间的不同之处,其相同或相似之处可以相互参考,为了简洁,本文不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考方法实施例中的对应过程,本申请中不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。