Pact(JVM)最小API测试示例:无实际客户端如何验证REST接口返回200
Pact Framework 测试实现方案
200状态码验证实现
你的现有配置存在错误:PactProviderRuleMk2 是用于启动本地Mock Provider服务的组件,不需要直接指向真实的cataas地址,你需要先定义契约交互,再通过调用本地Mock服务完成消费者侧验证。
完整代码示例
import au.com.dius.pact.consumer.Pact; import au.com.dius.pact.consumer.PactProviderRuleMk2; import au.com.dius.pact.consumer.PactVerification; import au.com.dius.pact.consumer.dsl.PactDslWithProvider; import au.com.dius.pact.model.RequestResponsePact; import org.junit.Rule; import org.junit.Test; import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import static org.junit.Assert.assertEquals; public class CatApiConsumerTest { // Mock Provider启动在本地8080端口 @Rule public PactProviderRuleMk2 mockProvider = new PactProviderRuleMk2("test_provider", "localhost", 8080, this); // 定义契约交互:GET /cat请求返回200状态码 @Pact(consumer = "test_consumer") public RequestResponsePact defineCatApiContract(PactDslWithProvider builder) { return builder .given("cat service is available") .uponReceiving("GET request to fetch cat image") .path("/cat") .method("GET") .willRespondWith() .status(200) .toPact(); } @Test @PactVerification public void verifyCatApiReturn200() throws IOException, InterruptedException { // 模拟消费者调用本地Mock服务 HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("http://localhost:8080/cat")) .GET() .build(); HttpResponse<Void> response = HttpClient.newHttpClient() .send(request, HttpResponse.BodyHandlers.discarding()); // 验证状态码符合预期 assertEquals(200, response.statusCode()); } }
流程说明
- 即使没有真实的前端客户端,你也可以用上述测试类模拟消费者调用逻辑,完成契约定义
- 测试执行通过后会自动生成Pact契约文件,后续你可以用该契约文件对真实的
https://cataas.com服务做Provider侧验证,确认真实服务返回符合契约要求
入门学习指引
- 首先掌握消费者驱动契约的核心概念,明确消费者测试、Provider验证两个核心环节的分工与作用
- 可以从简单的GET请求场景入手,先跑通完整的契约生成、验证流程,再逐步扩展带请求参数、响应体匹配的复杂场景
- 练习阶段可以先不用对接真实服务,先完成Mock端的测试流程,再尝试对接真实服务做校验
内容的提问来源于stack exchange,提问作者nomeal
相关产品推荐
相关产品推荐

