Testing av mikrotjenester - en nybegynnerveiledning

Testing av mikrotjenester blir stadig viktigere ettersom mange av de nye applikasjonene bygges ved hjelp av Microservices-arkitektur.

Før vi kan se hvordan vi kan teste mikrotjenester, må vi først forstå hva de er.



Hva er mikrotjenester?

Microservice er definert som en arkitektonisk stil, en tilnærming til å utvikle en enkelt applikasjon som en pakke med tjenester. Hver tjeneste er definert av egenskapene, hvorav noen er:


  • Kjører i sin prosess.
  • Kommunisere med en lett mekanisme ofte med en HTTP-ressurs-API.
  • Uavhengig distribusjon av et helautomatisk maskineri.
  • Bruker forskjellige programmeringsspråk / teknologier / DB.
  • Bruker forskjellige datalagringsteknologier.

Den arkitektoniske stilen for mikroservice innebærer å utvikle enkeltapplikasjoner som kan fungere sammen som en serie små tjenester, som hver kjører i sin individuelle prosess og kommuniserer med lette mekanismer, for eksempel et HTTP-ressurs-API. Disse tjenestene krever minimum sentralisert administrasjon, bruker forskjellige datalagringsteknologier og kan skrives på forskjellige programmeringsspråk. Disse tjenestene, bygget rundt forretningsfunksjoner, kan også distribueres uavhengig av maskiner som støtter helautomatisk distribusjon.

Microservices egenskaper:


  • Organisert rundt forretningsevne,
  • Automatisert distribusjon,
  • Intelligens i endepunktene snarere enn i servicebussen,
  • Desentralisert kontroll av språk og data.


Hvordan er mikrotjenester annerledes enn SOA

  • Service Orientert Arkitektur (SOA): et arkitektonisk mønster i design av programvare der applikasjonskomponenter gir tjenester til andre komponenter via en kommunikasjonsprotokoll, vanligvis over et nettverk.
  • Mikrotjenester : En programvarearkitekturstil der komplekse applikasjoner er sammensatt av små, uavhengige prosesser som kommuniserer med hverandre ved hjelp av språk-agnostiske APIer

Eksempel:

Hvis Uber ble bygget med en SOA, kan tjenestene deres være:

  • GetPaymentsAndDriverInformationAndMappingDataAPI
  • AuthenticateUsersAndDriversAPI

Hvis Uber ble bygget med mikrotjenester, kan API-ene deres være mer som:

  • SubmitPaymentsService
  • GetDriverInfoService
  • GetMappingDataService
  • AuthenticateUserService
  • AuthenticateDriverService

Flere API-er, mindre ansvarsoppgaver.




Hvordan teste Microservices

Enhetstester

Enhetstester utøver de små programvarene, for eksempel en funksjon i applikasjonen for å avgjøre om de produserer ønsket utgang gitt et sett med kjente innganger.

Det er verdt å merke seg at enhetstesting alene ikke gir garantier for systemets oppførsel. Vi trenger andre typer tester for mikrotjenester.

Komponenttester

Når vi har utført enhetstesting av alle funksjoner innen en mikroservice, må vi teste selve mikroservicen.

Vanligvis vil en applikasjon være sammensatt av et antall mikrotjenester, så for å teste isolert, må vi spotte de andre mikrotjenestene.


Komponenttester vil også teste samspillet mellom mikroservice og dets avhengigheter, for eksempel en database, alt sammen som en enhet.

Integrasjonstester

Etter at vi har bekreftet funksjonaliteten til hver mikrotjeneste, må vi teste kommunikasjonen mellom tjenestene. En integrasjonstest verifiserer kommunikasjonsstiene og samspillet mellom komponenter for å oppdage grensesnittfeil

Tjenesteanrop må foretas med integrering til eksterne tjenester, som skal inkludere feil- og suksesstilfeller, og dermed validerer integrasjonstesting at systemet fungerer sømløst og at avhengighet mellom tjenestene er tilstede som forventet.

Kontrakttester

Kontrakttester bekrefter interaksjoner ved grensen til en ekstern tjeneste som hevder at den oppfyller kontrakten som forventes av en forbrukende tjeneste.


Denne typen testing skal behandle hver tjeneste som en svart boks, og alle tjenestene må kalles uavhengig, og svarene deres må verifiseres.

En “kontrakt” er hvordan et serviceanrop (der det forventes et spesifikt resultat eller en spesifikk effekt for visse innganger) ved forbrukerkontrakttesting. Hver forbruker må motta de samme resultatene fra en tjeneste over tid, selv om tjenesten endres. Det bør være fleksibilitet for å legge til mer funksjonalitet etter behov i svarene senere. Imidlertid må disse tilleggene ikke bryte tjenestefunksjonaliteten.

End-to-End-tester

Rollen til end-to-end-tester er å sørge for at alt knytter seg sammen, og det er ingen uenigheter på høyt nivå mellom mikrotjenestene.

End-to-end-tester bekrefter at et system oppfyller eksterne krav og oppnår sine mål, og tester hele systemet, fra ende til slutt.


Testene bekrefter også at hele prosessen og brukerstrømmene fungerer som de skal, inkludert all service og DB-integrasjon. Grundig testing av operasjoner som påvirker flere tjenester sikrer at systemet fungerer sammen som en helhet og tilfredsstiller alle krav.



Eksempel på testing av mikrotjenester

La oss ta en mikroservice TIL det avhenger av to andre tjenester B & C . Du må etablere et isolert miljø der staten TIL , B og C er veldefinert og kan settes opp flere ganger.

For eksempel tilstand / lagring av B og C skal forhåndsinitialiseres. Etter det kjører du bare et sett med tester som tester APIer for mikroservice TIL ved bruk av vanlig REST / WebService-sett med testverktøy, f.eks. SÅPE eller Chakram eller enkelt xUnit-alternativ for programmeringsspråket ditt.

Mock alle jevnaldrende tjenester API er avhengig av å bruke restito. Andre alternativer inkluderer hviledriver, WireMock og Mochito.

Den åpenbare utfordringen er de hånende / falske API-ene fra tredjeparter når du gjør integreringstesting av mikrotjenester. Du kan bruke hvilket som helst av mocking-verktøyene som er nevnt ovenfor, bare behandle mocks som en del av testutstyret vårt og sørg for at du er oppdatert med nye API-utgivelser.