分布式服务的测试方法和装置、计算机可读存储介质与流程

文档序号:17049000发布日期:2019-03-05 19:50阅读:184来源:国知局
分布式服务的测试方法和装置、计算机可读存储介质与流程

本发明涉及互联网测试技术领域,特别涉及一种分布式服务的测试方法和装置、计算机可读存储介质。



背景技术:

当前基于rpc(remoteprocedurecallprotocol,远程过程调用协议)的分布式微服务框架已经成为互联网应用服务主流。开源社区贡献了诸如dubbo、dubbox、grpc、thrift和montan等rpc分布式框架。从提高效率的角度出发,在rpc框架下的分布式微服务系统间多基于tcp(transmissioncontrolprotocol,传输控制协议)协议进行通讯。为了验证分布式服务的功能,并对其性能进行诊断分析,需要对这些分布式服务进行测试。

相关技术大都基于tcp协议针对rpc框架下的每个服务系统开发测试代码来进行测试。



技术实现要素:

本发明的发明人发现上述相关技术中存在如下问题:针对rpc框架下的服务开发测试代码的过程极其繁琐而且不具有通用性,导致测试效率低下。针对上述问题中的至少一个问题,本发明人提出了解决方案。

本发明的一个目的是提供一种高效率的分布式服务测试的技术方案。

根据本发明的一个实施例,提供了一种分布式服务的测试方法,包括:解析配置文件,获取待测试服务对应的服务名、应用系统名和服务注册中心的地址;根据所述地址连接所述服务注册中心,并且根据所述服务名和所述应用系统名获取所述待测试服务的上下文;从所述上下文中获取所述待测试服务对应的接口方法;根据所述服务名、所述应用系统名和所述接口方法,通过java的反射机制获取所述接口方法的入参类型,根据所述入参类型生成表单模板;根据用户基于所述表单模板构造的入参值生成请求表单;将所述请求表单注入所述接口方法的入参,并执行上述接口方法。

可选地,从所述上下文中获取所述待测试服务对应的服务实例,并根据java的反射机制从所述服务实例中获取所述接口方法。

可选地,遍历所有所述入参类型,将所述入参类型序列化为入参字符串,所述入参字符串包括入参初始值和入参属性,所述表单模板由所述入参字符串组成。

可选地,在配置文件中指定所述待测试服务对应的接口类,所述接口类中包括至少一个接口方法,所述服务名为所述接口类的名称;在配置文件中配置所述服务注册中心的地址。

可选地,所述入参类型为java的基础数据类型或根据所述待测试服务的需要定义的类。

可选地,将所述服务名、所述应用系统名和所述接口方法放入全局缓存中,其中,在获取所述接口方法的入参类型时调用所述全局缓存。

根据本发明的另一个实施例,提供一种分布式服务的测试装置,包括:解析模块,用于解析配置文件,获取待测试服务对应的服务名、应用系统名和服务注册中心的地址,根据所述地址连接所述服务注册中心,并且根据所述服务名和所述应用系统名获取所述待测试服务的上下文,从所述上下文中获取所述待测试服务对应的接口方法;表单生成模块,用于根据所述服务名、所述应用系统名和所述接口方法,通过java的反射机制获取所述接口方法的入参类型,根据所述入参类型生成表单模板,并根据用户构造的所述表单模板的入参值生成请求表单;服务测试模块,用于将所述请求表单作注入所述接口方法的入参,并执行上述接口方法。

可选地,所述解析模块从所述上下文中获取所述待测试服务对应的服务实例,并根据java的反射机制从所述服务实例中获取所述接口方法。

可选地,所述表单生成模块遍历所有所述入参类型,将所述入参类型序列化为入参字符串,所述入参字符串包括入参初始值和入参属性,所述表单模板由所述入参字符串组成。

可选地,配置模块,用于在配置文件中指定所述待测试服务对应的接口类,所述接口类中包括至少一个接口方法,所述服务名为所述接口类的名称,并配置所述服务注册中心的地址。

可选地,所述入参类型为java的基础数据类型或根据所述待测试服务的需要定义的类。

可选地,所述解析模块将所述服务名、所述应用系统名和所述接口方法放入全局缓存中,所述表单生成模块在获取所述接口方法的入参类型时,调用所述全局缓存。

根据本发明的又一个实施例,提供一种分布式服务的测试装置,包括:存储器以及耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器装置中的指令,执行上述任一实施例中的分布式服务的测试方法。

根据本发明的再一个实施例,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一实施例中的分布式服务的测试方法。

本发明的一个优点在于,根据待测试服务对应的服务名、应用系统名和接口方法,通过java的反射机制构造请求表单作为待测试服务对应的接口方法的入参,可以在无需针对具体的待测试服务开发测试代码的情况下以完成服务测试,从而提高了测试的通用性和效率。

