能否在CastleMock中处理x-www-form-urlencoded并按请求数据返回响应?
用CastleMock实现基于x-www-form-urlencoded表单参数的动态Mock响应
针对你需要Mock Truora API并根据表单参数返回不同响应的需求,CastleMock有几种可行的实现方式,具体步骤如下:
1. 基于请求匹配规则绑定特定响应
如果是固定的参数组合对应固定响应,可以直接通过请求匹配规则实现:
- 进入你创建的Truora Mock接口,切换到Request Matching标签页
- 点击Add Request Match,选择匹配类型为
Form Parameter - 填写要匹配的表单参数名(比如
document_type),设置匹配条件(如等于、包含)和目标值(如CC) - 重复上述操作,添加所有需要匹配的表单参数规则
- 切换到Responses标签页,创建对应参数组合的响应模板(设置状态码、Content-Type、响应体),并将该响应与之前配置的匹配规则关联
这样当请求的表单参数完全匹配规则时,就会返回对应的预设响应。
2. 用Groovy脚本生成动态响应(复杂场景)
如果参数组合较多,或者需要根据参数动态拼接响应内容,推荐使用CastleMock的脚本功能:
- 在Mock接口的Responses标签页,点击Add Response,选择响应类型为
Script - 在脚本编辑框中编写Groovy逻辑,通过
request.formParameter.get("参数名")获取表单参数值,然后根据参数逻辑生成响应
示例脚本:
// 获取表单参数 def docType = request.formParameter.get("document_type") def docNumber = request.formParameter.get("document_number") // 根据参数生成响应 if (docType == "CC" && docNumber.length() == 10) { response.status = 200 response.contentType = "application/json" response.body = """{"status": "success", "result": {"valid": true, "full_name": "Ruben Dario"}}""" } else if (docType == "CE") { response.status = 200 response.contentType = "application/json" response.body = """{"status": "success", "result": {"valid": false, "reason": "Expired document"}}""" } else { response.status = 400 response.contentType = "application/json" response.body = """{"status": "error", "message": "Invalid parameters"}""" }
保存脚本后,所有指向该Mock接口的请求都会执行这段逻辑,根据表单参数返回动态生成的响应。
3. 验证配置
完成配置后,用curl或API测试工具发送请求验证:
curl -X POST "http://你的CastleMock地址/mock/truora/identity-verification" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "document_type=CC&document_number=1000000000"
检查返回的响应是否符合参数对应的预期结果。
内容的提问来源于stack exchange,提问作者Ruben Dario Guarnizo Martinez
相关产品推荐
相关产品推荐

