Test runner — test fayllarini topish, ularni bajarish, natijalarni yig‘ish va hisobot chiqarishni boshqaradigan dasturdir. pytest, JUnit, Jest, Vitest va Playwright Test turli ekotizimlardagi test runnerlarga misol. Assertion library test natijasini solishtiradi, runner esa butun execution lifecycleini tashkil qiladi.
Testlarni aniqlash
Runner filename pattern, katalog, annotation yoki ro‘yxatdan testlarni topadi. Collection bosqichida modul import qilinishi mumkin; import paytidagi side effect test boshlanishidan avval xato beradi. Test ID fayl, class, suite va parametr kombinatsiyasidan tuziladi.
Filter tag, marker, nom yoki o‘zgargan fayllar asosida subset tanlaydi. Faqat lokal filterdan o‘tgan testlarni CIga yuborib, qolgan suite bajarilishini unutish mumkin emas. Skip va expected failure sabab hamda muddati bilan qayd etiladi.
Lifecycle va fixture
Setup testga database, browser, temporary directory yoki object yaratadi. Teardown muvaffaqiyat va failureda ham resursni tozalaydi. Scope function, class, file, worker yoki session bo‘lishi mumkin. Keng scope tezlik beradi, lekin shared state orqali izolyatsiyani kamaytiradi.
Hooklar collection, test start, failure va report bosqichida plugin ishlashiga imkon beradi. Haddan tashqari ko‘p yashirin hook execution tartibini tushunishni qiyinlashtiradi. Fixture dependency grafigi aniq va acyclic bo‘lishi kerak.
Parallel bajarish
Runner testlarni process, thread yoki remote workerlarga bo‘lishi mumkin. Testlar tartibga, umumiy portga, bir xil accountga yoki global database satriga tayansa parallelizm race yaratadi. Har worker uchun noyob schema, namespace yoki data prefix ishlatiladi.
Sharding katta suite ni bir nechta CI jobga taqsimlaydi. Test soni bo‘yicha teng bo‘lish execution vaqtini tenglashtirmaydi; tarixiy duration asosidagi balans umumiy muddatni kamaytiradi. Retry shardlar orasida duplicate artifact va natija hisobini to‘g‘ri yuritishi kerak.
Natija va exit code
Runner passed, failed, skipped, timed out va flaky kabi holatlarni qayd etadi. Process exit code CI gate uchun ishlatiladi. Reporter console, JUnit XML, HTML yoki machine-readable JSON chiqarishi mumkin. Test nomi va stack trace source map bilan asl kodga bog‘lanadi.
Coverage instrumentation bajarilgan code pathni o‘lchaydi, ammo assertion sifati va talab qamrovini ko‘rsatmaydi. Coverage yig‘ish executionni sekinlashtirishi mumkin, shu sabab barcha run yoki alohida jobda yoqiladi.
Timeout va retry
Test, hook va suite uchun turli timeoutlar bo‘lishi mumkin. Global katta timeout deadlockni kech aniqlaydi. Runner timeoutdan keyin processdagi holatni tozalashi yoki workerning o‘zini almashtirishi kerak; aks holda keyingi test iflos muhitda ishlaydi.
Automatic retry vaqtinchalik beqarorlikni aniqlashga yordam beradi, lekin birinchi failure ni yashirmaydi. Hisobot barcha urinishlar, artifactlar va yakuniy statusni saqlaydi. Doim ikkinchi urinishda o‘tadigan test suite sog‘lom hisoblanmaydi.
Deterministik muhit
Runner random test tartibi yoki random seed ishlatsa seed failure hisobotida saqlanadi. Fixed timezone, locale va clock vaqtga bog‘liq testlarni barqaror qiladi. Process environment o‘zgaruvchisi testlar orasida tiklanmasa keyingi case natijasiga ta’sir qiladi.
Watch mode lokal rivojlantirishda o‘zgargan faylga bog‘liq testlarni qayta bajaradi. Dependency grafigi dynamic import yoki runtime bog‘lanishni to‘liq bilmasligi mumkin, shuning uchun CI har doim to‘liq, toza run bajaradi. Cache key source, config, runtime va dependency lockni hisobga oladi.
Bog‘liq tushunchalar
Test suite, Fixture, Assertion, Test discovery, Parallel testing, Reporter, Code coverage