自动化测试方法、系统、装置和计算机可读存储介质与流程

文档序号:20838394发布日期:2020-05-22 17:10阅读:206来源:国知局
自动化测试方法、系统、装置和计算机可读存储介质与流程

本发明涉及计算机技术领域,具体涉及一种自动化测试方法、系统、装置和计算机可读存储介质。



背景技术:

目前京东的预发环境和线上环境使用的是同一套数据库,所有写数据的操作都是要直接入库的,会直接进入生产环境。如果在预发环境和线上环境中进行写接口测试,产生的测试脏数据将进入生产环境,因此一般情况下,不允许在预发环境和线上环境下进行接口测试。目前的解决方法是在测试环境中进行相应的测试。但是发明人发现,在测试环境构造数据进行写接口的测试,存在以下弊端:

首先,测试环境下数据比较少而且容易改动,不仅维护成本高,而且很难覆盖完全,存在漏测的风险;

其次,测试用例都是人工设计的,人工设计难免存在疏漏,存在思虑不全导致漏测的风险。



技术实现要素:

有鉴于此,本发明实施例提供一种自动化测试方法和自动化测试系统,以解决现有技术中的漏测问题。

根据本发明的第一方面,提供一种自动化测试方法,包括:

基于生产环境的接口调用日志,生成多个测试用例,每个测试用例包括接口名、入口参数值和第一出口参数值;

针对每个测试用例,基于入口参数值和接口名执行接口调用,并获得返回的第二出口参数值,将所述第一出口参数值和所述第二出口参数值比较,并根据比较结果判定每个测试用例是否通过。

优选地,还包括:将所述多个测试用例存储到测试库中。

优选地,还包括:通过配置文件维护至少一个测试用例。

优选地,所述针对每个测试用例,基于对应的入口参数值和接口名执行接口调用包括:

从配置文件中顺序读取每个测试用例,得到接口名,根据接口名从所述测试库中读取对应的入口参数值,然后执行接口调用。

优选地,所述执行接口调用包括:

设置一个接口应用,所述接口应用接收对应的入口参数值和接口名,并根据所述对应的入口参数和接口名调用相应的接口。

优选地,所述接口应用和所述生产环境的数据库连接。

优选地,还包括:将接口分为读接口和写接口,对于写接口,将其依赖的读接口更改为线上正式别名,并且在写接口中屏蔽数据库写入的操作。

优选地,所述接口名包含类名和方法名。

优选地,所述生成多个测试用例包括:

对于每条接口调用日志,判断所述接口调用日志包含出口参数值和/或入口参数值;

当一条接口调用日志包含出口参数值和入口参数值,则基于所述接口调用日志生成一条测试用例;

如果一条接口调用日志中只包含出口参数值,如果找到相应的记录中包含入口参数值,则生成一条测试用例。

根据本发明的第二方面,提供本发明实施例提供一种自动化测试系统,包括:

用例生成模块,用于基于生产环境的接口调用日志,生成多个测试用例,每个测试用例包括接口名、入口参数值和第一出口参数值;

自动化测试模块,用于针对每个测试用例,将入口参数值和接口名发送给接口应用,并获得返回的第二出口参数值,将所述第一出口参数值和所述第二出口参数值比较,并根据比较结果判定每个测试用例是否通过;

接口应用,用于从所述自动化测试模块接收入口参数值和接口名并执行接口调用,将接口调用的第二出口参数值返回给所述自动化测试模块。

优选地,所述接口应用和所述生产环境的数据库连接。

优选地,对于所述接口应用调用的写接口,将其依赖的读接口更改为线上正式别名,并且在写接口中屏蔽数据库写入的操作。

根据本发明实施例的第三方面,提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令被执行时实现自动化测试方法。

根据本发明实施例的第四方面,提供一种自动化测试系统,包括:

存储器,用于存储计算机指令;

处理器,耦合到所述存储器,所述处理器被配置为基于所述存储器存储的计算机指令执行实现上述自动化测试方法。

本发明一实施例具有以下优点或有益效果:根据生产环境的接口调用日志生成自动化所需的测试用例,根据测试用例执行自动化测试,无需测试人员设计和构建测试用例和测试数据,从而避免了漏测风险,由系统自动完成测试结果的对比,可靠性高。