附图说明

构成说明书的一部分的附图描述了本发明的实施例,并且连同说明书一起用于解释本发明的原理。

参照附图,根据下面的详细描述,可以更加清楚地理解本发明,其中:

图1示出本发明的分布式服务的测试方法的一个实施例的流程图。

图2示出本发明的分布式服务的测试方法的gui的一个实施例的示意图。

图3示出本发明的分布式服务的测试装置的一个实施例的结构图。

图4示出本发明的分布式服务的测试装置的另一个实施例的结构图。

具体实施方式

现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。

同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。

在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

图1示出本发明的分布式服务的测试方法的一个实施例的流程图。

如图1所示,在步骤110中,解析配置文件。通过步骤110,可以获取待测试服务对应的服务名、应用系统名和服务注册中心的地址。

例如,在基于rpc的分布式微服务框架下,应用系统(如计费系统等)中包含至少一个服务,每个服务都对应一个程序中的接口类,每个接口类中可以包含至少一个接口方法,每个接口方法都能够实现相应的操作或者功能,从而满足服务的需求。

在一个实施例中,可以预先在配置文件中指定待测试服务对应的接口类,服务名可以为接口类的名称。配置文件可以是java中的config组件。接口类为一个接口封装,可以把复杂的业务逻辑对用户透明化,以方便用户调用,这些接口类的名称可以包含固定的关键字(如facade)以方便维护。例如,接口类的名称可以为iattrqueryfacade。

还可以在配置文件中配置服务注册中心的地址。服务注册中心可以是zookeeper。

仅得到待测试服务的服务名还是无法对其进行测试,还需要获取该服务名对应的服务实例(如接口类iattrqueryfacade的实现类的实例)。即,还需要通过下面的步骤获取待测试服务对应的具体接口方法,才能通过执行该接口方法实现服务测试。

在步骤120中,获取待测试服务的上下文。可以根据地址连接服务注册中心,根据服务名初始化待测试服务的上下文。上下文可以是java中的context类,例如,classpathxmlapplicationcontext。

在步骤130中,获取接口方法。可以从上下文中获取待测试服务对应的接口方法。例如,可以从上下文中获取待测试服务对应的服务实例,并根据java的反射机制从服务实例中获取接口方法。

java的反射机制可以在运行状态中,对于任意一个接口类,都能够获取并调用这个接口类的所有属性和接口方法。因此,在获取了接口类的名称的基础上,通过java的反射机制可以获取该接口类的业务逻辑用于服务测试。

在步骤140中,根据java的反射机制生成表单模板。可以根据服务名、应用系统名和接口方法,通过java的反射机制获取接口方法的入参类型,根据入参类型生成表单模板。入参类型可以为java的基础数据类型或根据待测试服务的需要定义的类。例如,可以遍历所有入参类型,将入参类型序列化为入参字符串,入参字符串包括入参初始值和入参属性,表单模板由入参字符串组成。入参字符串可以是java的json字符串。

在一个实施例中,可以将服务名、应用系统名和接口方法放入全局缓存。例如,全局缓存可以为java的applicationserviceslist组件。可以通过调用全局缓存获取服务名、应用系统名和接口方法,再通过java的反射机制获取接口方法的入参类型。即,在进行服务测试时,仅需要在调用第一线程时加载服务名、应用系统名和接口方法,调用后面的线程时可以从全局缓存中直接获取,从而节约了资源,提高了测试性能。

在步骤150中,构造入参值,生成请求表单。可以根据用户基于表单模板构造的入参值生成请求表单。

在一个实施例中,可以为用户提供gui(graphicaluserinterface,图形用户界面)以生成表单模板和请求表单。

图2示出本发明的测试方法的gui的一个实施例的示意图。

如图2所示,通过步骤110-130可以获取服务名、应用系统名和接口方法,用户可以在区域21、22和23中选取待测试服务对应的服务名、应用系统名和接口方法。

例如,用户进行选取后,区域21中显示的是待测试服务对应的应用系统名inst,区域22中显示的是待测试服务的服务名,即接口类名com.ctg.cbs.inst.api.facade.iofferinstfacade,区域23中显示的是待测试服务对应的接口方法createofferinstdetailinfo。可以点击gui中的“getjsontemplate”按钮执行步骤140,即通过java的反射机制生成表单模板,并将表单模板显示在区域24中。表单模板中的offerinstassures和offerinstattrs为接口方法中涉及的不同对象。可以设定int类型的入参在表单模板中的初始值为0,如图2所示的“shard1”。在区域24中,用户可以根据自动化测试及性能测试的需求,构造入参值以形成测试用例以完成服务测试。例如,可以设定字符串类型的入参在表单模板中的初始值为“”,如图2所示的“shard2”,其初始值为“”(图中未示出),用户赋值后为${partyid}。这样可以做到服务数据与服务逻辑分离,实现以数据驱动业务,而无需根据服务逻辑设计复杂的测试代码,从而提高了测试的通用性和效率。

