实现动态模拟远程接口的装置及方法制造方法及图纸

技术编号:8387070 阅读:170 留言:0更新日期:2013-03-07 07:45
本发明专利技术公开一种实现动态模拟远程接口的装置,连接至对被调用系统的远程接口进行调用的调用端系统,其中所述调用端系统运行在Java虚拟机中,该装置包括:代理单元,用于修改所述调用端系统所加载的Java字节码中涉及接口调用请求的相关字节码;模拟单元,用于根据所述被调用系统的远程接口设置模拟远程接口;控制单元,用于在确认所述远程接口不可用时,控制所述代理单元修改所述相关字节码,以使所述调用端系统由调用所述远程接口切换至调用所述模拟远程接口。本发明专利技术还相应公开一种实现动态模拟远程接口的方法。本发明专利技术的实施例通过动态修改Java字节码的方式修改调用端系统,无需在原有系统里附加任何代码,不会给系统在正式环境上线造成隐患。

【技术实现步骤摘要】

本申请涉及网络环境中的系统测试技术,尤其涉及一种。
技术介绍
远程接口通常部署在远程服务器 里,用于提供各种类型的服务,同时通过自身提供的远程调用方法以供其他服务器完成对这些服务的远程调用。在多系统共存的网络环境中,系统与系统之间通常通过远程接口的方式进行交互。另一方面,在一个系统正式上线应用之前,开发和测试人员通常需要针对该系统设置定期自动化执行系统部署、测试和集成的过程,以此来持续地检测系统中存在的问题,这一过程通常被称为持续集成,其中理所当然也包括对待测系统调用其所依赖的第三方系统提供的远程接口的过程的测试。然而,在长期的持续集成过程中,难免会出现第三方系统不可用的情况,当这种情况发生时,为了继续进行正常的测试工作,便需要通过下述几种方法来屏蔽第三方系统不可用所带来的不利影响。其中一种方法通过人为修改调用端系统(即待测系统)的远程接口调用逻辑来实现,该方法意在临时去除调用端对远程接口的依赖,而待远程接口可用后,再恢复原来的正常逻辑。然而,该方法只能临时解决开发过程中远程接口不可用的问题,但其在持续集成的过程中并不合适,一方面是由于往返修改的时间成本比较高,另一方面还会存在因开发人员忘记恢复原来的正常逻辑而将临时逻辑带入正式环境中而造成故障的隐患。另一种方法通过添加对调用端的拦截逻辑来实现,该方法需要在调用端系统里添加对调用远程接口进行拦截的模块,以在设定的规则下拦截调用端对远程接口的调用,并返回该调用过程所需要的模拟值。然而,该方法需要对调用端系统进行改造,会在其中引入与正常逻辑无关的模块,从而对调用端系统造成了侵入;并且,该方法如果要实现返回远程接口的模拟值,就需要额外提供不同的拦截规则,从而造成模拟行为实现繁琐、不够便捷。
技术实现思路
本申请的实施例旨在提供一种,以解决现有调用端系统依赖的远程接口不可用时所采取的手段中存在的上述问题。为实现上述目的,本申请的实施例提供了一种实现动态模拟远程接口的装置,连接至对被调用系统的远程接口进行调用的调用端系统,其中所述调用端系统运行在Java虚拟机中,该装置包括代理单元,用于修改所述调用端系统所加载的Java字节码中涉及接口调用请求的相关字节码;模拟单元,用于根据所述被调用系统的远程接口设置模拟远程接口 ;控制单元,用于在确认所述远程接口不可用时,控制所述代理单元修改所述相关字节码,以使所述调用端系统由调用所述远程接口切换至调用所述模拟远程接口。本申请的实施例还提供了一种实现动态模拟远程接口的方法,应用于调用端系统对被调用系统的远程接口进行调用的过程中,其中所述调用端系统运行在Java虚拟机中,该方法包括以下步骤监测所述远程接口的可用状态;在所述远程接口不可用时修改所述调用端系 统所加载的Java字节码中涉及接口调用请求的相关字节码,以控制所述调用端系统由调用所述远程接口切换至调用模拟远程接口;其中,所述模拟远程接口用于对所述远程接口进行模拟。由上述技术方案可知,本申请的实施例通过动态修改Java字节码的方式修改调用端系统,无需在原有系统里附加任何代码,不会给系统在正式环境上线造成隐患。附图说明图I为本申请实现动态模拟远程接口的装置实施例结构图;图2为图I所示实施例中模拟单元的模拟远程接口配置界面示意图;图3为本申请实现动态模拟远程接口的方法实施例流程图;图4为图3所示实施例中接口调用请求的动态修改流程示意图;图5为图3所示实施例中调用端系统的模拟远程接口调用流程示意图。具体实施例方式下面将详细描述本申请的具体实施例。应当注意,这里描述的实施例只用于举例说明,并不用于限制本申请。图I为本申请实现动态模拟远程接口的装置实施例结构图,如图所示,本实施例实现动态模拟远程接口的装置10连接至对被调用系统30的远程接口进行调用的调用端系统20,其中调用端系统运行在Java虚拟机中,该装置包括代理单元11、模拟单元12及控制单元13。其中,代理单元11用于修改调用端系统20所加载的Java字节码中涉及接口调用请求的相关字节码;模拟单元12用于根据被调用系统30的远程接口设置模拟远程接口 ;控制单元13用于在确认远程接口不可用时,控制代理单元11在调用端系统20上修改上述的相关字节码,以使调用端系统20由调用远程接口切换至调用模拟远程接口。Java虚拟机(JVM, Java Virtual Machine)通过在实际的计算机上仿真模拟各种计算机功能,能够屏蔽与具体操作系统平台相关的信息,使得Java程序只需要生成在Java虚拟机上运行的字节码,就可以在多种平台上不加修改地运行。如上所述,图I所示实施例的调用端系统20便运行在这样一个Java虚拟机中,在一个实施例中,代理单元11可以利用Java虚拟机工具接口(JVM TI, JVM Tool Interface)来实现。JVM工具接口通常是用于对JVM进行监控,通过JVM工具接口可以监控JVM的运行状态以及控制运行在JVM之上的Java应用程序。具体而言,利用JVM工具接口实现的代理单元11能够在预设的网络端口上侦听JVM中的所有网络请求,由此其得以在JVM所加载的Java字节码中找到与远程接口调用请求相关的字节码,进而,代理单元11可以利用JVM工具接口中的JavaInstrumentation所提供的特性来动态修改调用端系统中加载的Java字节码。由上述可知,本申请实施例实现动态模拟远程接口的装置在调用端系统20原本需要调用的远程接口不可用时,是通过动态修改Java字节码的方式来修改调用端系统20切换至调用模拟远程接口,而无需在调用端系统里附加任何代码,从而不会给系统在正式环境上线时造成隐患;并且,在字节码已经加载运行的情况下对其进行修改的动态方式,不会影响到系统的正常工作,相较于只能在系统未启动状态下对待加载字节码进行的静态修改方式,应用起来显然更加灵活。进一步,在一个实施例中,上述的代理单元11包括指令接收子单元111及调用修改子单元112。其中,指令接收子单元111用于接收控制单元13发送的控制指令,以此决定是否进行后续字节码的修改;调用修改子单元112则根据接收到的控制指令将上述相关字节码中的调用对象由远程接口修改为模拟远程接口。在一个实施例中,调用修改子单元112是利用Java Instrumentation提供的特性来动态更改调用端系统20所加载的Java字节码。具体而言,指令接收子单元111在收到控制单元13传来的指令后通知给调用修改子单元112,后者进而找到调用端系统20所加载的Java字节码中涉及接口调用对象的相关字节码,并将接口调用对象由被调用系统30的远程接口替换为模拟单元12提供的模拟远程接口,从而实现调用端系统20的动态修改。接续,上述模拟单元12设置的模拟远程接口具体是根据被调用系统30的真实远程接口的实现逻辑对该真实远程接口进行模拟。进一步具体而言,被调用系统30的每个真实远程接口各自具有相应的实现逻辑,这一实现逻辑可以理解为由可执行的计算机程序代码组成,当被调用系统30从调用端系统20收到调用某个真实远程接口的请求且该真实远程接口为可用时,与该真实远程接口对应的实现逻辑会以调用请求中携带的特定信息作为输入而被执行并得到用来返回给调用端系统20的输出结果;而上述模拟单元本文档来自技高网
...

【技术保护点】
一种实现动态模拟远程接口的装置,连接至对被调用系统的远程接口进行调用的调用端系统,其中所述调用端系统运行在Java虚拟机中,该装置包括:代理单元,用于修改所述调用端系统所加载的Java字节码中涉及接口调用请求的相关字节码;模拟单元,用于根据所述被调用系统的远程接口设置模拟远程接口;控制单元,用于在确认所述远程接口不可用时,控制所述代理单元修改所述相关字节码,以使所述调用端系统由调用所述远程接口切换至调用所述模拟远程接口。

【技术特征摘要】

【专利技术属性】
技术研发人员:袁志俊禹扬帆
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1