本发明优选实施例具有以下优点或有益效果:将自动化测试系统和生产环境的数据库连接,并将接口应用中的会往数据库中写入数据的操作屏蔽,在充分利用了生产环境中的真实数据进行自动化测试的基础上,避免了自动化测试在生产环境中产生脏数据。

附图说明

通过参照以下附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:

图1是本发明一实施例的自动化测试系统的结构示意图;

图2是图1所示的用例生成模块的具体流程图;

图3是图1所示的接口改造模块的具体流程图;

图4是图1所示的自动化测试模块300的具体流程图;

图5是本发明一实施例的自动化测试方法的流程图;

图6是本发明实施例的自动化测试装置的结构图。

具体实施方式

以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。

图1是本发明一实施例的接口测试系统的结构示意图。自动化测试系统10包括用例生成模块100、接口提供模块200和自动化测试模块300。

如图1所示,logbook系统103是线上业务系统的日志记录系统,用于记录生产环境的接口调用日志和业务处理日志,并且将这些日志存储在日志文件或测试库中。logbook系统103一般按照预设的规则记录接口调用日志,用例生成模块100则按照对应的规则从日志文件或数据表内读取接口调用日志,并生成自动化测试所需的接口用例。不是所有的生产环境的接口调用日志都能够转化为自动化测试所需的接口用例。自动化测试所需的接口用例一般需要提供类名(或者接口名)、方法名、入口参数、出口参数、返回参数等信息。缺乏相应信息的接口调用日志不会转换为自动化测试所需的测试用例。因此,生产环境的接口调用日志经过处理后,只有部分转换为自动化测试所需的接口用例。

接口应用200调用多个接口并返回结果信息。接口应用可以部署在一个特定服务器上,接收自动化测试模块300发过来的接口名和入口参数值,并基于接口名和入口参数值调用相应的接口,并将接口调用的出口参数值返回给自动化测试模块300。

自动化测试模块300根据测试用例进行自动化测试。测试用例可以来自如图1所示的配置文件401,在配置文件401记录了待测接口的接口名,根据接口名能检索到对应的测试用例,读取该测试用例的入口参数值,将入口参数值和接口名传递给接口应用,使得该接口应用执行相应的接口,并得到返回信息302。返回信息302为接口的出口参数值。自动化测试模块300然后根据预定的对比规则402将执行接口得到的出口参数值和接口日志中的出口参数303比较,如果一致,说明该测试用例通过,如果不一致,说明失败。以此类推,直到配置文件401中所有的待测接口均被测试完。如果没有配置文件401,则自动化测试模块300直接去读取用例生成模块100提供的测试用例进行测试。

本发明实施例提供的自动化测试系统根据生产环境的接口调用日志生成自动化所需的测试用例,根据测试用例执行自动化测试,无需测试人员设计和构建测试用例和测试数据,从而避免了漏测风险,由系统自动完成测试结果的对比,可靠性高。

在一个实施例中,接口应用200和生产环境的数据库相连接,为了避免调用接口会对在生产环境产生大量的脏数据,对接口应用调用的各种接口进行代码级别的改造,使接口应用不会往生产环境中写入脏数据。有些接口会将往数据库内写入数据,该类接口被称为写接口,另外一些接口不涉及数据写入的操作,该类接口被称为读接口。由于读接口不会产生脏数据,因此不需要进行代码改造。但是需要对写接口进行代码改造。具体地,梳理出写接口所依赖的读接口,并把读接口的别名配置为线上设定的别名,屏蔽写接口中的写数据库的操作(不把数据写入生产环境)。代码改造完成后的接口应用可以部署在一个特定服务器上,并为改造好的接口应用提供一个别名,例如,autotest001。

可见,将接口应用和生产环境的数据库连接,并将接口应用中的会往数据库中写入数据的操作屏蔽,能够充分利用生产环境中的真实数据进行自动化测试,并且避免了自动化测试在生产环境中产生脏数据。

在一个实施例中,测试用例的数据结构如下表所示。

