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 адпавядае гэтаму кантракту.