Contract Testing
Microservices ARCHITECTURE mein, EK SERVICE (CONSUMER), EK DUSRI SERVICE (PROVIDER) ki, API PAR, DEPEND karti hai. TRADITIONAL, INTEGRATION TESTS, SLOW aur BRITTLE HOTE hain (POORE SYSTEM, EK SAATH, RUN karna PADТA hai). CONTRACT TESTING (jaise Pact), EK, LIGHTER-WEIGHT, ALTERNATIVE hai.
CONSUMER, APNI EXPECTATIONS (jaise, "MUJHE, /products/1 SE, EK name FIELD, STRING TYPE mein, CHAHIYE"), EK "CONTRACT" FILE mein, DEFINE karta hai. PROVIDER, APNI CI PIPELINE mein, IS CONTRACT ke, AGAINST, TEST hota hai — AGAR, PROVIDER, KUCH BREAK karta hai, JO, CONSUMER ko, ZAROORI hai, TEST, FAIL ho jaata hai — POORA, END-TO-END, SYSTEM, RUN kiye BINA.
// Consumer side — expectation DEFINE karna (Pact):
@Pact(consumer = "OrderService", provider = "ProductService")
public RequestResponsePact createPact(PactDslWithProvider builder) {
return builder
.given("product with id 1 exists")
.uponReceiving("a request for product 1")
.path("/api/products/1")
.method("GET")
.willRespondWith()
.status(200)
.body(newJsonBody(o -> o.stringType("name").numberType("price")).build())
.toPact();
}
// Provider side, CI mein, IS CONTRACT ke against, AUTOMATICALLY, VERIFY hota hai- Contract testing (Pact) = consumer expectations, DEFINE + provider, INKE AGAINST, verify hota hai
- Full, end-to-end, integration tests se, LIGHTER, FASTER
- Microservices architectures mein, "integration confidence" deता hai
PROVIDER, TEAM, APNI, CI, PIPELINE mein, EK, "PACT BROKER" SE, SAARE, PUBLISHED, CONTRACTS, FETCH karti hai, aur, HAR, EK ke, AGAINST, AUTOMATICALLY, VERIFY hoती hai — AGAR, KOI, CONTRACT, BREAK hota hai, BUILD, FAIL ho jaata hai, DEPLOYMENT SE, PEHLE.
Pact CLI ka, can-i-deploy COMMAND, DEPLOYMENT SE, PEHLE, CHECK karta hai, KI, CURRENT, VERSION (CONSUMER YA, PROVIDER), COMPATIBLE hai, YA, NAHI, DOOSRI, SIDE ki, DEPLOYED, VERSION SE — INCOMPATIBLE, DEPLOYMENTS, PEHLE, HI, ROK diye JAATE hain.
- can-i-deploy = PRE-deployment, compatibility check
- Incompatible changes, DEPLOYMENT SE, PEHLE, HI, CATCH ho jaate hain