1 / 4

为什么需要 Mock

为什么需要 Mock. FTest 、 S ervice A 、 Service B 在三台不同机器上 在 FTest 上面测试接口 A ,发起调用 A 机器 A 服务向 CMLB 请求 B 的 ip ,定位到 B 的机器 A 服务调用 B 服务 这时候, B 服务若未完成开发,要测试 A 服务,则需要 Mock 假数据。 Mock 后, A 服务调用 B 服务,并不会真实调用,而是直接返回我们配置的假数据。. Service A. Service B. FTest. cmlb. Mock 数据的需求. 不能修改业务代码。

lortiz
Download Presentation

为什么需要 Mock

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 为什么需要 Mock • FTest、Service A、Service B在三台不同机器上 • 在FTest上面测试接口A,发起调用A机器 • A服务向CMLB请求B的ip,定位到B的机器 • A服务调用B服务 • 这时候,B服务若未完成开发,要测试A服务,则需要Mock假数据。 • Mock后,A服务调用B服务,并不会真实调用,而是直接返回我们配置的假数据。 Service A Service B FTest cmlb

  2. Mock数据的需求 • 不能修改业务代码。 • 自定义返回数据,粒度为某Service、Method。 • 在执行用例时开启Mock,执行完成后关闭Mock。 • 需要同时支持多协议,如 sRPC、HTTP。 • 同一个Service,只mock某个method,其它的method,还需要调用真实的服务来获取数据。 Service A Service B FTest cmlb

  3. 方案 • 若用例有配置对应服务的Mock数据,那么找出该服务所在ip、port • 在所有调用机器上,设置iptable规则,将B服务的ip、port重定向到Mock Server。 • Mock Server收到请求后,解包,再从测试平台查询Mock数据,返回。 • iptable写入有两种方法: • 安装Mock Agent,通过调用Agent来写入 • FTest直接调用salt接口来设置 Service A Service B FTest cmlb iptables Mock Server

  4. 举例 • 编写了一个用例,依次调用A、B、C、D,其中服务内分别又调用了S1、S2、H1。 • 假设在用例中已经配置好了右边三个服务的mock假数据,S1、S2为RPC,H1为HTTP。 • 运行用例时,先收集ABCD环境对应的ip,暂且叫 ips1。 • 再收集有mock数据服务,对应环境的ip、port,叫ips2、port2。 • 对所有ips1的主机设置iptable规则,将ips2、port2转发给MockServer的ip、port,其中协议不一样,转发给MockServer的port不一样。例如srpc转给9091端口,http转给9092端口。 • MockServer启动rpc服务(9091端口),和http服务(9092端口),对请求数据解包,获取rpc的service、method,获取http的url、body等。 • MockServer根据解析的请求数据,去测试平台DB中查询,有没有设置对应的mock数据,有就取出来返回,没有就自己请求原服务,获取数据后再返回。(这时候mock server怎么知道原服务的ip、port?)SO_ORIGINAL_DST • 用例运行完成后,再对所有ips1,取消掉之前设置的iptable规则,恢复现场。 FTest A Service1.Method1 Service1.Method2 Service1.Method3 S1 B C S2 Service2.Method1 H1 D Get /user/info/ • 这里只希望mock • Service1.Method1 • Service2.Method1 • H1 • 其它接口还是需要正常调用。

More Related