Санҷишҳои воҳиди vs интегратсия
1) Чаро намудҳои санҷишро фарқ кунед
Гранулясияи дурусти санҷишҳо рушдро пешгӯишаванда мегардонад: камбудиҳои мантиқии воҳидро зуд ва арзон ба даст меоранд; Интегратсия бастаҳои модулҳо, нақлиёти воқеӣ ва "ширешро тафтиш мекунад. "Якҷоя, онҳо регрессияро коҳиш медиҳанд ва релизҳоро суръат мебахшанд.
2) Таърифҳо ва ҳудудҳо
Воҳиди-тест
Воҳиди хурди рафторро (функсия, синф, ҳолати истифода) дар алоҳидагӣ месанҷад.
Вобастагиҳои беруна иваз карда мешаванд (масхара/стуб/қалбакӣ).
Тез (ms-даҳҳо ms), детерминистӣ.
Санҷиши ҳамгироӣ
Мутақобилаи якчанд ҷузъҳои воқеиро тафтиш мекунад: базаи маълумотҳо, брокер (Kafka/Rabbit- MQ), HTTP/GRPC, системаи файлӣ, кэш.
Mocs ҳадди аққал, протоколҳои воқеӣ.
Сусттар (садҳо мс-сония), дар дастгирӣ гаронтар аст.
3) Озмоиши пирамида (на шохи ях)
Бунёд: Воҳиди (шумораи 70-80%) - арзон, зуд.
Қабати миёна: Интегратсия/Компонент (15-25%) - роҳҳо ва шартномаҳои муҳим.
Боло: E2E/UX/Exploratory (5-10%) - ҳадди аққал.
Дар тарафҳо: Таҳлили статикӣ/Санҷиши Lint/Type ва санҷиши мутатсия ҳамчун тақвиятдиҳандаи сифат.
4) Шӯъба ва чиро ба ҳамгироӣ бояд дод
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 - шабона.
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-ро санҷед: имзоҳо, бознигарӣ ва номутобиқатӣ.