Sobes.tech
Middle+

Хусусиятҳои санҷиши микросервисҳо дар сатҳи компонентҳо ва модулҳо дар муқоиса бо санҷиши барномаҳои монолитӣ чӣ гунаанд?

sobes.tech AI

Ҷавоб аз AI

Тэставанне мікраслужбаў на ўзроўні кампанентаў і модуляў засяроджваецца на ізаляцыі і ўзаемадзеянні асобных сэрвісаў, у адрозненне ад тэставання маналітных прыкладанняў, дзе тэставанне ахоплівае ўвесь кодавы базу цалкам.

Асаблівасці тэставання мікраслужбаў:

  • Ізаляванне сэрвісаў: Тэставанне кожнай мікраслужбы асобна, незалежна ад іншых. Гэта дазваляе хутка выяўляць праблемы ў канкрэтным сэрвісе.
  • Тэставанне кантрактаў (Contract Testing): Праверка ўзаемадзеяння паміж сэрвісамі, каб пераканацца, што яны правільна абменьваюцца дадзенымі і адпавядаюць загадзя вызначаным API-кантрактах. Папулярныя інструменты: Pact.
  • Тэставанне інтэграцыі: Праверка ўзаемадзеяння некалькіх мікраслужбаў паміж сабой і з знешнімі залежнасцямі (базамі дадзеных, чаргамі паведамленняў). Складанасць заключаецца ў кіраванні мноствам залежнасцяў.
  • Кіраванне тэставымі дадзенымі: Патрабаванне генерыраваць і падтрымліваць тэставыя дадзеныя для кожнага сэрвісу асобна, улічваючы іх магчымыя залежнасці ад дадзеных іншых сэрвісаў.
  • Аркестрацыя тэстаў: Каардынацыя запуску тэстаў для розных мікраслужбаў, асабліва пры інтэграцыйным тэставанні.
  • Тэставанне адмовастойкасці і эластычнасці: Праверка паводзін сэрвісаў пры збоях іншых сэрвісаў або высокай нагрузцы.
  • Інфраструктура тэставання: Патрабуе больш складаную тэставую інфраструктуру для разгортвання і кіравання мноствам мікраслужбаў і іх асяроддзям.
  • Тэставанне бяспекі: Засяроджванне на праверцы аўтэнтыфікацыі, аўтарызацыі і іншых аспектаў бяспекі на ўзроўні кожнага сэрвісу і пры іх узаемадзеянні.

Параўнанне з маналітам:

Аспект Маналітнае прыкладанне Мікраслужбы
Аб'ём тэставання Тэставанне ўсёй кодавай базы як аднаго цэлага. Тэставанне кожнай службы ізалявана, а затым іх інтэграцыі.
Залежнасці Унутраныя залежнасці ўнутры аднаго кодавага базу. Знешнія сеткавыя залежнасці паміж незалежнымі сэрвісамі.
Тэставыя дадзеныя Могуць быць цэнтралізаваныя. Патрабуюць кіравання для кожнай службы асобна, улічваючы залежнасці.
Інтэграцыя Тэставанне інтэграцыі модуляў унутры аднаго працэсу. Тэставанне ўзаемадзеяння сэрвісаў па сетцы.
Адмовастойнасць Менш актуальна на ўзроўні модуляў, больш на ўзроўні ўсёй праграмы. Крытычна важна тэставаць паводзіны пры збоях асобных сэрвісаў.
Складанасць Тэставанне можа быць прасцей з пункту гледжання інфраструктуры, але складаней з пункту гледжання ізаляцыі. Тэставанне складаней з пункту гледжання інфраструктуры і кіравання залежнасцямі, але прасцей з пункту гледжання ізаляцыі сэрвісаў.

Прыклад Contract Test з выкарыстаннем Pact:

// pact_broker/pacts/consumer-producer/latest.json
{
  "consumer": {
    "name": "MyConsumer"
  },
  "provider": {
    "name": "MyProducer"
  },
  "interactions": [
    {
      "description": "Запыт на карыстальніка па 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"
    }
  }
}

Гэты прыклад JSON апісвае кантракт паміж спажыўцом (MyConsumer) і пастаўшчыком (MyProducer), спецыфікуючы чаканы запыт і адказ для атрымання карыстальніка па ID. Спажывец будзе генерыраваць падобны кантракт на сваёй баку, а пастаўшчык — праверыць, што яго API адпавядае гэтаму кантракту.