Chcąc zapewnić poprawną współpracę mikroserwisów, wpadamy często w pułapkę testów, którym nie ufamy lub które są zbyt trudne w utrzymaniu. Testy kontraktowe to alternatywne podejście oferujące z jednej strony szybką informację zwrotną a z drugiej strony poziom pewności niedostępny dla testów izolowanych. To nie jedyne korzyści: z ich wykorzystaniem możemy przyspieszyć nasz cykl pracy oraz lepiej zrozumieć, jak połączone są nasze systemy. W trakcie prezentacji zobaczymy minimalny działający przykład napisany w Kotlinie przy użyciu frameworku Pact, prześledzimy, co możemy zyskać w zależności od nakładu pracy oraz spojrzymy szerzej na ekosystem testów kontraktowych, porównując Pact z biblioteką Spring Cloud Contract.
Slajdy z prezentacji na konferencji DynamIT 2019.
4. Planner app
How many forklifts to move
supplies arriving tomorrow?
Supplies system
tomorrow: 300 apples,
45 kg
tomorrow: 40 bottles of
water, 60 kg
+2 days: 600 carrots,
36 kg
27. Generated test
Base class you need to write
public class ManySuppliesTest extends ContractVerifierBase {
@Test
public void validate_returnsManySupplies() throws Exception {
Response response = given().spec(request)
.queryParam("day","2018-12-23").get("/supplies");
// ...
assertThatJson(parsedJson).array()
.contains("['status']").isEqualTo("CANCELED");
abstract class ContractVerifierBase {
@Before
fun startServer() {
RestAssured.port = 9053
MyServer().start(9053)
}
32. NO TIMEFOR THIS —I'MTOO BUSY
writing tests for code sending HTTP requests
asking other team what data they expect
thinking about edge cases
testing my DB queries return what I want
33. CONTRACTTESTS
test correct form of Consumer requests
document requests/responses
share test data and edge cases
verify full stack of Provider
35. ATTRIBUTION
Photo by on Unsplash
Icons used under CC BY 3.0 license are made by
Explosion icon by
Question mark icon by
dylan nolte
icon nder.com/user/atifarshad
icon nder.com/im04
icon nder.com/CreativeCorp
icon nder.com/korawan_m
icon nder.com/Field5