其中,uuid表示日志的标识,同一个接口调用的日志的uuid相同。例如,logbook系统在开始调用一个接口时写下一条日志,包含uuid,类名、方法名和入口参数值,在完成该接口调用又写下一条日志,包含uuid,类名、方法名、出口参数值和返回值,从而,通过uuid能够确定这两条日志是针对同一个接口的信息。result表示从生产环境的接口调用日志得到的出口参数,real_result表示基于接口应用返回的出口参数值。state表示测试用例的执行结果,例如,自动化测试模块300比较result和real_result,如果两者一致,将state设定为1,否则设定为0。

在一个实施例中,如图2所示,图1所示的用例生成模块包括以下步骤。

在步骤s201中,对日志文件的数据逐条读取。

在步骤s202中,判断该条记录是否有出口参数值。如果有出口参数值,执行步骤s203。

在步骤s203中,判断是否有入口参数值,如果有入口参数值,执行步骤s204。

在步骤s204中,直接插入到测试库。

在步骤s205中,判断该条出口参数记录的uuid是否在数据库中另一条记录中存在。如果是,执行步骤s207。

在步骤s206中,丢弃该条记录。

在步骤s207中,从两条记录中获取入口参数值和出口参数值,插入到测试库。

在步骤s208中,丢弃该条记录。

本实施例的实施基于上述表格中的数据结构。具体地,从生产环境的接口调用日志中每读取一条记录,首先判断是否有出口参数值,如果有,则判断该条记录中是否有入口参数值,如果还有,则可以在测试库中插入一条测试用例。如果判断该条记录中不包含出口参数值,则丢弃这条记录。如果该条记录中包含出口参数值,并且在测试库中查到另一条具有相同uuid的记录,则从两条记录中分别获取入口参数值和出口参数值,并插入到测试库。

对于本实施例,应该理解,本实施例的处理逻辑不仅依赖于上述表格的数据库结构,同时也依赖接口调用日志的日志撰写规则。如果日志撰写规则或数据库结构改变,则本实施例的处理逻辑也将相应地改变。

在一个实施例中,如图3所示,图1所示的接口应用200要经过以下步骤的改造。

在步骤s301中,梳理出写接口依赖的读接口。

在步骤s302中,更改读接口别名为线上正式别名。

在步骤s303中,屏蔽该接口的所有写操作。

在步骤s304中,对外单独提供一个别名。

在本实施例中,对于调用接口的接口应用,需要梳理出所有写接口所依赖的读接口,并把读接口的别名配置为线上正式别名,屏蔽写数据库的操作(不把数据真实写入线上进行生产),为自动化测试模块单独提供一个别名。要调用真实环境中的接口必须将接口的别名配置为线上正式别名,接口级别的调用是以别名来区分的。本实施例实现了对接口应用的改造过程,通过屏蔽写数据库的操作,避免在生产环境的数据库内产生脏数据。

在一个实施例中,如图4所示,图1所示的自动化测试模块300包括以下步骤。

在步骤s401中,读取配置文件中的接口名和方法名。

在步骤s402中,读取相应接口名和方法名的所有测试用例的入口参数值和出口参数值。出口参数值存储到result字段中。

在步骤s403中,使用入口参数值逐条执行接口调用。

在步骤s404中,获得调用的返回结果写入real_result字段。

在步骤s405中,将real_result的值与result字段的值按照对比规则进行对比。

在步骤s406中,判断是否一致。如果一致,执行步骤s408,否则执行步骤s407。

在步骤s407中,该条用例执行失败。

在步骤s408中,该条用例执行成功。

本实施例的实施基于上述表格中的数据结构。具体地,从配置文件每读一条记录,根据该条记录的接口名从测试库中读取对应接口的入口参数值和出口参数值,将出口参数值存储到对应的result字段中,根据入口参数值执行相应的接口调用,得到的结果存储进real_result字段中,按照预设规则比较result和real_result,从而判断出测试用例是否执行成功,并将执行结果存储到state字段中。

相应地,本发明实施例同时提供一种自动化测试方法。如图5所示的自动化测试方法包括以下步骤。

在步骤s501中,基于生产环境的接口调用日志,生成多个测试用例,每个测试用例包括接口名、入口参数值和第一出口参数值。

在步骤s502中,读取测试用例。

