什么是 mock server
mcok server 可以被用作模拟 HTTP 或 HTTPS 集成的任何系统。
- 一个模拟配置为返回不同请求的特定响应
- 代理记录和可选地修改请求和响应
- 既是某些请求的代理,又是其他请求的模拟
当 MockServer 收到请求时,它会将请求与已配置的活动期望进行匹配。 然后,如果没有找到匹配项,它会代理请求(如果合适); 否则返回 404。 对于收到的每个请求,都会发生以下步骤:
- 找到匹配的期望并执行操作
- 如果没有匹配的期望代理请求 则返回 404 期望定义了所采取的操作, 例如,可以返回响应。
MockServer 支持以下操作:
当请求与期望匹配时返回 “模拟” 响应
当请求与期望匹配时转发请求(即动态端口转发代理)
当请求与期望匹配时执行回调,允许动态创建响应
当请求符合预期时返回无效响应或关闭连接
验证请求已发送(即作为测试断言)
检索日志、请求或期望以帮助调试
mockserver 代理
mockserver 能够
- 使用下列方法代理请求:
- 端口转发
- web 代理
- https tunning 代理(使用 HTTP CONNECT)
- SOCKS 代理(即动态端口转发)
- 验证代理请求是否已发送(即在测试断言中)
- 记录代理请求和响应以分析系统的行为
为什么使用 MockServer
MockServer 允许您通过 HTTP 或 HTTPS 模拟任何服务。例如 REST 或 RPC 服务。 比如以下场景:
测试
- 轻松为 HTTP 依赖项(例如 REST 或 RPC 服务)重新创建所有类型的响应,以轻松有效地测试应用程序。
- 隔离被测系统以确保测试可靠运行,并且仅在存在真正错误时才会失败。 重要的是只测试被测系统而不是它的依赖关系,以避免测试由于不相关的外部更改(例如网络故障或重新启动 / 重新部署的服务器)而失败。
- 轻松为每个测试独立设置模拟响应,以确保测试数据与每个测试一起封装。 避免在难以管理和维护的测试之间共享数据,避免测试相互感染。
- 创建测试断言以验证被测系统已发送的请求。
解耦开发
- 在服务可用之前开始使用服务 API。 如果 API 或服务尚未完全开发,MockServer 可以模拟 API,允许使用该服务的任何团队开始工作而不会被延迟
- 在 API / 服务可能极其不稳定和易变的初始开发阶段隔离开发团队。 即使外部服务失败,使用 MockServer 也可以继续开发工作
隔离单个服务
在部署和调试期间,在本地机器上以调试模式运行单个应用程序或服务或处理请求子集会很有帮助。 使用 MockServer 很容易有选择地将请求转发到在调试模式下运行的本地进程,所有其他请求都可以转发到真实服务,例如在 QA 或 UAT 环境中运行
模拟依赖和验证请求
给定一个具有服务依赖的系统,如下:
MockServer 可用于模拟服务依赖项,如下所示:
隔离单个服务 / 应用程序
单页应用程序可以从 Web 服务器加载静态资源,例如 HTML、CSS 和 JavaScript,还可以对一个或多个单独的服务进行 AJAX 调用,如下所示:
为了隔离单个 AJAX 服务,用于开发或调试,MockServer 可以选择性地将特定请求转发到服务的本地实例:
为什么使用 MockServer 作为代理
MockServer 允许您记录来自被测系统的请求或通过记录出站请求来分析现有系统。
- 测试
- 分析现有系统
- 调试 http 交互系统
- 记录和回放
运行 mockserver
MockServer 很灵活,支持多种使用模式。
- 通过@Before 或 @After 方法中的 Java API 以编程方式
- 在 JUnit 4 测试中通过@Rule 注释字段使用 JUnit 4@Rule
- 通过 @ExtendWith 注释的 JUnit 5 类使用 JUnit 5 测试扩展
- 通过 @MockServerTest 注释的测试类使用 Spring 测试执行侦听器
- docker 方式运行
- k8s 的 chart
- java -jar 独立运行
- maven 插件
- nodejs 的 npm 模块
- Grunt 插件
- 独立 war 包
运行 mockserver
使用命令行启动 java -jar mockserver-netty-5.14.0-shaded.jar -serverPort 1080
访问 UI http(s)://<host>:<port>/mockserver/dashboard
可以看到一些界面
关注公众号 soft张三丰