CN113360377A - 一种测试方法和装置 - Google Patents
一种测试方法和装置 Download PDFInfo
- Publication number
- CN113360377A CN113360377A CN202110609691.5A CN202110609691A CN113360377A CN 113360377 A CN113360377 A CN 113360377A CN 202110609691 A CN202110609691 A CN 202110609691A CN 113360377 A CN113360377 A CN 113360377A
- Authority
- CN
- China
- Prior art keywords
- remote service
- service
- client
- remote
- test
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000010998 test method Methods 0.000 title claims abstract description 39
- 238000012360 testing method Methods 0.000 claims abstract description 125
- 238000000034 method Methods 0.000 claims abstract description 67
- 238000002347 injection Methods 0.000 claims abstract description 15
- 239000007924 injection Substances 0.000 claims abstract description 15
- 238000004590 computer program Methods 0.000 claims description 10
- 230000001419 dependent effect Effects 0.000 claims description 7
- 238000012827 research and development Methods 0.000 abstract description 9
- 230000008569 process Effects 0.000 description 16
- 238000010586 diagram Methods 0.000 description 14
- 239000003795 chemical substances by application Substances 0.000 description 11
- 230000006870 function Effects 0.000 description 11
- 230000003993 interaction Effects 0.000 description 11
- 238000004891 communication Methods 0.000 description 7
- 238000012545 processing Methods 0.000 description 6
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 239000000523 sample Substances 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 238000012795 verification Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 239000000047 product Substances 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000013475 authorization Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Debugging And Monitoring (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
Abstract
本发明公开了一种测试方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:基于ByteBuddy工具包,获得远程服务依赖的配置描述符;将配置描述符发送至元数据配置中心,以在元数据配置中心创建远程服务的客户端;接收注册成功信息,生成远程服务的代理服务;拦截调用远程服务的测试方法,获取测试方法的入参数据,通过远程服务的代理服务将入参数据发送至远程服务的客户端,通过远程服务的客户端泛化调用远程服务,以对远程服务进行测试。该实施方式能够实现在用户无感知的情况下拦截并注入方法依赖,通过无侵入的方式提供Hook逻辑代码插桩,通过将配置信息预先写入元数据配置中心,实现配置自动注册和复用,提高研发人员测试效率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种测试方法和装置。
背景技术
在大型项目的研发过程中,如研发人员需要进行业务流程单元调试,需要将项目部署到测试服务器后,本地初始化单元测试环境,调用测试服务器的服务接口验证逻辑。这种单元测试部署流程比较复杂,服务依赖繁多无法快速注入,同时大型项目启动缓慢,为跑通一个单元测试往往需要编写复杂的服务注入配置,而这些复杂的服务注入配置的实例化过程会增加项目启动时间,影响单元测试效率和项目交付速度。
另外,在测试过程中,对于需要Hook数据的场景,需要采用硬编码侵入的方式在测试逻辑中补充数据和依赖,业务流程和测试依赖相互影响。在测试完成后,针对本次测试使用的元数据配置被丢弃,多个***、多个应用之间的接口有相互依赖关系变动频繁,导致迭代更新时需重新确认可用性和准确性,需要耗费大量维护时间。其中,Hook又叫做钩子函数,在***没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。简单来说,就是把***的程序拉出来变成我们自己执行代码片段。
发明内容
有鉴于此,本发明实施例提供一种测试方法和装置,能够通过ByteBuddy工具包,在测试程序启动前,解析代码中的远程服务依赖,访问远程元数据配置中心获得数据,根据配置数据动态生成代理对象,并注入测试依赖,能够实现在用户无感知的情况下拦截并注入方法依赖,通过无侵入的方式提供Hook逻辑代码插桩;通过泛化调用的方式和远程服务进行交互,屏蔽服务间依赖和方法参数差异,在调试过程中获取远程数据,调用者和提供者之间增加元数据配置记录服务,实现配置自动注册和复用,提高研发人员测试效率。
为实现上述目的,根据本发明实施例的一个方面,提供了一种测试方法,包括:
基于ByteBuddy工具包,获得远程服务依赖的配置描述符;
将所述配置描述符发送至元数据配置中心,以在所述元数据配置中心创建所述远程服务的客户端;
接收注册成功信息,生成所述远程服务的代理服务;其中,所述注册成功消息是所述元数据配置中心在创建所述远程服务的客户端之后生成的;
拦截调用所述远程服务的测试方法,获取所述测试方法的入参数据,通过所述远程服务的代理服务将所述入参数据发送至所述远程服务的客户端,通过所述远程服务的客户端泛化调用所述远程服务,以对所述远程服务进行测试。
可选地,基于ByteBuddy工具包,获得远程服务依赖的配置描述符包括:
基于ByteBuddy工具包,将注册服务逻辑代码插桩到测试实例的逻辑代码中;
通过所述注册服务逻辑代码获取所述测试实例的类文件上的注解信息,反射所述注解信息,获得远程服务依赖的配置描述符;
将所述配置描述符发送至元数据配置中心包括:通过所述注册服务逻辑代码将所述配置描述符发送至元数据配置中心。
可选地,在基于ByteBuddy工具包,将注册服务逻辑代码插桩到测试实例的逻辑代码时,所述方法还包括:基于ByteBuddy工具包,将注入服务逻辑代码插桩到测试实例的逻辑代码中;
生成所述远程服务的代理服务包括:生成所述远程服务的代理服务,并通过所述注入服务逻辑代码将所述远程服务的代理服务注入所述测试实例的逻辑代码中。
可选地,在基于ByteBuddy工具包,将注册服务逻辑代码插桩到测试实例的逻辑代码时,所述方法还包括:基于ByteBuddy工具包,将拦截服务逻辑代码插桩到测试实例的逻辑代码中;
拦截调用所述远程服务的测试方法包括:通过所述拦截服务逻辑代码拦截调用所述远程服务的测试方法,获取所述测试方法的入参数据,并对所述入参数据进行编码。
可选地,所述元数据配置中心创建所述远程服务的客户端的过程包括:根据所述配置描述符,查找与所述远程服务对应的配置信息;根据与所述远程服务对应的配置信息,创建所述远程服务的客户端,并生成与所述客户端对应的REST接口;通过所述远程服务的代理服务将所述入参数据发送至所述远程服务的客户端包括:通过所述远程服务的代理服务将所述入参数据发送至所述远程服务的客户端对应的REST接口。
可选地,在远程服务的客户端泛化调用所述远程服务之前,所述方法还包括:确定所述入参数据合法。
可选地,所述方法还包括:通过所述拦截服务逻辑代码接收所述远程服务的客户端返回的调用结果,并将所述调用结果发送至所述测试实例。
为实现上述目的,根据本发明实施例的一个方面,提供了一种测试装置,包括:
描述符确定模块,用于基于ByteBuddy工具包,获得远程服务依赖的配置描述符;
注册模块,用于将所述配置描述符发送至元数据配置中心,以在所述元数据配置中心创建所述远程服务的客户端;
代理生成模块,用于接收注册成功信息,生成所述远程服务的代理服务;其中,所述注册成功消息是所述元数据配置中心在创建所述远程服务的客户端之后生成的;
拦截模块,用于拦截调用所述远程服务的测试方法,获取所述测试方法的入参数据,通过所述远程服务的代理服务将所述入参数据发送至所述远程服务的客户端,通过所述远程服务的客户端泛化调用所述远程服务,以对所述远程服务进行测试。
可选地,所述描述符确定模块还用于:基于ByteBuddy工具包,将注册服务逻辑代码插桩到测试实例的逻辑代码中;通过所述注册服务逻辑代码获取所述测试实例的类文件上的注解信息,反射所述注解信息,获得远程服务依赖的配置描述符;
所述注册模块还用于:通过所述注册服务逻辑代码将所述配置描述符发送至元数据配置中心。
可选地,所述描述符确定模块还用于:基于ByteBuddy工具包,将注入服务逻辑代码插桩到测试实例的逻辑代码中;
所述代理生成模块还用于:生成所述远程服务的代理服务,并通过所述注入服务逻辑代码将所述远程服务的代理服务注入所述测试实例的逻辑代码中。
可选地,所述描述符确定模块还用于:基于ByteBuddy工具包,将拦截服务逻辑代码插桩到测试实例的逻辑代码中;
所述拦截模块还用于:通过所述拦截服务逻辑代码拦截调用所述远程服务的测试方法,获取所述测试方法的入参数据,并对所述入参数据进行编码。
可选地,所述元数据配置中心还用于根据所述配置描述符,查找与所述远程服务对应的配置信息;根据与所述远程服务对应的配置信息,创建所述远程服务的客户端,并生成与所述客户端对应的REST接口;
所述代理生成模块还用于:通过所述远程服务的代理服务将所述入参数据发送至所述远程服务的客户端对应的REST接口。
可选地,所述元数据配置中心还用于确定所述入参数据合法。
可选地,所述拦截模块还用于通过所述拦截服务逻辑代码接收所述远程服务的客户端返回的调用结果,并将所述调用结果发送至所述测试实例。
为实现上述目的,根据本发明实施例的一个方面,提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例的测试方法。
为实现上述目的,根据本发明实施例的一个方面,提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例的测试方法。
上述发明中的一个实施例具有如下优点或有益效果:通过ByteBuddy工具包,在测试程序启动前,解析代码中的远程服务依赖,访问远程元数据配置中心获得数据,根据配置数据动态生成代理对象,并注入测试依赖,能够实现在用户无感知的情况下拦截并注入方法依赖,通过无侵入的方式提供Hook逻辑代码插桩;通过泛化调用的方式和远程服务进行交互,屏蔽服务间依赖和方法参数差异,在调试过程中获取远程数据,调用者和提供者之间增加元数据配置记录服务,实现配置自动注册和复用,提高研发人员测试效率。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是本发明实施例的测试方法的主要流程的示意图;
图2是本发明实施例的元数据配置中心的配置信息的示意图;
图3是本发明另一实施例的测试方法的主要流程示意图;
图4是本发明实施例的测试方法的信息交互的示意图
图5是本发明实施例的测试装置的主要模块的示意图;
图6是本发明实施例可以应用于其中的示例性***架构图;
图7是适于用来实现本发明实施例的终端设备或服务器的计算机***的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是本发明实施例的测试方法的主要流程的示意图。该测试方法可以用于单元测试中。单元测试(unit testingb)是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义。在本发明实施例中,单元的含义是指被测试的远程服务。该方法可以用于本地测试服务器中。如图1所示,该方法包括:
步骤S101:基于ByteBuddy工具包,获得远程服务依赖的配置描述符。
其中,ByteBuddy是一个代码生成和操作库,用于在Java应用程序运行时创建和修改Java类,而无需编译器的帮助。
基于ByteBuddy工具包,获得远程服务依赖的配置描述符的过程包括:基于ByteBuddy工具包,将注册服务逻辑代码插桩到测试实例的逻辑代码中;通过所述注册服务逻辑代码获取所述测试实例的类文件上的注解信息,反射所述注解信息,获得远程服务依赖的配置描述符。即,该步骤在测试实例启动时,基于ByteBuddy工具包,将注册服务逻辑代码插桩到测试实例的逻辑代码中。在测试实例初始化远程服务依赖时,会进入注册服务逻辑代码中,该代码通过测试实例的类文件的注解信息,反射获得远程服务依赖的配置描述符。其中,该配置描述符可以包括远程服务的依赖包路径和key。key用于唯一指示该远程服务。插桩是指在保证被测程序原有逻辑完整性的基础上在程序中***一些探针(又称为“探测仪”,本质上就是进行信息采集的代码段,可以是赋值语句或采集覆盖信息的函数调用),通过探针的执行并抛出程序运行的特征数据(包括方法本身、方法参数值、返回值等)。
本实施例基于ByteBuddy工具包,在测试程序启动时,在用户无感知的情况下拦截测试程序的入口方法,通过注解解析的方式注入方法依赖,通过无侵入的方式提供Hook逻辑代码插桩,减少了测试人员的工作量,提高了测试程序的启动速度和测试效率。
在可选的实施例中,该方法在基于ByteBuddy工具包将注册服务逻辑代码插桩到测试实例的逻辑代码中时,还可以基于ByteBuddy工具包,将注入服务逻辑代码和拦截服务逻辑代码插桩到测试实例的逻辑代码中。注入服务逻辑代码用于将远程服务的代理服务注入测试实例的逻辑代码中。拦截服务逻辑代码用于拦截调用远程服务的测试方法,获取所述测试方法的入参数据。
本实施例基于ByteBuddy工具包,在测试程序启动时,在用户无感知的情况下拦截测试程序的入口方法,通过注解解析的方式注入方法依赖,通过无侵入的方式提供Hook逻辑代码插桩,减少了测试人员的工作量,提高了测试程序的启动速度和测试效率;通过注入服务逻辑代码,开发人员可以按照自己的需求注入相应的代理服务;通过拦截服务逻辑代码可以拦截测试方法并获得入参数据。
步骤S102:将所述配置描述符发送至元数据配置中心,以在所述元数据配置中心创建所述远程服务的客户端。
其中,元数据配置中心用于存储远程服务的配置信息。该配置信息是指元数据配置中心中的远程服务组件和服务中间件(如redis、dubbo、kafka等)建立链接时需要的客户端配置。作为示例,如图2所示,该配置信息可以包括以下一种或多种:key、接口interface、访问认证授权信息(如令牌token、别名alias、密码password)、远程链接地址url、服务集群地址servers、消息队列名称broker和主题topic。
对于该步骤,注册服务逻辑代码通过HTTP协议(Hyper Text Transfer Protocol,超文本传输协议)将配置描述符发送至元数据配置中心,元数据配置中心根据所述配置描述符,在其维护的远程服务元数据配置中查找与所述远程服务对应的配置信息;如果查找到,则在元数据配置中心中创建远程服务的客户端,针对此远程服务的客户端封装并暴露出对外的REST接口,同时返回注册成功信息给测试实例。如果未查找到配置,则返回注册失败信息给测试实例。
步骤S103:接收注册成功信息,生成所述远程服务的代理服务;其中,所述注册成功消息是所述元数据配置中心在创建所述远程服务的客户端之后生成的。
具体的,测试实例中的注册服务逻辑代码在收到注册成功消息后,使用CGLib动态代理技术实例化远程服务依赖的代理服务,通过注入服务逻辑代码将远程服务依赖的代理服务注入测试实例中。
步骤S104:拦截调用所述远程服务的测试方法,获取所述测试方法的入参数据,通过所述远程服务的代理服务将所述入参数据发送至所述远程服务的客户端,通过所述远程服务的客户端泛化调用所述远程服务,以对所述远程服务进行测试。
具体的,测试实例的具体测试方法运行时,逻辑代码执行到需要进行远程服务调用之前,拦截服务逻辑代码将对测试实例中即将执行远程服务调用的方法进行拦截,对调用入参数据进行数据编码工作,并通过远程服务依赖的代理服务,将编码后的数据发送给REST接口。REST接口在收到来自测试实例的调用请求后,进行反序列化操作得到目标方法和入参,通过泛化调用的方式调用元数据配置中心中创建的远程服务的客户端,由此客户端和远程服务进行数据交互。元数据配置中心中创建的远程服务的客户端获得远程服务的返回值后,进行反参的序列化工作,将数据回传给拦截服务代码逻辑。如果未获得返回值,则返回调用失败信息给测试实例。远程服务依赖的代理服务在接收到REST接口返回数据后,拦截服务逻辑代码将返回数据解码,并赋值到测试实例的远程服务调用的返回值上,从而完成对待测试服务的测试。
在可选的实施例中,在通过所述远程服务的代理服务将所述入参数据发送至所述远程服务的客户端之前,进行入参数据的合法性校验,如果未通过合法性校验,则返回校验失败信息给测试实例;如果通过合法性校验,则将入参数据发送至远程服务的客户端之前。其中,可以根据预设的协议或规则进行校验,例如校验入参数据的格式是否符合预设协议。具体的协议或规则可以根据应用场景灵活设置,本发明在此不做限制。
本发明实施例的测试方法,通过ByteBuddy工具包,在测试程序启动前,解析代码中的远程服务依赖,访问远程元数据配置中心获得数据,根据配置数据动态生成代理对象,并注入测试依赖,能够实现在用户无感知的情况下拦截并注入方法依赖,通过无侵入的方式提供Hook逻辑代码插桩;通过泛化调用的方式和远程服务进行交互,屏蔽服务间依赖和方法参数差异,在调试过程中获取远程数据,调用者和提供者之间增加元数据配置记录服务,实现配置自动注册和复用,提高研发人员测试效率。
图3是本发明另一实施例的测试方法的主要步骤的示意图,图4是本发明实施例的测试方法的配置信息的样例图。如图3和图4所示,该测试方法包括:
(1)、基于ByteBuddy工具包初始化本地测试环境,将桩代码(即注册服务代码逻辑、注入服务代码逻辑和拦截服务代码逻辑)***到本地测试环境:在测试实例启动时,借助ByteBuddy字节码修改技术,将注册服务代码逻辑、注入服务代码逻辑和拦截服务代码逻辑插桩到测试实例的运行时代码逻辑中。在测试实例初始化远程服务依赖时,会进入注册服务代码逻辑,该逻辑通过测试实例类文件上的注解信息,反射获得远程服务依赖的配置描述符。其中,远程服务依赖的配置描述符如图4中的dubbo的key=com.rpc.service.UserService-uat、redis的key=redis-hb-online以及kafka的key=mq-hb-test。其中,dubbo是一款高性能、轻量级的开源Java RPC框架,包含客户端和服务端程序。Redis是非关系型数据库Kafka是一种高吞吐量的分布式发布订阅消息队列***,包含客户端和服务端程序。
(2)、本地环境获得远程服务依赖的配置描述符之后,与元数据配置中心的注册远程服务交互模块进行交互,即通过注册服务代码逻辑会将远程服务依赖的配置描述符通过HTTP协议调用元数据配置中心进行注册服务,以确定元数据配置中心是否存在远程服务依赖的元数据配置信息。
(3)、元数据配置中心根据远程服务依赖的配置描述符检索出已维护的远程服务元数据配置,如果检索到配置,则在元数据配置中心中创建的远程服务的客户端,针对此远程服务的客户端封装并暴露出对外的REST操作服务,即注册通过,同时返回注册成功信息给测试实例。如果未检索到配置,则返回注册失败信息给测试实例。
(4)、测试实例中的注册服务代码逻辑在收到注册成功消息后,使用CGLib动态代理技术实例化远程服务依赖的代理实例,通过注入服务代码逻辑将远程服务依赖的代理实例注入测试实例中。
(5)、在测试实例的具体测试方法运行时,代码逻辑执行到需要进行远程服务调用之前,拦截服务代码逻辑将对测试实例中即将执行远程服务调用的方法进行拦截,对调用入参数据进行数据编码工作,并通过远程服务依赖的代理实例,将编码后的数据发送给REST操作入口。
(6)、REST操作服务在收到来自测试实例的调用请求后,进行请求参数的合法性校验,校验通过后元数据配置中心的远程服务交互模块对请求参数进行反序列化操作得到目标方法和入参,使用泛化调用的方式使用目标方法和入参调用元数据配置中心中创建的远程服务的客户端,由此客户端和远程服务进行RPC数据交互。如果未通过合法性校验,则返回校验失败信息给测试实例。RPC(Remote Procedure Call,远程过程调用),它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
(7)、元数据配置中心中创建的远程服务的客户端获得远程服务的返回值后,进行反参的序列化工作,将数据回传给拦截服务代码逻辑。如果未获得返回值,则返回调用失败信息给测试实例。
(8)、数据解码,返回代理方法出参:远程服务依赖的代理实例在接收到REST操作服务返回数据后,拦截服务代码逻辑将返回数据解码,并赋值到测试实例的远程服务调用的返回值上。
本发明实施例的测试方法,通过ByteBuddy工具包,在测试程序启动前,解析代码中的远程服务依赖,访问远程元数据配置中心获得数据,根据配置数据动态生成代理对象,并注入测试依赖,能够实现在用户无感知的情况下拦截并注入方法依赖,通过无侵入的方式提供Hook逻辑代码插桩;通过泛化调用的方式和远程服务进行交互,屏蔽服务间依赖和方法参数差异,在调试过程中获取远程数据,调用者和提供者之间增加元数据配置记录服务,实现配置自动注册和复用,提高研发人员测试效率。
图5是本发明实施例的测试装置500的主要模块的示意图,如图5所示,该测试装置500包括:
描述符确定模块501,用于基于ByteBuddy工具包,获得远程服务依赖的配置描述符;
注册模块502,用于将所述配置描述符发送至元数据配置中心,以在所述元数据配置中心创建所述远程服务的客户端;
代理生成模块503,用于接收注册成功信息,生成所述远程服务的代理服务;其中,所述注册成功消息是所述元数据配置中心在创建所述远程服务的客户端之后生成的;
拦截模块504,用于拦截调用所述远程服务的测试方法,获取所述测试方法的入参数据,通过所述远程服务的代理服务将所述入参数据发送至所述远程服务的客户端,通过所述远程服务的客户端泛化调用所述远程服务,以对所述远程服务进行测试。
可选地,所述描述符确定模块501还用于:基于ByteBuddy工具包,将注册服务逻辑代码插桩到测试实例的逻辑代码中;通过所述注册服务逻辑代码获取所述测试实例的类文件上的注解信息,反射所述注解信息,获得远程服务依赖的配置描述符;
所述注册模块502还用于:通过所述注册服务逻辑代码将所述配置描述符发送至元数据配置中心。
可选地,所述描述符确定模块501还用于:基于ByteBuddy工具包,将注入服务逻辑代码插桩到测试实例的逻辑代码中;
所述代理生成模块503还用于:生成所述远程服务的代理服务,并通过所述注入服务逻辑代码将所述远程服务的代理服务注入所述测试实例的逻辑代码中。
可选地,所述描述符确定模块501还用于:基于ByteBuddy工具包,将拦截服务逻辑代码插桩到测试实例的逻辑代码中;
所述拦截模块504还用于:通过所述拦截服务逻辑代码拦截调用所述远程服务的测试方法,获取所述测试方法的入参数据,并对所述入参数据进行编码。
可选地,所述元数据配置中心还用于根据所述配置描述符,查找与所述远程服务对应的配置信息;根据与所述远程服务对应的配置信息,创建所述远程服务的客户端,并生成与所述客户端对应的REST接口;
所述代理生成模块502还用于:通过所述远程服务的代理服务将所述入参数据发送至所述远程服务的客户端对应的REST接口。
可选地,所述元数据配置中心还用于确定所述入参数据合法。
可选地,所述拦截模块504还用于通过所述拦截服务逻辑代码接收所述远程服务的客户端返回的调用结果,并将所述调用结果发送至所述测试实例。
本发明实施例的测试装置,通过ByteBuddy工具包,在测试程序启动前,解析代码中的远程服务依赖,访问远程元数据配置中心获得数据,根据配置数据动态生成代理对象,并注入测试依赖,能够实现在用户无感知的情况下拦截并注入方法依赖,通过无侵入的方式提供Hook逻辑代码插桩;通过泛化调用的方式和远程服务进行交互,屏蔽服务间依赖和方法参数差异,在调试过程中获取远程数据,调用者和提供者之间增加元数据配置记录服务,实现配置自动注册和复用,提高研发人员测试效率。
上述装置可执行本发明实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明实施例所提供的方法。
图6示出了可以应用本发明实施例的测试方法或测试装置的示例性***架构600。
如图6所示,***架构600可以包括终端设备601、602、603,网络604和服务器605。网络604用以在终端设备601、602、603和服务器605之间提供通信链路的介质。网络604可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备601、602、603通过网络604与服务器605交互,以接收或发送消息等。终端设备601、602、603上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
终端设备601、602、603可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器605可以是提供各种服务的服务器,例如对用户利用终端设备601、602、603所浏览的购物类网站提供支持的后台管理服务器。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息)反馈给终端设备。
需要说明的是,本发明实施例所提供的测试方法一般由服务器605执行,相应地,测试装置一般设置于服务器605中。
应该理解,图6中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图7,其示出了适于用来实现本发明实施例的终端设备的计算机***700的结构示意图。图7示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图7所示,计算机***700包括中央处理单元(CPU)701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储部分708加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。在RAM 703中,还存储有***700操作所需的各种程序和数据。CPU 701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
以下部件连接至I/O接口705:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至I/O接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被中央处理单元(CPU)701执行时,执行本发明的***中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括发送模块、获取模块、确定模块和第一处理模块。其中,这些模块的名称在某种情况下并不构成对该单元本身的限定,例如,发送模块还可以被描述为“向所连接的服务端发送图片获取请求的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:
基于ByteBuddy工具包,获得远程服务依赖的配置描述符;
将所述配置描述符发送至元数据配置中心,以在所述元数据配置中心创建所述远程服务的客户端;
接收注册成功信息,生成所述远程服务的代理服务;其中,所述注册成功消息是所述元数据配置中心在创建所述远程服务的客户端之后生成的;
拦截调用所述远程服务的测试方法,获取所述测试方法的入参数据,通过所述远程服务的代理服务将所述入参数据发送至所述远程服务的客户端,通过所述远程服务的客户端泛化调用所述远程服务,以对所述远程服务进行测试。
本发明实施例的技术方案,通过ByteBuddy工具包,在测试程序启动前,解析代码中的远程服务依赖,访问远程元数据配置中心获得数据,根据配置数据动态生成代理对象,并注入测试依赖,能够实现在用户无感知的情况下拦截并注入方法依赖,通过无侵入的方式提供Hook逻辑代码插桩;通过泛化调用的方式和远程服务进行交互,屏蔽服务间依赖和方法参数差异,在调试过程中获取远程数据,调用者和提供者之间增加元数据配置记录服务,实现配置自动注册和复用,提高研发人员测试效率。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (10)
1.一种测试方法,其特征在于,包括:
基于ByteBuddy工具包,获得远程服务依赖的配置描述符;
将所述配置描述符发送至元数据配置中心,以在所述元数据配置中心创建所述远程服务的客户端;
接收注册成功信息,生成所述远程服务的代理服务;其中,所述注册成功消息是所述元数据配置中心在创建所述远程服务的客户端之后生成的;
拦截调用所述远程服务的测试方法,获取所述测试方法的入参数据,通过所述远程服务的代理服务将所述入参数据发送至所述远程服务的客户端,通过所述远程服务的客户端泛化调用所述远程服务,以对所述远程服务进行测试。
2.根据权利要求1所述的方法,其特征在于,基于ByteBuddy工具包,获得远程服务依赖的配置描述符包括:
基于ByteBuddy工具包,将注册服务逻辑代码插桩到测试实例的逻辑代码中;
通过所述注册服务逻辑代码获取所述测试实例的类文件上的注解信息,反射所述注解信息,获得远程服务依赖的配置描述符;
将所述配置描述符发送至元数据配置中心包括:通过所述注册服务逻辑代码将所述配置描述符发送至元数据配置中心。
3.根据权利要求2所述的方法,其特征在于,在基于ByteBuddy工具包,将注册服务逻辑代码插桩到测试实例的逻辑代码时,所述方法还包括:基于ByteBuddy工具包,将注入服务逻辑代码插桩到测试实例的逻辑代码中;
生成所述远程服务的代理服务包括:生成所述远程服务的代理服务,并通过所述注入服务逻辑代码将所述远程服务的代理服务注入所述测试实例的逻辑代码中。
4.根据权利要求2所述的方法,其特征在于,在基于ByteBuddy工具包,将注册服务逻辑代码插桩到测试实例的逻辑代码时,所述方法还包括:基于ByteBuddy工具包,将拦截服务逻辑代码插桩到测试实例的逻辑代码中;
拦截调用所述远程服务的测试方法包括:通过所述拦截服务逻辑代码拦截调用所述远程服务的测试方法,获取所述测试方法的入参数据,并对所述入参数据进行编码。
5.根据权利要求1所述的方法,其特征在于,所述元数据配置中心创建所述远程服务的客户端的过程包括:
根据所述配置描述符,查找与所述远程服务对应的配置信息;
根据与所述远程服务对应的配置信息,创建所述远程服务的客户端,并生成与所述客户端对应的REST接口;
通过所述远程服务的代理服务将所述入参数据发送至所述远程服务的客户端包括:通过所述远程服务的代理服务将所述入参数据发送至所述远程服务的客户端对应的REST接口。
6.根据权利要求1所述的方法,其特征在于,远程服务的客户端泛化调用所述远程服务包括:
在所述入参数据合法的情况下,所述远程服务的客户端泛化调用所述远程服务。
7.根据权利要求4所述的方法,其特征在于,所述方法还包括:通过所述拦截服务逻辑代码接收所述远程服务的客户端返回的调用结果,并将所述调用结果发送至所述测试实例。
8.一种测试装置,其特征在于,包括:
描述符确定模块,用于基于ByteBuddy工具包,获得远程服务依赖的配置描述符;
注册模块,用于将所述配置描述符发送至元数据配置中心,以在所述元数据配置中心创建所述远程服务的客户端;
代理生成模块,用于接收注册成功信息,生成所述远程服务的代理服务;其中,所述注册成功消息是所述元数据配置中心在创建所述远程服务的客户端之后生成的;
拦截模块,用于拦截调用所述远程服务的测试方法,获取所述测试方法的入参数据,通过所述远程服务的代理服务将所述入参数据发送至所述远程服务的客户端,通过所述远程服务的客户端泛化调用所述远程服务,以对所述远程服务进行测试。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的方法。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-7中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110609691.5A CN113360377B (zh) | 2021-06-01 | 2021-06-01 | 一种测试方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110609691.5A CN113360377B (zh) | 2021-06-01 | 2021-06-01 | 一种测试方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113360377A true CN113360377A (zh) | 2021-09-07 |
CN113360377B CN113360377B (zh) | 2023-11-07 |
Family
ID=77531018
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110609691.5A Active CN113360377B (zh) | 2021-06-01 | 2021-06-01 | 一种测试方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113360377B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115629992A (zh) * | 2022-12-16 | 2023-01-20 | 云筑信息科技(成都)有限公司 | 一种对使用Spring技术栈构建的应用***进行调试的方法 |
WO2023103727A1 (zh) * | 2021-12-10 | 2023-06-15 | 易保网络技术(上海)有限公司 | 服务调试的路由方法、电子设备、介质及程序产品 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1987821A (zh) * | 2006-11-14 | 2007-06-27 | 无敌科技(西安)有限公司 | 一种实现单元测试的方法及*** |
US8555297B1 (en) * | 2008-09-29 | 2013-10-08 | Emc Corporation | Techniques for performing a remote procedure call using remote procedure call configuration information |
CN107092488A (zh) * | 2017-03-31 | 2017-08-25 | 武汉斗鱼网络科技有限公司 | 一种对应用进行无侵入化埋点的实现方法及*** |
CN108304195A (zh) * | 2017-09-08 | 2018-07-20 | 武汉斗鱼网络科技有限公司 | 一种aop组件的实现方法、装置及电子设备 |
CN111562950A (zh) * | 2020-04-28 | 2020-08-21 | 中国银行股份有限公司 | 一种分布式应用参数动态发布的***及方法 |
CN112114979A (zh) * | 2020-08-31 | 2020-12-22 | 厦门安胜网络科技有限公司 | 远程过程调用方法和装置 |
CN112532490A (zh) * | 2020-11-30 | 2021-03-19 | 武汉悦学帮网络技术有限公司 | 回归测试***、方法和电子设备 |
US10977027B1 (en) * | 2020-05-07 | 2021-04-13 | Hcl Technologies Limited | System and method of deploying java agents in runtime |
-
2021
- 2021-06-01 CN CN202110609691.5A patent/CN113360377B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1987821A (zh) * | 2006-11-14 | 2007-06-27 | 无敌科技(西安)有限公司 | 一种实现单元测试的方法及*** |
US8555297B1 (en) * | 2008-09-29 | 2013-10-08 | Emc Corporation | Techniques for performing a remote procedure call using remote procedure call configuration information |
CN107092488A (zh) * | 2017-03-31 | 2017-08-25 | 武汉斗鱼网络科技有限公司 | 一种对应用进行无侵入化埋点的实现方法及*** |
CN108304195A (zh) * | 2017-09-08 | 2018-07-20 | 武汉斗鱼网络科技有限公司 | 一种aop组件的实现方法、装置及电子设备 |
CN111562950A (zh) * | 2020-04-28 | 2020-08-21 | 中国银行股份有限公司 | 一种分布式应用参数动态发布的***及方法 |
US10977027B1 (en) * | 2020-05-07 | 2021-04-13 | Hcl Technologies Limited | System and method of deploying java agents in runtime |
CN112114979A (zh) * | 2020-08-31 | 2020-12-22 | 厦门安胜网络科技有限公司 | 远程过程调用方法和装置 |
CN112532490A (zh) * | 2020-11-30 | 2021-03-19 | 武汉悦学帮网络技术有限公司 | 回归测试***、方法和电子设备 |
Non-Patent Citations (1)
Title |
---|
吴清寿;: "基于Proxy模式的远程处理框架研究", 长江大学学报(自科版), no. 19 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023103727A1 (zh) * | 2021-12-10 | 2023-06-15 | 易保网络技术(上海)有限公司 | 服务调试的路由方法、电子设备、介质及程序产品 |
CN115629992A (zh) * | 2022-12-16 | 2023-01-20 | 云筑信息科技(成都)有限公司 | 一种对使用Spring技术栈构建的应用***进行调试的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113360377B (zh) | 2023-11-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102220127B1 (ko) | 커스터마이징된 소프트웨어 개발 키트(sdk) 생성을 위한 방법 및 장치 | |
US8769502B2 (en) | Template based asynchrony debugging configuration | |
US11550599B2 (en) | Method and apparatus for running applet | |
US20230036980A1 (en) | Micro-frontend system, sub-application loading method, electronic device, computer program product, and computer-readable storage medium | |
CN111338623B (zh) | 一种开发用户界面的方法、装置、介质和电子设备 | |
US9432469B2 (en) | Automated server controlled client-side logging | |
CN104536890A (zh) | 测试***、方法和装置 | |
CN113360377B (zh) | 一种测试方法和装置 | |
US10873628B2 (en) | System and method for non-intrusive context correlation across cloud services | |
KR20130085856A (ko) | 이종 웹서비스의 조합 응용에서 웹서비스 호출을 위한 위젯 자동 생성 방법 및 그 장치 | |
Tang et al. | Xdebloat: Towards automated feature-oriented app debloating | |
CN112559024A (zh) | 一种生成交易码变更列表的方法和装置 | |
CN111414154A (zh) | 前端开发的方法、装置、电子设备和存储介质 | |
CN112783903B (zh) | 生成更新日志的方法和装置 | |
CN113468041A (zh) | 一种接口对比测试方法和装置 | |
CN112860447A (zh) | 一种不同应用间的交互方法和*** | |
CN113010174A (zh) | 业务监控的方法和装置 | |
CN112579428A (zh) | 接口测试的方法、装置、电子设备和存储介质 | |
CN113031960B (zh) | 代码编译方法、装置、服务器及存储介质 | |
CN113535568B (zh) | 应用部署版本的验证方法、装置、设备和介质 | |
CN113342633B (zh) | 一种性能测试方法和装置 | |
US20230088655A1 (en) | Automatic non-code test suite generation from api specification | |
CN113495747B (zh) | 一种灰度发布方法和装置 | |
CN117193769A (zh) | 页面渲染方法及装置、电子设备和计算机可读存储介质 | |
CN113760694A (zh) | 一种计算代码覆盖率的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |