GH GambleHub

Санҷишҳои воҳиди vs интегратсия

1) Чаро намудҳои санҷишро фарқ кунед

Гранулясияи дурусти санҷишҳо рушдро пешгӯишаванда мегардонад: камбудиҳои мантиқии воҳидро зуд ва арзон ба даст меоранд; Интегратсия бастаҳои модулҳо, нақлиёти воқеӣ ва "ширешро тафтиш мекунад. "Якҷоя, онҳо регрессияро коҳиш медиҳанд ва релизҳоро суръат мебахшанд.

2) Таърифҳо ва ҳудудҳо

Воҳиди-тест

Воҳиди хурди рафторро (функсия, синф, ҳолати истифода) дар алоҳидагӣ месанҷад.
Вобастагиҳои беруна иваз карда мешаванд (масхара/стуб/қалбакӣ).
Тез (ms-даҳҳо ms), детерминистӣ.

Санҷиши ҳамгироӣ

Мутақобилаи якчанд ҷузъҳои воқеиро тафтиш мекунад: базаи маълумотҳо, брокер (Kafka/Rabbit- MQ), HTTP/GRPC, системаи файлӣ, кэш.
Mocs ҳадди аққал, протоколҳои воқеӣ.
Сусттар (садҳо мс-сония), дар дастгирӣ гаронтар аст.

💡 Қоида: ҳамин ки "мо аз раванд/васлаки/DB мегузарем" - мо аллакай дар обҳои ҳамгироӣ ҳастем.

3) Озмоиши пирамида (на шохи ях)

Бунёд: Воҳиди (шумораи 70-80%) - арзон, зуд.
Қабати миёна: Интегратсия/Компонент (15-25%) - роҳҳо ва шартномаҳои муҳим.
Боло: E2E/UX/Exploratory (5-10%) - ҳадди аққал.
Дар тарафҳо: Таҳлили статикӣ/Санҷиши Lint/Type ва санҷиши мутатсия ҳамчун тақвиятдиҳандаи сифат.

4) Шӯъба ва чиро ба ҳамгироӣ бояд дод

ВазифаНамудиБо кадом сабаб
Мантиқи тозаи корӣ (тасдиқҳо, ҳисобҳои комиссия, идемпотенсияи асосӣ)ВоҳидиАрзишҳои зуд, муайянкунанда ва бисёр сарҳадӣ
Харитаҳо DTO↔model, сериализатсия, таҳлилВоҳидиБисёр ҳолатҳо, ҷудо кардан осон аст
Репозиторияҳо/дархостҳои ORMИнтегратсия (s test DB)Нозукиҳои "рафтор" ORM ва SQL танҳо дар пойгоҳи додаҳо намоёнанд
Шартномаи HTTP (статусҳо, сарлавҳаҳо, схемаҳо)Интегратсия/шартномаБа стеки зинда HTTP + JSON Schema/API лозим аст
Saga/Outbox, Retras, МӯҳлатҳоИнтегратсия/компонентВақт, муомилот, брокер
Меъёри v дарвозаИнтегратсияРедис/иёлот/танаффус
Вебхукҳои пардохт (HMAC, такрор)Интегратсия/CDCИмзоҳо, соатҳо, хусусиятҳои шабака

5) Маълумот ва ислоҳот

Воҳиди

Афсонаҳо/бинокорон (усулҳои завод).
Санҷишҳои ҷадвалӣ барои арзишҳои сарҳадӣ.
Равиши ба амвол асосёфта барои инвариантҳо (масалан, "ҷамъи дебетҳо = маблағи қарзҳо").

Интегратсия

Муҳити герметикӣ: Testcontainers/Docker Compose 'postgres + redis + kafka + wiremock' -ро баланд мебардоранд.
Тухми ибтидоӣ дар пойгоҳи додаҳо/кэш ва тозакунӣ пас аз (муомилот/бозгашт, буридан).
Соатҳо/вақтсанҷҳо қалбакӣ (назоратшаванда) мебошанд, вагарна камбудиҳо.

6) Воситаҳо ва намунаҳо

Масхараҳо/дӯконҳо/қалбакӣ/ҷосусон:
  • Stub ҷавоби собит аст (арзон).
  • Масхара - санҷиши мутақобила/шумораи зангҳо.
  • Қалбакӣ татбиқи соддакардашуда аст (масалан, In-Memory Repo).
  • Озмоиши шартнома (CDC): Pact/Swagger-асоси - интизориҳои муштариёнро ислоҳ кунед ва провайдерро тафтиш кунед.
  • Wire ​ ​ Mock/Mock-Server - HTTP stubs барои хидматҳои тарафи сеюм.
  • Testcontainers DB/брокерҳои зинда дар маҳал ва дар CI бидуни "зоотехникӣ" мебошанд.

7) Намунаҳо

7. 1 воҳид: Идемпотенсияи пардохт (псевдокод)

python def test_idempotent_create_payment_returns_same_id():
repo = InMemoryPayments()
service = Payments(repo)

first = service. create(amount=100, key="abc")
second = service. create(amount=100, key="abc")

assert first. id == second. id assert repo. count() == 1

7. 2 Интегратсия: Имзои Webhook (HMAC) + Такрор

bash docker-compose: app + redis + wiremock (PSP)
docker compose -f docker-compose. test. yml up -d pytest -m "integration and webhook" -q
Санҷиш:
  • Wire ​ ​ Mock як чорабиниро бо 'X-Timestamp' ва имзо медиҳад.
  • Барнома HMAC-ро тафтиш мекунад, аз ҷониби 'event _ id' ҷудо карда мешавад, пас аз 5 сония такрор дубора эҷод намекунад.
  • Мо '200' -ро тафтиш мекунем ва танҳо як вуруд мавҷуд аст.

7. 3 CDC: Шартномаи муштариён бо провайдер

Мизоҷ як Паймон эҷод мекунад (интизорӣ: 'POST/v1/payout' → '201' бо диаграмма).
Провайдер дар CI санҷиши шартномаро дар мавқеи худ мегузаронад.

8) Суръат, параллелизм, қоқҳо

Воҳидҳо бояд дар як санҷиш <100 мс кор кунанд; пакет - сонияҳо.
Интегратсия - параллел бо контейнерҳо/бандарҳо; муҳоҷирати оғозиро истифода баред.

Антидоти печида:
  • вақти идорашаванда (соати қалбакӣ),
  • интизориҳо "бо рӯйдоди возеҳ", на "хоб",
  • ҳадди устувор (retrai бо санҷиши jitter муайянкунанда).

9) Нишондиҳандаҳои сифат

Фарогирӣ (хатҳо/шохаҳо): барои риояи тамоюл муфид аст, аммо на ҳадаф.
Озмоиши мутатсия (PIT/Mutmut): Нишон медиҳад, ки оё санҷишҳо тағироти бардурӯғро "мекушанд" - қудрати воқеии кушташудагон.
Давомнокии санҷиш ва суръати номуайян: огоҳӣ ҳангоми афзоиш.
Нигоҳдории нуқсон: ҳиссаи иштибоҳҳо пеш аз истеҳсол боздошта шуданд.

10) Ҷойгиркунӣ дар CI/CD

Ҷойҳои корӣ: воҳиди → ҳамгироӣ → e2e (мухлиси хидмат аз хидмат).
Кэши вобастагӣ, матритсаи мувозӣ аз рӯи пойгоҳи додаҳо/забон/версия.
Ҳисоботҳо: JU ‌ nit/Allure + артефактҳои сабти контейнерҳо (барои қатраҳо).
Дарвоза: "воҳиди сабз + ҳамгироии интиқодӣ" - ҳолати якҷояшавӣ; e2e - шабона.

Намунаи матритса (Амалҳои Git- Hub, порча):
yaml strategy:
matrix:
db: [postgres14, postgres16]
steps:
- run: docker run -d --name db -e POSTGRES_PASSWORD=pw postgres:${{ matrix. db }}
- run: pytest -m "unit" -q
- run: pytest -m "integration" -q

11) Microservices ва чорабиниҳо

Шартномаҳои хидматӣ: OpEN API/Protobuf санҷида мешаванд; санҷишҳои мутобиқат (ба қафо).

Ба рӯйдод асос ёфтааст:
  • Воҳид: харитасозии ҳодисаҳои домейн ва ғайривариантҳо.
  • Интегратсия: нашр/обуна дар брокери воқеӣ (Кафка), семантикаи outbox/паёмдони қуттӣ, тақлид ба як маротиба (ҳадди аққал - idempotent).
  • Санҷишҳои фармоишӣ.

12) Маълумот ва ҷудокунӣ дар ҳамгироӣ

