
jordimartin/mmockMmock是一款面向开发者的测试和快速原型设计工具,作为轻量级HTTP模拟服务器,它允许开发者通过JSON或YAML文件定义模拟规则,配置应用端点使用模拟服务,并在Web界面中 inspect 请求数据。Mmock采用Go语言构建,无需安装即可在多平台运行,适用于API测试、服务原型设计、状态模拟等场景。
/hello/:name)*hello*)bashdocker image pull jordimartin/mmock
bashdocker run -v YOUR_ABS_PATH:/config -p 8082:8082 -p 8083:8083 jordimartin/mmock
-v YOUR_ABS_PATH:/config:挂载本地目录到容器内的/config,用于存放模拟规则文件(JSON/YAML)-p 8082:8082:映射Web控制台端口-p 8083:8083:映射模拟服务器端口模拟规则通过JSON或YAML文件定义,存放于挂载的/config目录中。
json{ "request": { "method": "GET", "path": "/hello/*" }, "response": { "statusCode": 200, "headers": { "Content-Type": ["application/json"] }, "body": "{\"hello\": \"{{request.query.name}}, my name is {{fake.FirstName}}\"}" } }
yaml--- request: method: GET path: "/hello/*" response: statusCode: 200 headers: Content-Type: - application/json body: '{"hello": "{{request.query.name}}, my name is {{fake.FirstName}}"}'
定义匹配条件,包含以下字段:
host:请求主机名(不含端口)method:HTTP方法(必填,支持多方法用|分隔,如GET|POST)path:资源路径(必填,支持:variable命名参数和通配符)queryStringParameters:查询字符串参数(支持多值)headers:请求头(区分大小写,支持多值)cookies:Cookie键值对body:请求体(支持通配符匹配)定义匹配后的响应,包含:
statusCode:HTTP状态码(如200、404、500)headers:响应头(支持多值和变量)cookies:响应Cookie(支持变量)body:响应体(支持变量)高级配置选项:
scenario:场景配置(name场景名称、requiredState当前所需状态、newState匹配后新状态)proxyBaseURL:代理基础URL(将请求转发至该URL,无需定义response)delay:响应延迟(秒,模拟网络或服务器性能问题)crazy:是否启用疯狂模式(随机返回5xx错误,模拟服务器故障)priority:匹配优先级(数值越高优先级越高,避免被宽松规则匹配)webHookURL:匹配后通知的WebHook端点响应中可使用变量标签{{nameVar}},支持以下类型:
提取请求中的数据:
request.scheme:请求协议(http/https)request.hostname:主机名request.port:端口request.path:完整路径request.path."key":路径中的命名参数(如/user/:id对应request.path.id)request.query."key":查询参数(如?name=test对应request.query.name)request.cookie."key":Cookie值request.url:完整URL(含协议、主机、端口、路径和查询参数)request.body:请求体(支持JSON/XML/表单数据的键值提取,如request.body.user.name)生成随机测试数据:
fake.FirstName:名fake.LastName:姓fake.FullName:全名fake.EmailAddress:***fake.City:城市fake.Country:国家fake.IPv4:IPv4地址fake.UUID:UUIDfake.Int(n):小于n的随机整数fake.Word:随机单词file.contents(FILE_PATH):读取文件内容http.contents(URL):获取URL响应内容场景用于模拟有状态服务,通过状态机管理服务行为。默认初始状态为not_started,可通过requiredState指定匹配所需状态,newState设置匹配后的新状态。
示例流程:
GET /user 需状态created,返回404POST /user 需状态not_started,返回201并更新状态为createdGET /user 需状态created,返回200Mmock提供REST API用于管理请求、场景和模拟规则:
GET /api/request/all:获取所有请求记录GET /api/request/matched:获取所有匹配的请求POST /api/request/verify:验证是否收到匹配特定规则的请求GET /api/scenarios/reset_all:重置所有场景状态PUT /api/scenarios/set/:scenario/:state:设置场景状态PUT /api/scenarios/pause:暂停场景状态更新PUT /api/scenarios/unpause:恢复场景状态更新GET /api/mapping:获取所有模拟规则POST /api/mapping/:uri:创建模拟规则PUT /api/mapping/:uri:更新模拟规则DELETE /api/mapping/:uri:删除模拟规则Mmock默认收集***使用统计(如模拟请求数、控制台使用次数等),可通过启动参数-server-statistics=false禁用。
通过命令行参数配置Mmock(Docker运行时可添加至docker run命令末尾):
-config-path string 模拟规则目录(默认"execution_path/config") -console bool 是否启用控制台(默认true) -console-ip string 控制台IP(默认公共IP) -console-port int 控制台端口(默认8082) -request-storage-capacity int 请求存储容量(0为无限,默认100) -server-ip string 模拟服务器IP(默认公共IP) -server-port int 模拟服务器端口(默认8083) -server-statistics bool 是否启用统计(默认true) -server-tls-port int TLS端口(默认8084) -tls-path string TLS配置目录(默认"execution_path/tls")
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务