独立版MockServer:应在何处设置请求预期?
嗨,我来帮你理清MockServer定义请求预期的几种实用方式,都是官方推荐的方法,你可以根据自己的场景选择:
1. 通过REST API直接配置
这是最灵活的方式,你可以用curl、Postman或者任何HTTP客户端,向MockServer的管理端口(就是你启动时指定的serverPort,这里是1080)发送请求来添加预期规则。
比如你想让MockServer在收到GET /api/user/123请求时,返回一个JSON格式的用户信息,就可以执行这个curl命令:
curl -X PUT "http://localhost:1080/mockserver/expectation" \ -d '{ "httpRequest": { "method": "GET", "path": "/api/user/123" }, "httpResponse": { "statusCode": 200, "body": "{\"id\":123,\"name\":\"John Doe\"}", "headers": { "Content-Type": ["application/json"] } } }'
执行后,MockServer就会记住这个规则:只要匹配到对应的GET请求,就返回你定义的200响应和JSON内容。
2. 使用Java客户端库配置
如果你的测试代码是Java编写的,直接用MockServer的客户端库来定义预期会更方便,能把Mock配置和测试代码整合在一起。
首先在你的Maven项目里添加依赖(对应你用的5.3.0版本):
<dependency> <groupId>org.mockserver</groupId> <artifactId>mockserver-client-java</artifactId> <version>5.3.0</version> <scope>test</scope> </dependency>
然后写一段配置代码,比如定义一个POST请求的响应规则:
import org.mockserver.client.MockServerClient; import org.mockserver.model.HttpRequest; import org.mockserver.model.HttpResponse; public class MockSetup { public static void main(String[] args) { // 连接到本地1080端口的MockServer MockServerClient mockServer = new MockServerClient("localhost", 1080); // 定义预期:当收到指定的POST请求时,返回创建成功的响应 mockServer.when( HttpRequest.request() .withMethod("POST") .withPath("/api/user") .withBody("{\"name\":\"Jane Doe\"}") ).respond( HttpResponse.response() .withStatusCode(201) .withBody("{\"id\":456,\"name\":\"Jane Doe\"}") .withHeader("Content-Type", "application/json") ); } }
运行这段代码后,MockServer就会生效这个规则,后续收到匹配的POST请求就会返回对应的响应。
3. 通过JSON文件批量加载预期
如果有大量的预期规则需要配置,把它们写到JSON文件里批量加载会更高效。
先创建一个expectations.json文件,把所有规则写进去:
[ { "httpRequest": { "method": "GET", "path": "/api/health" }, "httpResponse": { "statusCode": 200, "body": "OK" } }, { "httpRequest": { "method": "DELETE", "path": "/api/user/123" }, "httpResponse": { "statusCode": 204 } } ]
然后启动MockServer的时候,加上-initializationJsonPath参数指定这个文件的路径:
java -jar ./mockserver-netty-5.3.0-jar-with-dependencies.jar \ -serverPort 1080 \ -proxyPort 1090 \ -proxyRemotePort 80 \ -proxyRemoteHost www.mock-server.com \ -initializationJsonPath ./expectations.json
这样MockServer启动后会自动加载文件里的所有预期规则,不用一个个手动配置。
另外要注意:MockServer的预期默认是存在内存里的,重启后就会消失。如果需要持久化,要么每次启动都加载JSON文件,要么在测试代码里用客户端库重新配置一遍。
内容的提问来源于stack exchange,提问作者Rk Ramakrishnan