Ҳар як санҷиш → схема/пойгоҳи беназири беназир (Testcontainers JDBC URL '? TC _ TMPFS =/var/lib/postgresql/data: rw ').
Ислоҳи транзаксия (оғоз § run → rollback) тозакуниро суръат мебахшад.
Барои Redis/кэш, префикси калидӣ 'озмоиш: $ {RUN _ ID}:' ва 'FLUSHDB' in teardown.

13) Хусусиятҳои IGaming/Finance

Пул ва маҳдудиятҳо: санҷишҳои амволи ғайриманқул (тавозун ≥ 0, маҳдудиятҳои умумӣ).
Танзимот: чеки сабти ном (сабти аудит навишта шудааст), рӯйдодҳои тағйирнопазир.
Пардохтҳо/PSP: Санҷишҳои ҳамгироии HMAC/MTLS, 'Retry-After', idempotency, dedup 'jti'.
Бозии масъул: санҷишҳои қоидаҳои ҳадди/cooldown; "vchera → segodnya" дар соати қалбакӣ.

14) Антипаттернҳо

"Воҳидҳо", ки DB/HTTP-ро баланд мекунанд, аллакай ҳамгироӣ мебошанд (қабатҳои омехта ва CI-ро суст мекунанд).
Фарогирии баланд аз сабаби изҳороти холӣ ("пӯшонида шудааст, аммо тафтиш карда намешавад").
Мантиқи хидматҳои тарафи сеюм, ки дар он ҷо шартнома лозим аст (танаффус ҳангоми навсозӣ).
Санҷишҳо бо 'хоб (5)' ба ҷои интизориҳои ҳодиса/ҳолат.
Махзани умумии санҷиш барои санҷишҳои параллелӣ → нажод ва flake.

15) Рӯйхати санҷиши омодагии Prod

  • Пирамида ҳамчун% саҳмияҳои Unit/Integration/E2E ва мақсаднок аз рӯи вақти корӣ муайян карда мешавад.
  • Воҳидҳо ҷудошуда, зуд, арзишҳои сарҳадӣ ва ғайривариантҳо мебошанд.
  • Интегратсия муҳити герметикиро (Testcontainers/Compose) бидуни ҳолати умумӣ истифода мебарад.
  • Санҷишҳои шартномавӣ (OpEN API/Pact) дар CI тасдиқ карда мешаванд.
  • Маълумоти санҷиш - идорашаванда: тухмӣ/бозгашт/префиксҳо, соати қалбакӣ.
  • Иҷрои мувозӣ, гузоришҳои JU 'nit/Allure, артефактҳои сабти контейнерҳо.
  • Нишондиҳандаҳо: давомнокӣ, суръати номуайян, холҳои мутатсия; огоҳӣ ба таназзул.
  • Сенарияҳои пардохт/webhook: HMAC/MTLS, retrai, idempotency, deadup.
  • Ҳуҷҷатҳои стратегия ва намунаҳои намунаҳои санҷиш.

16) TL; ДР

Воҳид - мантиқи максималӣ, муҳити минималӣ; Интегратсия - мокси минималӣ, реализми максималӣ. Пирамидаро нигоҳ доред: Воҳидҳои зуд 80% камбудиҳоро ба даст меоранд, Интегратсия бастаҳо ва шартномаҳоро тасдиқ мекунад. Контейнерҳои герметикӣ, санҷишҳои шартномавӣ, соати қалбакӣ ва параллелизмро истифода баред. На танҳо фарогирӣ, балки холҳои мутация ва сатҳи заифро чен кунед. Хусусан роҳҳои пардохт/webhook-ро санҷед: имзоҳо, бознигарӣ ва номутобиқатӣ.

Contact

Тамос гиред

Барои саволҳо е дастгирӣ ба мо муроҷиат кунед.Мо ҳамеша омодаем!

Оғози интегратсия

Email — муҳим аст. Telegram е WhatsApp — ихтиерӣ.

Номи шумо ихтиерӣ
Email ихтиерӣ
Мавзӯъ ихтиерӣ
Паем ихтиерӣ
Telegram ихтиерӣ
@
Агар Telegram нависед — ҷавобро ҳамон ҷо низ мегиред.
WhatsApp ихтиерӣ
Формат: рамзи кишвар + рақам (масалан, +992XXXXXXXXX).

Бо фиристодани форма шумо ба коркарди маълумот розӣ ҳастед.