在步骤s503中,基于对应的入口参数值和接口名执行接口调用,并获得返回的第二出口参数值。

在步骤s504中,将第一出口参数值和第二出口参数值比较,并根据比较结果判定每个测试用例是否通过。

在步骤s505中,判断是否完成所有测试用例。如果已经完成所有测试用例,则自动化测试流程结束,如果未完成所有测试用例,则返回到步骤s502执行。

本发明实施例提供的自动化测试方法,和上述的自动化测试系统对应。解析生产环境的接口调用日志,以形成测试用例,然后对测试用例执行自动化测试,从而无需准备测试用例,减少了漏测风险。

在优选的实施例中,上述自动化测试方法直接和生产环境的数据库相连,并且,为了避免在生产环境的数据库中产生脏数据,将接口中的一些会向数据库中写入数据的操作屏蔽。

在优选的实施例中,设置配置文件存储测试用例。配置文件中的测试用例可以是全部的基于生产环境的接口调用日志获得的测试用例,也可以仅包含部分的基于生产环境的接口调用日志生成的测试用例。

在优选的实施例中,设置对比规则,用于将测试用例的返回结果和真实的接口调用日志得到的返回结果进行比对。对比规则例如相等,包含,不等于、表达式。

综上所述,本发明实施例提供的自动化测试系统和自动化测试方法,使用生产环境的接口调用日志作为自动化测试的入口参数,能够覆盖大量测试数据,不需要人工介入,由系统自动完成数据对比,省时省力,可靠性高,从而能够使用最少的成本来解决目前自动化测试中存在的各种问题,以最少的耗时发现最多的接口问题,而且灵活配置可以适应多种接口测试场景。

图6是本发明实施例的自动化测试装置的结构图。图6示出的设备仅仅是一个示例,不应对本发明实施例的功能和使用范围构成任何限制。

参考图6,该装置包括通过总线连接的处理器601、存储器602和输入输出设备603。存储器602包括只读存储器(rom)和随机访问存储器(ram),存储器602内存储有执行系统功能所需的各种计算机指令和数据,处理器601从存储器602中读取各种计算机指令以执行各种适当的动作和处理。输入输出设备包括键盘、鼠标等的输入部分;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分;包括硬盘等的存储部分;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分。存储器602还存储有以下的计算机指令以完成本发明实施例的装置规定的操作:基于生产环境的接口调用日志,生成多个测试用例,每个测试用例包括接口名、入口参数值和第一出口参数值;针对每个测试用例,基于入口参数值和接口名执行接口调用,并获得返回的第二出口参数值,将所述第一出口参数值和所述第二出口参数值比较,并根据比较结果判定每个测试用例是否通过。

相应地,本发明实施例提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机指令,所述计算机指令被执行时实现上述方法所规定的操作。

附图中的流程图、框图图示了本发明实施例的系统、方法、装置的可能的体系框架、功能和操作,流程图和框图上的方框可以代表一个模块、程序段或仅仅是一段代码,所述模块、程序段和代码都是用来实现规定逻辑功能的可执行指令。也应当注意,所述实现规定逻辑功能的可执行指令可以重新组合,从而生成新的模块和程序段。因此附图的方框以及方框顺序只是用来更好的图示实施例的过程和步骤,而不应以此作为对发明本身的限制。

系统的各个模块或单元可以通过硬件、固件或软件实现。软件例如包括采用java、c/c++/c#、sql等各种编程语言形成的编码程序。虽然在方法以及方法图例中给出本发明实施例的步骤以及步骤的顺序,但是所述步骤实现规定的逻辑功能的可执行指令可以重新组合,从而生成新的步骤。所述步骤的顺序也不应该仅仅局限于所述方法以及方法图例中的步骤顺序,可以根据功能的需要随时进行调整。例如将其特征在于的某些步骤并行或按照相反顺序执行。

根据本发明的系统和方法可以部署在单个或多个服务器上。例如,可以将不同的模块分别部署在不同的服务器上,形成专用服务器。或者,可以在多个服务器上分布式部署相同的功能单元、模块或系统,以减轻负载压力。所述服务器包括但不限于在同一个局域网以及通过internet连接的多个pc机、pc服务器、刀片机、超级计算机等。

以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1