一、实现场景:
1.1请求同一个接口,不同的传参/ip返回的结果不一样。
数据的匹配
以create_account接口为例,参数有accountId
accountId=123,返回成功
accountId=456,返回失败
accountId=456,accountName=zhangsan,返回处理中
ip=123.123.123.1 返回成功
ip=123.123.123.2 返回失败
解决方案:
将数据存储在yml文件里。如create_account接口,只返回一个固定的结果,那么我们就将返回值放到一个yml文件里。
如create_name接口,根据传参不同,返回不同的id。一个接口对应一个文件夹, 将create_name接口的返回值写多个yml文件,放到同一个文件夹里。然后再去匹配。
1.2 返回的结果不是写死的,是动态数据,需要对数据进行处理
- response: {xxxxx,"orderId":123456}
- response: {xxxxx,"orderId":123456}
- response: {xxxxx,"createTime":123456}
1、 返回的数据中不能全部都是写死的,有的可能是随机的id,有的可能是时间戳,还有的可能是固定格式的数据
2、实际业务有一个case: 要返回merId:xxxx, 但是这个merId的获取,是要从别的业务的接口中获取返回信息。
1.3 回调能力
就是外部请求到我mock服务之后,我mock服务做了返回,但同时我会按照要求给它去完成某些能力,如:
- 调http
- 调公司内部的RPC
- 或mq
- 还有可能是写某个db.
1.4响应时间
比如服务调我们的mock时,我们是直接给返回。
那要是模拟一下真实的服务处理,比如处理超时,假设用时 3秒在返回。
模拟超时处理
思考: 如果你做线上压测的时候,相应时间不能给返回一个固定值,所以返回是一个区间的概率。
1.5 hook参数
比如请求的时候,请求参数携带一个requestId, 然后requestId本身还是个变化的,也是随机的。
然后在返回的时候,要把这个id带回去,即:虽然返回数据不能写死,但是你也不能自己生成,需要使用请求的参数。
1.6 透传请求
比如10个请求,请求mock服务,其中参数id=123的走mock,id=456的走真实的服务。
所以这个时候如果我们判断id=456了,我们需要去自己真实的拿着请求的参数,我们再去调真实服务。
拿到返回结果,在返回给调用端。
总结:
其实就是把数据源放在文件里,根据用户的传参,对数据进行处理,然后再返回。
二、依赖
springframework.boot 用的2.4.4版本
pom.xml
三、开始写
3.1 新建一个controller,简单的建一个服务,试试是否能ping通

PingController
- package com.example.mockserver.controller;
- ?
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- ?
- @RestController
- public class PingController {
- ?
- ? ? @RequestMapping("/ping")
- ? ? public String ping(){
- ? ? ? ? return "ok";
- ?
- ? ? }
- }
要有@RestController 注解
修改application.properties 格式,换成yml application.yml 。并指定端口号。
application.yml
启动spring boot ,运行 MockServerApplication 。访问一下127.0.0.1:8081/ping。
返回ok就是正常的。
3.2 新建MockController1,/** 这里指的是任意的URI
MockController1
- package com.example.mockserver.controller;
-
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- @RestController
- public class MockController1 {
-
- @RequestMapping("/**")
- public String doMock(){
- return "do mock server";
- }
- }
"/**" 这里指的是任意的URI 。启动服务,当请求ping时返回ok,请求其他任何URL时,返回 do mock server
到此这篇关于springboot实现mock平台的示例代码的文章就介绍到这了,更多相关springboot实现mock 内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!