Unit, integratsion va E2E testlar: farqi nimada
Asoslar3 daqInnovialabs tahririyati
Qisqacha
Unit test bitta funksiyani alohida, integratsion test tizim qismlarining birgalikdagi ishini, E2E esa foydalanuvchi ssenariysini to‘liq tekshiradi; nisbat loyihada nima ko‘proq buzilishiga qarab tanlanadi.
Farq qisqacha
Uchala tur qamrovi bilan farq qiladi — ya’ni bir vaqtda tizimning qaysi qismini tekshirishi bilan:
| Tur | Nimani tekshiradi | Tezlik | Barqarorlik | Nimani topadi |
|---|---|---|---|---|
| Unit | bitta funksiya yoki klassni alohida | juda tez | yuqori | mantiq xatolari va chegaraviy holatlar |
| Integratsion | modullar bog‘lamasi: kod + baza, servis + API | o‘rtacha | o‘rtacha | ulanish joylaridagi xatolar, noto‘g‘ri so‘rovlar, kontraktlar |
| E2E | interfeys orqali foydalanuvchi ssenariysi | sekin | pastroq | to‘liq buzilgan foydalanuvchi yo‘llari |
Daraja qanchalik yuqori bo‘lsa, bitta test shunchalik ko‘p ishonch beradi va uni yozish, ishga tushirish hamda qo‘llab-quvvatlash shunchalik qimmat.
Unit testlar
Unit test kichik kod bo‘lagini oladi va uni tashqi bog‘liqliklarsiz tekshiradi. Ma’lumotlar bazasi, tarmoq va vaqt mock yoki stub bilan almashtiriladi.
// calcDiscount.test.js
import { calcDiscount } from "./calcDiscount";
test("chegirma narxdan oshmaydi", () => {
expect(calcDiscount(100, 150)).toBe(100);
});
Qayerda yaxshi: hisob-kitoblar, validatsiya, formatlash, ko‘p shartli biznes qoidalari.
Zaif tomoni: barcha unit testlar yashil bo‘lishi, ilova esa ishlamasligi mumkin — chunki modullar bir-biriga noto‘g‘ri ulangan.
Integratsion testlar
Integratsion test bir nechta qism birgalikda ishlashini tekshiradi. Masalan: API’ga HTTP so‘rov handlergacha yetib boradi, ma’lumotlar haqiqiy test bazasiga saqlanadi, javob kerakli tuzilmaga ega.
Odatiy misollar:
- API endpoint + test ma’lumotlar bazasi;
- interfeys komponenti bola komponentlari va holati bilan birga;
- servis + xabarlar navbati;
- sizning kodingiz + sandbox rejimidagi yoki tarmoq darajasida almashtirilgan tashqi API.
Qayerda yaxshi: kontraktlar, SQL so‘rovlar, seriyalash va kirish huquqlarini tekshirishda.
E2E testlar
End-to-end test ilovani foydalanuvchi kabi ishga tushiradi: brauzer yoki mobil emulyatorni ochadi, tugmalarni bosadi, formalarni to‘ldiradi va natijani tekshiradi. Veb uchun mashhur vositalar — Playwright va Cypress.
Qayerda yaxshi: muhim yo‘llar — ro‘yxatdan o‘tish, kirish, buyurtma berish, test rejimidagi to‘lov.
Zaif tomoni: sekin va muhitga sezgir. Taymautlar, animatsiyalar va test ma’lumotlari o‘ylab chiqilmasa, flaky testlar paydo bo‘ladi — ular goh o‘tadi, goh yiqiladi va jamoa ularga ishonmay qo‘yadi.
Piramida va kubok
Test piramidasi (Mayk Kon g‘oyasi): asosda ko‘p unit testlar, o‘rtada kamroq integratsion, tepada bir nechta E2E. Mantiq — tez va arzon testlar poydevor bo‘lishi kerak.
Test kubogi (Kent Dodds modeli): pastda statik tahlil (tiplar, linter), keyin biroz unit, eng keng qism — integratsion testlar, tepada bir nechta E2E. Dalil — integratsion testlar real foydalanishga yaqinroq va sarflangan kuchga nisbatan ko‘proq ishonch beradi, zamonaviy vositalar esa ularni yetarlicha tez qildi.
Ikkala model ham aniq foizlar haqida emas, balki yo‘nalish haqida: ko‘p arzon tekshiruv, kam qimmat tekshiruv.
Loyihangiz uchun nisbatni qanday tanlash
Xatolar aslida qayerda yashashiga qarang:
- Murakkab biznes mantiq (hisob-kitob, tariflar, qoidalar) — ko‘proq unit testlar.
- Ko‘p integratsiyalar (API, baza, to‘lov tizimlari, CRM) — integratsion testlarga urg‘u.
- Odatiy CRUD ekranli interfeys — komponentlarning integratsion testlari va asosiy ssenariylarga bir nechta E2E.
- Pul yoki muhim ma’lumotlar — shu yo‘llarga E2E majburiy.
Amaliy boshlanish: eng muhim 3–5 ta foydalanuvchi ssenariysini oling va ularni E2E bilan qoplang. Keyin prodakshnda topilgan har bir bagga integratsion test, murakkab mantiqqa esa unit testlar qo‘shing.
Ko‘p uchraydigan xatolar
- Xatti-harakat o‘rniga implementatsiya tafsilotlarini tekshirish — testlar har bir refaktoringda buziladi.
- Hamma narsani mock qilish — test tizimni emas, mocklarni tekshiradi.
- Mantiqning barcha tarmoqlarini E2E bilan qoplashga urinish — to‘plam sekin va mo‘rt bo‘lib qoladi.
- Muhim ssenariylarni himoya qilish o‘rniga qamrov foizini quvish.
- Testlarni har bir pull request’da CI’da ishga tushirmaslik.