Sobes.tech
Middle+

Aké sú vlastnosti testovania mikroservisov na úrovni komponentov a modulov v porovnaní s testovaním monolitických aplikácií?

sobes.tech AI

Odpoveď od AI

Testovanie mikroslužieb na úrovni komponentov a modulov sa zameriava na izoláciu a interakciu jednotlivých služieb, na rozdiel od testovania monolitických aplikácií, kde testovanie pokrýva celý kódový základ ako celok.

Špecifiká testovania mikroslužieb:

  • Izolácia služieb: Testovanie každej mikroslužby samostatne, nezávisle od ostatných. To umožňuje rýchlo odhaliť problémy v konkrétnej službe.
  • Testovanie kontraktov (Contract Testing): Kontrola interakcie medzi službami, aby sa zabezpečilo, že správne vymieňajú dáta a zodpovedajú vopred definovaným API kontraktom. Populárne nástroje: Pact.
  • Testovanie integrácie: Kontrola interakcie viacerých mikroslužieb medzi sebou a s vonkajšími závislosťami (databázy, fronty správ). Složitosti spočívajú v riadení množstva závislostí.
  • Správa testovacích dát: Potreba generovať a udržiavať testovacie dáta pre každú službu samostatne, s prihliadnutím na ich možné závislosti od dát iných služieb.
  • Orchestrace testov: Koordinácia spúšťania testov pre rôzne mikroslužby, najmä pri integračnom testovaní.
  • Testovanie odolnosti voči chybám a elasticity: Kontrola správania služieb pri zlyhaniach iných služieb alebo pri vysokej záťaži.
  • Infrastruktúra testovania: Vyžaduje zložitejšiu testovaciu infraštruktúru na nasadenie a správu množstva mikroslužieb a ich prostredí.
  • Testovanie bezpečnosti: Zameranie na overovanie autentifikácie, autorizácie a ďalších aspektov bezpečnosti na úrovni každej služby a ich interakcie.

Porovnanie s monolitom:

Aspekt Monolitická aplikácia Mikroslužby
Objem testovania Testovanie celého kódového základu ako celku. Testovanie každej služby izolovane, a následne ich integrácie.
Závislosti Vnútorné závislosti v rámci jedného kódového základu. Vonkajšie sieťové závislosti medzi nezávislými službami.
Testovacie dáta Môžu byť centralizované. Vyžadujú správu pre každú službu samostatne, s prihliadnutím na závislosti.
Integrácia Testovanie integrácie modulov v rámci jedného procesu. Testovanie interakcie služieb cez sieť.
Odolnosť voči chybám Menej relevantné na úrovni modulov, viac na úrovni celej aplikácie. Kriticky dôležité testovať správanie pri zlyhaniach jednotlivých služieb.
Zložitosť Testovanie môže byť jednoduchšie z hľadiska infraštruktúry, ale zložitejšie z hľadiska izolácie. Testovanie je zložitejšie z hľadiska infraštruktúry a správy závislostí, ale jednoduchšie z hľadiska izolácie služieb.

Príklad Contract Test s použitím Pact:

// pact_broker/pacts/consumer-producer/latest.json
{
  "consumer": {
    "name": "MyConsumer"
  },
  "provider": {
    "name": "MyProducer"
  },
  "interactions": [
    {
      "description": "Žiadosť o používateľa podľa 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 príklad JSON opisuje kontrakt medzi spotrebiteľom (MyConsumer) a poskytovateľom (MyProducer), špecifikujúci očakávanú požiadavku a odpoveď na získanie používateľa podľa ID. Spotrebiteľ bude generovať podobný kontrakt na svojej strane, a poskytovateľ overí, že jeho API zodpovedá tomuto kontraktu.