Middle+
Jaké jsou vlastnosti testování mikroservis na úrovni komponent a modulů ve srovnání s testováním monolitických aplikací?
sobes.tech AI
Odpověď od AI
Testování mikroservis na úrovni komponent a modulů se zaměřuje na izolaci a interakci jednotlivých služeb, na rozdíl od testování monolitických aplikací, kde je testována celá kódová základna.
Charakteristiky testování mikroservis:
- Izolace služeb: Testování každé mikroservisy samostatně, nezávisle na ostatních. To umožňuje rychle odhalit problémy v konkrétní službě.
- Testování kontraktů: Kontrola interakce mezi službami, aby bylo zajištěno, že správně vyměňují data a odpovídají předem definovaným API kontraktům. Oblíbené nástroje: Pact.
- Testování integrace: Kontrola interakce více mikroservis a externích závislostí (databáze, fronty zpráv). Složitost spočívá ve správě mnoha závislostí.
- Správa testovacích dat: Generování a udržování testovacích dat pro každou službu zvlášť, s ohledem na závislosti na jiných službách.
- Orchestrace testů: Koordinace spuštění testů pro různé mikroservisy, zejména při integračním testování.
- Testování odolnosti a elasticity: Testování chování služeb při selháních jiných služeb nebo při vysoké zátěži.
- Testovací infrastruktura: Vyžaduje složitější testovací infrastrukturu pro nasazení a správu mnoha mikroservis a jejich prostředí.
- Testování bezpečnosti: Zaměření na kontrolu autentifikace, autorizace a dalších aspektů bezpečnosti na úrovni každé služby a jejich interakcí.
Porovnání s monolitem:
| Aspekt | Monolitická aplikace | Mikroservisy |
|---|---|---|
| Rozsah testování | Testování celé kódové základny jako celku. | Testování každé služby izolovaně, následně jejich integrace. |
| Závislosti | Vnitřní závislosti v rámci jedné kódové základny. | Externí síťové závislosti mezi nezávislými službami. |
| Testovací data | Mohou být centralizovaná. | Vyžadují správu pro každou službu zvlášť, s ohledem na závislosti. |
| Integrace | Testování integrace modulů uvnitř jednoho procesu. | Testování interakce služeb přes síť. |
| Odolnost vůči chybám | Méně relevantní na úrovni modulů, více na úrovni celé aplikace. | Kriticky důležité testovat chování při selháních jednotlivých služeb. |
| Složitost | Testování může být jednodušší z hlediska infrastruktury, ale složitější z hlediska izolace. | Testování je složitější z hlediska infrastruktury a správy závislostí, ale jednodušší z hlediska izolace služeb. |
Příklad Contract Test s použitím Pact:
// pact_broker/pacts/consumer-producer/latest.json
{
"consumer": {
"name": "MyConsumer"
},
"provider": {
"name": "MyProducer"
},
"interactions": [
{
"description": "Požadavek na uživatele podle ID",
"request": {
"method": "GET",
"path": "/users/123",
"headers": {
"Accept": "application/json"
}
},
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json"
},
"body": {
"id": 123,
"name": "John Doe"
}
}
}
],
"metadata": {
"pactRust": {
"version": "1.0.0"
},
"pactSpec": {
"version": "3.0.0"
}
}
}
Tento JSON příklad popisuje kontrakt mezi spotřebitelem (MyConsumer) a poskytovatelem (MyProducer), který specifikuje očekávaný požadavek a odpověď pro získání uživatele podle ID. Spotřebitel bude generovat podobný kontrakt na své straně, a poskytovatel ověří, že jeho API odpovídá tomuto kontraktu.