Pact Workshop JVM Spring 教程
项目介绍
Pact Workshop JVM Spring 是一个示例项目,旨在通过实践帮助开发者理解和使用 Pact 在 JVM 环境中进行消费者驱动的契约测试。该项目基于 Spring Boot,展示了如何编写消费者和提供者的测试,并通过 Pact 契约文件进行验证。
项目快速启动
环境准备
确保你已经安装了以下工具:
- Java 8 或更高版本
- Gradle
- Git
克隆项目
git clone https://github.com/pact-foundation/pact-workshop-jvm-spring.git
cd pact-workshop-jvm-spring
构建项目
./gradlew build
运行应用
./gradlew bootRun
示例代码
以下是一个简单的消费者测试示例:
import au.com.dius.pact.consumer.MockServer;
import au.com.dius.pact.consumer.Pact;
import au.com.dius.pact.consumer.dsl.DslPart;
import au.com.dius.pact.consumer.dsl.PactDslJsonBody;
import au.com.dius.pact.consumer.dsl.PactDslWithProvider;
import au.com.dius.pact.consumer.junit5.PactConsumerTestExt;
import au.com.dius.pact.consumer.junit5.PactTestFor;
import au.com.dius.pact.model.RequestResponsePact;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import java.io.IOException;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
@ExtendWith(PactConsumerTestExt.class)
@PactTestFor(providerName = "Our Provider", port = "8080")
public class ConsumerPactTest {
@Pact(consumer = "Our Consumer")
public RequestResponsePact createPact(PactDslWithProvider builder) {
DslPart body = new PactDslJsonBody()
.stringType("name", "test")
.numberType("id", 1234);
return builder
.given("test state")
.uponReceiving("a request for test")
.path("/test")
.method("GET")
.willRespondWith()
.status(200)
.body(body)
.toPact();
}
@Test
@PactTestFor(pactMethod = "createPact")
void test(MockServer mockServer) throws IOException, InterruptedException {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(mockServer.getUrl() + "/test")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
assertThat(response.statusCode(), is(200));
assertThat(response.body(), is("{\"name\":\"test\",\"id\":1234}"));
}
}
应用案例和最佳实践
应用案例
Pact Workshop JVM Spring 项目可以应用于以下场景:
- 微服务架构中的服务间通信测试
- 确保消费者和提供者之间的接口契约一致性
- 自动化测试流程中的契约测试环节
最佳实践
- 明确契约:在编写测试前,明确消费者和提供者之间的接口契约。
- 自动化测试:将契约测试集成到持续集成(CI)流程中,确保每次代码提交都能自动验证契约。
- 版本管理:使用 Pact Broker 管理契约文件的版本,确保不同环境下的契约一致性。
典型生态项目
Pact Workshop JVM Spring 项目与以下生态项目紧密相关:
- Pact Broker:用于管理和共享契约文件的服务。
- Pact JVM:Pact 在 JVM