Sobes.tech
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.