我一直有个疑问,是不是做 mock 平台,都是需要开发配合改业务代码的?比如测试一个外部系统接口的返回的几种状态,200 的话前端返回成功,403 的话前端返回没权限,我知道 mockserver 这种可以做一个链接来返回,但怎么才能让我测试的时候,比如在前端页面点击以后,后台就直接去调用 mockserver 提供的地址而不是去调用正常的外部接口呢?
你可以在接口测试中全部使用 mock server 来进行转发,当 mock server 发现接口地址真实存在就转发至真实的服务,否则就走自己 mock 的接口
https://tech.meituan.com/2015/10/19/mock-server-in-action.html 我参考美团这个文章设计,做了一个 mock-server。
我不太明白的是,某一个内部接口会对接第三方服务,那我需要怎么做,才能让内部的这个接口不走第三方服务而走我定义好的 mock?
一般做法是修改服务配置文件的第三方服务域名,让其走到 mock 服务,如果是开发写死了第三方服务域名,则让开发修改。
结合 sandbox 来做,页面一键配置
我们用的测试网管 + 测试 MOCK 的思路,所有服务请求到第三方的请求都会通过我们的测试网管(修改服务的配置,将第三方服务的域名更改为测试网管的域名)。然后根据一些白名单配置,决定对应接口是否请求到第三方服务/测试 MOCK。按照这个逻辑,就可以决定特定第三方服务/特定接口/特定数据是否需要走第三方还是 MOCK。
大佬,请问有更详细的说明吗,最近也在想这个问题,没有思路
思路本质就是做 aop,看在哪里做 aop 去改掉原本业务要请求的地址。
比如代码级别的动态配置下发 编译层面的拦截 c/c++ 插桩 java 的 agent,字节码&源码级别的切面 aspectj ASM 等等 机器级别的 libc 拦截、防火墙拦截 中间件级别的 网关统一拦截,配置中心拦截 路由器级别的拦截,这个类似防火墙
当然每一层做都各有优劣势,可以根据自身情况分析分析再做决定
直接使用第三方开源的 WireMock,基本上你想到的功能都已经有了。没必要做重复的轮子