在微服务测试中,我们既需要测试的provider服务是否能够正常提供服务,也需要测试consumer服务是否能够正常的调用服务,但是如果仅仅是这样这中间缺少了一层被测件并没有被测试,那就是网关层。
如果要测试网关就需要运行其后面的生产者服务,也就是provider服务。如果provider还需要数据持久化层的支持,那么同样需要建设持久化层。从网关、provider服务、数据持久化层之间还需要网络的连接,这就为测试过程引入了一大堆影响测试结果的因素,这些因素如果出现了不确定的情况导致测试失效就会出发一系列的缺陷流程。在测试失效后,测试工程师会判断是不是被测件也就是网关的缺陷,如果不是就需要确定是误报,那么需要建立技术任务卡,寻求研发帮忙解决对应的问题,从而引起了大量的额外工作,这也是一种极大的浪费。
同时,我们要测试网关,需要一系列的额外服务支持,这样也违反了单一职责原则,服务应该只知道如何部署本身即可,不必关心它所依赖的服务。服务虚拟化就是为了解决上述情况而生的。
什么是服务虚拟化
服务虚拟化技术能够用来模拟服务依赖项的行为。它除了可以帮助我们解决外部服务级别依赖所导致一些问题以外,还可以帮助我们测试不受控的服务以及能够解决引起不稳定的外部因素。例如无法与外部服务器通信、外部依赖服务出现了一些问题、公共API访问次数限制、公共APi访问速度限制等等。