TESTING
MICROSERVICE
ARCHITECTURE
ŁUKASZ ROSŁONEK
ŁUKASZ ROSŁONEK
# Senior Test Engineer
# TestDetective.com
MONOLITH ARCHITECTURE
ISSUES:
# application scalability
# technology stack commitment
# reversed learning curve
# development process
# single point of failure
MICROSERVICE ARCHITECTURE
PROS:
# independent development
# continuous deployment
# scalability
# technology diversity
# fault isolation
WHAT’S THE RUSH ?
HTTP REQUEST -> RESPONSE
client
db
ValidationService/NewUser
REST / JSON API
PUT/NewUser
{
name: “John”,
surname: “Snow”,
address: {
city: “Winterfell”,
land: “Seven Kingdoms”
}
}
UserService:
201 Created
{
UserId: “1”
}
WEBSERVICE ANATOMY
ORM
API
DOMAIN
SERVICE
EXTERNAL
CLIENTS
DB
TESTING STRATEGIES
# unit tests
# integration tests
# contract tests
# end-to-end tests
UNIT TESTING
ORM
API
DOMAIN
SERVICE
EXTERNAL
CLIENTS
WHAT’S THE PROBLEM ?
INTEGRATION TESTING
ORM
API
DOMAIN
SERVICE
EXTERNAL
CLIENTS
DB
WHAT’S THE PROBLEM ?
CONTRACT TESTING
END-TO-END TESTS
END-2-END TESTING
CHALLENGES
# test releases stability
# network calls issues
# external services debugging
END-2-END TESTS PATTERNS
# as few as possible
# focus on user perspective
# user perspective != GUI
# test environment as code
TOOLBOX
WHY MOCKS ?
WIREMOCK
WHY TEST CONTRACTS ?
CDT TESTING - ACCUREST
Validation
Service
/NewUser
producing stubs
API
stubs
run test
against
WHY E2E TESTS ?
E2E TEST – REST ASSURED
public void getUserData(String userId) {
given().
contentType("application/json").
when().
get("/user/" + userId).
then().
body(containsString("id")).
statusCode(200);
}
@Test
public void shouldRetrieveUserData() {
RestService service = new RestService();
service.getUserData("1");
}
Q&A?
# lukasz.roslonek@gmail.com
# twitter.com/TestDetective
# www.testdetective.com

Testing Microservices Architecture

Editor's Notes

  • #4 DEVELOPMENT -- SPAGETTI
  • #5  -martin fowler, 2pizze -mbank -listingi, kupowanie -
  • #6 -dowolna konfa->mikroserwisy -nie idealne, ale najlepiej sie dostosowuja -nie tylko nowe, stare sie przepisuja -facebook
  • #7 -zagadka: synchroniczne czy asynchroniczne?
  • #8 -wysylamy post, dostajemy 201 -protokol http – 8 metod: (GET,POST,PUT,DELETE,HEAD,TRACE,OPTIONS,CONNECT) -REST to 4 glowne -kody http -co sie dzieje w naszym przykladzie? -request->dispacher servlet->kontroller->serwis->klient zewn->baza->response
  • #10 -wszyscy wiedza ze TDD dobre -kazdy build tool wspiera oraz IDE -unit testy-> zwykle tylko metody -jak inaczej?
  • #11 -pojedyncze metody -mocki do wszystkiego innego
  • #12 -pojedyncze metody ok -razem nie dzialaja
  • #13 -nowe podejscie: testy integracyjne -main, test, integration -dla naszego przykladu: (request i response, wywolanie ext client, serializacja zapis do bazy)
  • #14 -rozproszone aplikacje -> komunikacja -spodziewana konkretna odpowiedz -nasza aplikacja spodziewa sie metody, kodu i odpowiedzi -jesli zmienia na post -> wyjebka u nas
  • #15 -kontrakt -> tez go testujemy -contract driven testing -co to kontrakt -ciezko pilnowac samemu, pojawily się narzedzia
  • #16 -niby nic nowego -w mikroserwisach duzo problemow ale tez ciekawe wyzwania -niestabilne releasy -wywolania sieciowe -> sieciowe problemy -debugowanie zewnetrznych aplikacji -srodowiska integracyjne -> kasa, skalowanie -James Lewis, e2e on production -czesto nierealne, raty -testy e2e wazne, trzeba robic