经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring » 查看文章
springboot实现mock平台的示例代码
来源:jb51  时间:2022/6/27 14:14:04  对本文有异议

一、实现场景:

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

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. ? ? ? ? ?xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. ? ? <modelVersion>4.0.0</modelVersion>
  5. ? ? <parent>
  6. ? ? ? ? <groupId>org.springframework.boot</groupId>
  7. ? ? ? ? <artifactId>spring-boot-starter-parent</artifactId>
  8. ? ? ? ? <version>2.4.4</version>
  9. ? ? ? ? <relativePath/> <!-- lookup parent from repository -->
  10. ? ? </parent>
  11. ? ? <groupId>com.example</groupId>
  12. ? ? <artifactId>AutoApi</artifactId>
  13. ? ? <version>0.0.1-SNAPSHOT</version>
  14. ? ? <name>AutoApi</name>
  15. ? ? <description>Demo project for Spring Boot</description>
  16. ? ? <properties>
  17. ? ? ? ? <java.version>1.8</java.version>
  18. ? ? </properties>
  19. ? ? <dependencies>
  20. ? ? ? ? <dependency>
  21. ? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
  22. ? ? ? ? ? ? <artifactId>spring-boot-starter-web</artifactId>
  23. ? ? ? ? </dependency>
  24. ?
  25. ? ? ? ? <dependency>
  26. ? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
  27. ? ? ? ? ? ? <artifactId>spring-boot-starter-test</artifactId>
  28. ? ? ? ? ? ? <scope>test</scope>
  29. ? ? ? ? </dependency>
  30. ? ? ? ? <dependency>
  31. ? ? ? ? ? ? <groupId>org.yaml</groupId>
  32. ? ? ? ? ? ? <artifactId>snakeyaml</artifactId>
  33. ? ? ? ? ? ? <version>1.26</version>
  34. ? ? ? ? </dependency>
  35. ? ? ? ? <dependency>
  36. ? ? ? ? ? ? <groupId>org.projectlombok</groupId>
  37. ? ? ? ? ? ? <artifactId>lombok</artifactId>
  38. ? ? ? ? ? ? <version>1.18.16</version>
  39. ? ? ? ? ? ? <scope>provided</scope>
  40. ? ? ? ? </dependency>
  41. ? ? ? ? <dependency>
  42. ? ? ? ? ? ? <groupId>com.google.guava</groupId>
  43. ? ? ? ? ? ? <artifactId>guava</artifactId>
  44. ? ? ? ? ? ? <version>30.1.1-jre</version>
  45. ? ? ? ? </dependency>
  46. ? ? ? ? <dependency>
  47. ? ? ? ? ? ? <groupId>org.apache.commons</groupId>
  48. ? ? ? ? ? ? <artifactId>commons-lang3</artifactId>
  49. ? ? ? ? ? ? <version>3.11</version>
  50. ? ? ? ? </dependency>
  51. ? ? ? ? <dependency>
  52. ? ? ? ? ? ? <groupId>com.squareup.okhttp3</groupId>
  53. ? ? ? ? ? ? <artifactId>okhttp</artifactId>
  54. ? ? ? ? ? ? <version>4.9.0</version>
  55. ? ? ? ? </dependency>
  56. ? ? ? ? <dependency>
  57. ? ? ? ? ? ? <groupId>commons-io</groupId>
  58. ? ? ? ? ? ? <artifactId>commons-io</artifactId>
  59. ? ? ? ? ? ? <version>2.6</version>
  60. ? ? ? ? </dependency>
  61. ? ? ? ? <dependency>
  62. ? ? ? ? ? ? <groupId>com.google.code.gson</groupId>
  63. ? ? ? ? ? ? <artifactId>gson</artifactId>
  64. ? ? ? ? ? ? <version>2.8.6</version>
  65. ? ? ? ? </dependency>
  66. ? ? ? ? <dependency>
  67. ? ? ? ? ? ? <groupId>com.fasterxml.jackson.dataformat</groupId>
  68. ? ? ? ? ? ? <artifactId>jackson-dataformat-yaml</artifactId>
  69. ? ? ? ? ? ? <version>2.12.3</version>
  70. ? ? ? ? </dependency>
  71. ? ? ? ? <dependency>
  72. ? ? ? ? ? ? <groupId>org.springframework</groupId>
  73. ? ? ? ? ? ? <artifactId>spring-jdbc</artifactId>
  74. ? ? ? ? ? ? <version>5.3.8</version>
  75. ? ? ? ? </dependency>
  76. ? ? ? ? <dependency>
  77. ? ? ? ? ? ? <groupId>mysql</groupId>
  78. ? ? ? ? ? ? <artifactId>mysql-connector-java</artifactId>
  79. ? ? ? ? ? ? <version>8.0.20</version>
  80. ? ? ? ? </dependency>
  81. ? ? ? ? <dependency>
  82. ? ? ? ? ? ? <groupId>com.alibaba</groupId>
  83. ? ? ? ? ? ? <artifactId>druid</artifactId>
  84. ? ? ? ? ? ? <version>1.2.6</version>
  85. ? ? ? ? </dependency>
  86. ? ? ? ? <dependency>
  87. ? ? ? ? ? ? <groupId>cn.hutool</groupId>
  88. ? ? ? ? ? ? <artifactId>hutool-core</artifactId>
  89. ? ? ? ? ? ? <version>5.7.5</version>
  90. ? ? ? ? </dependency>
  91. ?
  92. ? ? </dependencies>
  93. ?
  94. ? ? <build>
  95. ? ? ? ? <plugins>
  96. ? ? ? ? ? ? <plugin>
  97. ? ? ? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
  98. ? ? ? ? ? ? ? ? <artifactId>spring-boot-maven-plugin</artifactId>
  99. ? ? ? ? ? ? </plugin>
  100. ? ? ? ? </plugins>
  101. ? ? </build>
  102. ?
  103. </project>

三、开始写

3.1 新建一个controller,简单的建一个服务,试试是否能ping通

 

PingController

  1. package com.example.mockserver.controller;
  2. ?
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.web.bind.annotation.RestController;
  5. ?
  6. @RestController
  7. public class PingController {
  8. ?
  9. ? ? @RequestMapping("/ping")
  10. ? ? public String ping(){
  11. ? ? ? ? return "ok";
  12. ?
  13. ? ? }
  14. }

要有@RestController 注解

修改application.properties 格式,换成yml  application.yml 。并指定端口号。

application.yml

  1. server:
  2. port: 8081

启动spring boot ,运行 MockServerApplication 。访问一下127.0.0.1:8081/ping。

返回ok就是正常的。

3.2   新建MockController1,/** 这里指的是任意的URI

MockController1

  1. package com.example.mockserver.controller;
  2. import org.springframework.web.bind.annotation.RequestMapping;
  3. import org.springframework.web.bind.annotation.RestController;
  4. @RestController
  5. public class MockController1 {
  6. @RequestMapping("/**")
  7. public String doMock(){
  8. return "do mock server";
  9. }
  10. }

"/**" 这里指的是任意的URI 。启动服务,当请求ping时返回ok,请求其他任何URL时,返回 do mock server

到此这篇关于springboot实现mock平台的示例代码的文章就介绍到这了,更多相关springboot实现mock 内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号