Test datası strategiyaları
Test datası avtomatlaşdırmada flakiness-in birinci mənbəyidir. Əsas qayda: hər test öz datasını özü yaradır, özü təmizləyir və başqa testin datasına toxunmur.
Dörd yanaşma və onların yeri:
- Statik fixture fayl (JSON) — yalnız read-only referans data üçün (ölkələr, valyutalar). Dəyişən data üçün pisdir: paralel testlər eyni sətri dəyişib bir-birini sındırır.
- Shared seed data — mühitə əvvəlcədən yüklənmiş data. Yalnız READ-ONLY istifadə oluna bilər; kim isə onu dəyişdirsə, səbəbi tapılmayan fail-lər başlayır.
- Factory + API seeding (əsas yanaşma) — testin ehtiyacı olan obyekt factory ilə qurulur, backend-də API ilə yaradılır, teardown-da silinir.
- UI ilə yaratma — yalnız yaratma prosesinin ÖZÜ test olunanda. Hazırlıq üçün istifadə etmək yavaşdır və aidiyyatı olmayan testləri sındırır.
Factory pattern — default dəyərləri olan, override qəbul edən data qurucu funksiya:
buildUser()→ tam etibarlı default userbuildUser({ role: 'admin' })→ yalnız fərqi göstərirsən
Bu, testin oxunaqlığı üçün kritikdir: spec-də yalnız ssenariyə aid olan sahələr görünür, qalan 15 sahə gözdən yayınır. "Bu test niyə admin haqqındadır?" sualının cavabı bir sətirdə görünür.
Paralel icra üçün unikallıq — ən çox rast gəlinən problem. İki worker eyni anda [email protected] ilə user yaratmağa çalışır → biri 409 alır → təsadüfi fail. Həll: hər dəyərdə unikal komponent — user-${randomUUID()}@test.local. Yalnız timestamp KİFAYƏT DEYİL: eyni millisaniyədə iki worker toqquşa bilər; UUID və ya worker-index + timestamp birləşməsi daha etibarlıdır.
Təmizləmə (cleanup) fixture teardown-da olmalıdır — afterEach-də deyil, çünki fixture teardown test fail olanda da işləyir. Əlavə müdafiə xətti: nightly cleanup job köhnə test datasını silir (fail olan run-lar həmişə zibil qoyur).
| Yanaşma | Nə vaxt | Risk |
|---|---|---|
| Statik JSON fixture | Dəyişməyən referans data (ölkə, valyuta siyahısı) | Dəyişən data üçün istifadə olunsa — paralel toqquşma |
| Shared seed data | Read-only ssenarilər, ağır setup (məs. böyük katalog) | Kimsə dəyişdirsə, izahı tapılmayan fail-lər |
| Factory + API seeding | Default seçim — testə aid dəyişən data | API-dən asılılıq; cleanup unudulsa data yığılır |
| UI ilə yaratma | Yalnız yaratma axınının özü test olunanda | Yavaş; hazırlıqdakı UI dəyişikliyi ondan asılı bütün testləri sındırır |
İnterview tələsi: "Testləri paralel işlətdik və təsadüfi fail-lər başladı — səbəb?" Ən çox gözlənilən cavab paylaşılan test datasıdır (eyni user, eyni sifariş, eyni counter). Cavabında həm diaqnostikanı de (fail-ləri təkbətək işlət — keçirsə, izolyasiya problemi var), həm həlli (unikal data + öz-özünə cleanup). Bu bir sual middle namizədləri arasında ən yaxşı ayırıcılardan biridir.
📚 Mənbələr və sənədlər
- Fixture-lərrəsmiplaywright.dev