Integration testing — ikki yoki undan ortiq komponent o‘rtasidagi interfeys, data almashinuvi va lifecycle’ni birgalikda tekshirish usuli. Unit test alohida modul ichki logikasini izolyatsiyada sinasa, integration test database driveri, HTTP client–server contracti, message broker, filesystem yoki tashqi adapter bilan realroq bog‘lanishni tekshiradi. Uning maqsadi komponentlar to‘g‘ri bo‘lsa ham chegarada paydo bo‘ladigan xatolarni topishdir.
Doira
Repository classni haqiqiy PostgreSQL bilan tekshirish, API endpointni authentication middleware va database bilan chaqirish, producer yozgan eventni consumer deserializatsiya qilishi integration testdir. Butun browser user journey esa ko‘proq E2E testga kiradi. Chegara qat’iy universal emas; jamoa test nomi bilan qaysi komponentlar real yoki fake ekanini hujjatlashtiradi.
Sociable unit test bir nechta in-process classni birga ishlatishi mumkin, ammo network va real infrastructure yo‘q. Integration testning qiymati aynan driver, serialization, transaction va config kabi cheklovlarni real bajarishidadir.
Database integratsiyasi
Test production bilan bir xil database engine va imkon qadar bir xil major version ishlatadi. SQLite’dan PostgreSQL o‘rnida foydalanish SQL dialect, isolation, JSON, timezone va constraint farqlarini yashirishi mumkin. Container test uchun vaqtinchalik database yaratadi va migration’larni real ketma-ketlikda qo‘llaydi.
Transaction rollback test izolyatsiyasini tez beradi, lekin application boshqa connection yoki background worker ishlatsa rollback chegarasidan tashqarida qoladi. Bunday scenario unique schema/database yoki explicit cleanupdan foydalanadi. Constraint va index mavjudligi faqat ORM modelga emas, real catalogga nisbatan tekshiriladi.
Tashqi xizmat
Sandbox API real provider xatti-harakatini ko‘rsatadi, ammo sekin, rate-limited va beqaror bo‘lishi mumkin. WireMockga o‘xshash stub aniq response va xatolarni deterministic beradi. Stub provider contractidan uzoqlashmasligi uchun contract test yoki davriy real sandbox smoke test bilan tekshiriladi.
Consumer-driven contract’da consumer kutgan request/response misolini publish qiladi, provider CI’da ularni o‘z implementatsiyasiga qarshi tekshiradi. Bu barcha biznes oqimini sinamaydi, lekin versiya nomuvofiqligini deploydan oldin topadi.
Message broker
Real broker testi exchange/topic, routing key, serialization, ack va redeliveryni tekshiradi. Consumer xabarni qayta olganda idempotent bo‘lishi kerak. Test processni side effectdan keyin, ackdan oldin to‘xtatib duplicate delivery scenario’sini sinashi mumkin.
Ordering faqat partition yoki queue doirasida kafolatlangan bo‘lsa test shunga mos yoziladi. Fixed sleep o‘rniga deadline bilan polling yoki broker admin API orqali consumption kutiladi. Queue va subscription test nomi bilan unique bo‘lib, parallel runlar aralashmaydi.
Testcontainers va muhit
Containerized dependency versionni kod bilan birga pin qiladi va local/CI muhitni yaqinlashtiradi. Container tayyor bo‘lishi port ochilishi bilan emas, real readiness query bilan aniqlanadi. Image tag latest bo‘lsa test bir kunda o‘zi o‘zgarishi mumkin; digest yoki aniq version ishlatiladi.
Container production security, distributed topology va performance’ni to‘liq takrorlamaydi. Integration suite funksional contractga, alohida staging yoki performance test esa multi-node xatti-harakatga qaratiladi.
Failure diagnostikasi
Test failure’da request/response, database query, container log va message IDni yig‘adi. Secret va shaxsiy data maskalanadi. Dependency start bo‘lmagan infrastructure failure product assertion failure’dan ajratiladi.
Integration suite runtime qisqarishi uchun dependency bir test sessionda qayta ishlatilishi mumkin, lekin state reset qat’iy bo‘ladi. Testlar orasidagi order dependency parallel va random run bilan aniqlanadi.
Bog‘liq tushunchalar
Unit testing, End-to-End testing, Contract testing, Testcontainers, Database testing, Mock server, Message broker