下面可以通过步骤170根据请求表单来完成服务测试。

在步骤170中,根据请求表单执行接口方法。可以将请求表单注入接口方法的入参,并执行接口方法。例如,可以利用java反射机制中的invoke()来执行接口方法,即把用户构造的请求表单作为入参值转成jsonarray,再注入到接口方法的入参里面去。可以通过执行语句method.invoke((t)service,params)来实现,method为接口方法,service为接口方法对应的服务实例,params为入参值(jsonarray)可以支持多个参数。

上述实施例中,根据待测试服务对应的服务名、应用系统名和接口方法,通过java的反射机制构造请求表单作为待测试服务对应的接口方法的入参,可以在无需针对具体的待测试服务开发测试代码的情况下以完成服务测试,从而提高了测试的通用性和效率。

图3示出本发明的分布式服务的测试装置的一个实施例的结构图。

如图3所示,该装置3包括:解析模块31、表单生成模块32和服务测试模块33。

解析模块31解析配置文件,获取待测试服务对应的服务名、应用系统名和服务注册中心的地址,根据地址连接所述服务注册中心,并且根据服务名和所述应用系统名获取待测试服务的上下文,从上下文中获取待测试服务对应的接口方法。

在一个实施例中,解析模块31从上下文中获取待测试服务对应的服务实例,并根据java的反射机制从服务实例中获取所述接口方法。

在另一个实施例中,为了使得解析模块31能够获取待测试服务对应的接口方法,装置3还包括配置模块34。由于接口方法包含于接口类中,因此,可以通过配置模块34在配置文件中指定待测试服务对应的接口类,以便获取接口方法。配置模块34还可以配置服务注册中心的地址。

表单生成模块32根据java的反射机制获取接口方法的入参类型,根据入参类型生成表单模板,并根据用户构造的表单模板的入参值生成请求表单。例如,入参类型可以为java的基础数据类型或根据待测试服务的需要定义的类。

在一个实施例中,表单生成模块32遍历所有入参类型,将入参类型序列化为入参字符串,入参字符串包括入参初始值和入参属性,表单模板由入参字符串组成。

在另一个实施例中,所述解析模块31将服务名、应用系统名和接口方法放入全局缓存中,表单生成模块32调用全局缓存,根据服务名、应用系统名和接口方法,通过java的反射机制获取接口方法的入参类型。

服务测试模块33将请求表单作注入接口方法的入参,并执行接口方法。

上述实施例中,根据待测试服务对应的服务名、应用系统名和接口方法,通过java的反射机制构造请求表单作为待测试服务对应的接口方法的入参,可以在无需针对具体的待测试服务开发测试代码的情况下以完成服务测试,从而提高了测试的通用性和效率。

图4示出本发明的分布式服务的测试装置的另一个实施例的结构图。

如图4所示,该实施例的装置4包括:存储器41以及耦接至该存储器41的处理器42,处理器42被配置为基于存储在存储器41中的指令,执行本发明中任意一个实施例中的分布式服务的测试方法。

其中,存储器41例如可以包括系统存储器、固定非易失性存储介质等。系统存储器例如存储有操作系统、应用程序、引导装载程序(bootloader)、数据库以及其他程序等。

本领域内的技术人员应当明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用非瞬时性存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

至此,已经详细描述了根据本发明的分布式服务的测试方法和装置、计算机可读存储介质。为了避免遮蔽本发明的构思,没有描述本领域所公知的一些细节。本领域技术人员根据上面的描述,完全可以明白如何实施这里公开的技术方案。

可能以许多方式来实现本发明的方法和系统。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本发明的方法和系统。用于所述方法的步骤的上述顺序仅是为了进行说明,本发明的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本发明实施为记录在记录介质中的程序,这些程序包括用于实现根据本发明的方法的机器可读指令。因而,本发明还覆盖存储用于执行根据本发明的方法的程序的记录介质。

虽然已经通过示例对本发明的一些特定实施例进行了详细说明,但是本领域的技术人员应该理解,以上示例仅是为了进行说明,而不是为了限制本发明的范围。本领域的技术人员应该理解,可在不脱离本发明的范围和精神的情况下,对以上实施例进行修改。本发明的范围由所附权利要求来限定。

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