E2E-testinq (End-to-End) istifadəçinin tam ssenarilərini əvvəldən axıra qədər yoxlayır, tətbiqin bütün qatlarını əhatə edir: interfeys, biznes məntiqi, şəbəkə sorğuları və verilənlər bazası. Komponentlərin təcrid olunmuş əlaqələrini yoxlayan inteqrasiya testlərindən fərqli olaraq, E2E-testlər istifadəçinin real davranışını modelləşdirir — tətbiqin açılmasından hədəf hərəkətin tamamlanmasına qədər. Martin Fowler, 2020 tədqiqatına görə, E2E-testlər sistemin düzgünlüyünə ən yüksək inamı təmin edir, lakin kövrəklik və həddindən artıq icra müddətindən qaçmaq üçün diqqətli layihələndirmə tələb edir.
Əsas məqamlar
E2E-testinq (End-to-End) — proqram təminatının yoxlanılması metodudur, burada test sistemin bütün komponentləri vasitəsilə istifadəçinin tam yolunu keçir. Mobil tətbiq üçün tipik E2E ssenarisi daxildir: tətbiqin işə salınması, yeni istifadəçinin qeydiyyatı, email təsdiqi, hədəf hərəkətin icrası (sifarişin verilməsi, mesajın göndərilməsi) və nəticənin interfeysdə yoxlanılması. Hər addım real komponentlərdən istifadə edir — heç bir kölgə və mock olmadan.
E2E-testlərin əsas üstünlüyü onların sistemi vahid bir bütöv olaraq yoxlamasıdır, o cümlədən müştəri tərəfi, server, verilənlər bazaları və xarici xidmətlər arasında qarşılıqlı əlaqə. E2E-testlər test piramidasının aşağı səviyyələrində aşkar edilə bilməyən problemləri aşkarlayır: müştəri və server arasında məlumat formatlarının uyğunsuzluğu, real mühitdə avtorizasiya səhvləri və ödəniş şlüzləri ilə inteqrasiya nasazlıqları.
World Quality Report 2023 hesabatına görə, E2E-testinqi CI/CD pipeline-na tətbiq edən komandalar buraxılış zamanı kritik defektlərin sayını 45% azaldır. Eyni zamanda tam E2E dəstinin icra müddəti ssenarilərin sayından asılı olaraq 20 dəqiqədən 2 saata qədər dəyişir ki, bu da paralel işə salma strategiyasının düşünülməsini tələb edir.
Əsas fərq yoxlama sərhədlərindədir. İnteqrasiya testləri tətbiq daxilində iki və ya üç komponentin qarşılıqlı əlaqəsini yoxlayır: şəbəkə qatının repozitoriya ilə, verilənlər bazasının ViewModel ilə. E2E-testlər bütün zənciri yoxlayır: UI-dən xarici backendə və geriyə. İnteqrasiya testi API sorğusunun düzgün JSON qaytardığını yoxlayırsa, E2E-test istifadəçinin bu məlumatları tam yükləmə dövründən sonra ekranda gördüyünü yoxlayır.
Dəstək xərci də fərqlənir. İnteqrasiya testləri idarə olunan mühitdə işləyir — test kölgələri və in-memory verilənlər bazaları ilə, bu da onları sabit və sürətli edir. E2E-testlər xarici sistemlərin vəziyyətindən, şəbəkə əlçatanlığından və backend versiyalarından asılıdır, bu da yalançı uğursuzluqlar (flakiness) ehtimalını artırır. Google Testing Blog (2021) məlumatına görə, E2E-testlər inteqrasiya testlərindən orta hesabla 3–5 dəfə daha kövrəkdir ki, bu da təkrar cəhd mexanizmlərinin və sabitlik analitikasının tətbiqini tələb edir.
E2E və inteqrasiya testləri arasında seçim ssenarinin kritikliyindən asılıdır. Əsas istifadəçi yolları — qeydiyyat, ödəniş, girişin bərpası — E2E yoxlaması tələb edir. Köməkçi ssenarilər — siyahının yüklənməsi, profilin yenilənməsi — ayrı-ayrı ekranlar səviyyəsində UI yoxlamaları ilə inteqrasiya testləri ilə əhatə oluna bilər.
Hər istifadəçi ssenarisi E2E-test tələb etmir. Seçim meyarları üç amili əhatə edir: yolun istifadə tezliyi, prodüksiyonda səhvin dəyəri və cəlb olunan sistemlərin sayı. Hər istifadəçinin ilk işə salmada yerinə yetirdiyi ssenari (onboarding, qeydiyyat) açıq namizəddir. İstifadəçilərin 5%-nin girişi olan inzibati panel ssenarisi — inteqrasiya testi üçün namizəddir.
Hər ssenari üçün minimal E2E-test dəsti müəyyən edilir — bir happy path və bir error path (məsələn, müddəti bitmiş token və ya əlçatmaz server). E2E əhatəsini əsas ssenarilərdən kənara genişləndirmək iqtisadi cəhətdən əsaslandırılmalıdır: E2E-testlərin ROI 10–15 əsas yolun əhatəsindən sonra azalır, çünki əlavə E2E-testlər keyfiyyət inamında mütənasib artım vermir.
Mobil E2E-testinq üçün üç əsas alət kateqoriyası mövcuddur: platforma freymvorkları, çoxplatformalı həllər və yeni nəsil alətlər. Alət seçimi texnoloji yığımdan, komandanın ixtisasından və CI inteqrasiyasının tələb olunan quraşdırma sürətindən asılıdır.
XCUITest — Apple-ın iOS üçün yerli aləti, Xcode-un tərkib hissəsi. iOS üçün ən sabit və məhsuldar variant, sistemin Accessibility qatına birbaşa giriş təmin edir. Espresso — Google-ın Android üçün yerli freymvorku, AndroidX Test-in tərkib hissəsi. E2E ssenariləri üçün Espresso AndroidX Test Orchestrator ilə birlikdə testlərin təcrid edilməsi və qarşılıqlı təsirin qarşısının alınması üçün istifadə olunur. Platforma freymvorklarının çatışmazlığı — hər platforma üçün ayrıca testlər yazmaq zərurəti.
Appium — WebDriver əsaslı alət, Java, Python, JavaScript və digər dilləri dəstəkləyir. Appium memarlığına əmrləri platforma API-lərinə proksiləyən server daxildir — Android üçün UIAutomator, iOS üçün XCUITest. Hər cihaz üçün Desired Capabilities konfiqurasiyası tələb olunur. Detox Wix-dən — React Native üçün freymvork, JS axını ilə sinxronlaşan və animasiyaların və şəbəkə sorğularının tamamlanmasını avtomatik gözləyir. Detox Jest və ya Mocha ilə inteqrasiya olunur və server quraşdırılması tələb etmir.
Maestro — ssenariləri təsvir etmək üçün YAML fayllarından istifadə edən müasir freymvork. Maestro kompilasiya tələb etmir, isti yenidən yükləməni dəstəkləyir və nəticələrin təhlili üçün daxili Flow Report təqdim edir. Alət 10 dəqiqəyə CI ilə inteqrasiya olunur və tətbiqin vəziyyəti ilə avtomatik sinxronlaşır ki, bu da Appium ilə müqayisədə testlərin flakiness-ni əhəmiyyətli dərəcədə azaldır.
Ən sürətli böyüyən mobil test alətlərindən biri olan Maestro-da avtorizasiya ssenarisi üçün E2E-testi nəzərdən keçirək. Maestro YAML formatından istifadə edir ki, bu da proqramlaşdırma dillərini bilmədən testlər yazmağa imkan verir. İkinci nümunə — React Native tətbiqi üçün Detox-da E2E-test.
Ssenari tam axını təsvir edir: tətbiqin açılması, email və şifrənin daxil edilməsi, giriş düyməsinin basılması və əsas ekranın göstərilməsinin yoxlanılması. Maestro əmrləri intuitiv başa düşüləndir və seçicilərin konfiqurasiyasını tələb etmir — freymvork elementləri tapmaq üçün element mətnindən istifadə edir.
# E2E: İstifadəçi girişi
appId: com.example.myapp
---
- launchApp
- waitForVisibile:
text: "Email"
- tapOn:
text: "Email"
- inputText:
text: "user@example.com"
- tapOn:
text: "Password"
- inputText:
text: "secret123"
- tapOn:
id: "loginButton"
- waitForVisibile:
text: "Welcome back!"
- assertVisible:
text: "Welcome back!"
Detox Wix-dən JS axını ilə avtomatik sinxronizasiya sayəsində testlərin sabitliyini təmin edir. Test sleep istifadə etmir — Detox yoxlamadan əvvəl bütün asinxron əməliyyatların tamamlanmasını gözləyir.
describe('Login flow', () => {
beforeEach(async () => {
await device.reloadReactNative()
})
it('should login successfully', async () => {
await expect(element(by.id('emailInput'))).toBeVisible()
await element(by.id('emailInput')).typeText('user@example.com')
await element(by.id('passwordInput')).typeText('secret123')
await element(by.id('loginButton')).tap()
await expect(element(by.text('Xoş gəldiniz!'))).toBeVisible()
})
})
E2E-testlərin CI/CD ilə inteqrasiyası onların effektivliyinin əsas amilidir. Tövsiyə olunan strategiya — iki səviyyəli pipeline: hər pull request üçün 3–5 kritik E2E ssenarisindən ibarət minimal smoke dəsti işə salınır, tam reqressiya dəsti isə gecə (nightly build) və ya buraxılışdan əvvəl icra olunur. Bu yanaşma geribildirim sürəti ilə yoxlama dərinliyi arasında tarazlıq yaradır.
CI-da E2E-testlər üçün üç aspekt kritikdir: paralelləşdirmə — Firebase Test Lab və ya AWS Device Farm vasitəsilə eyni anda bir neçə cihazda testlərin işə salınması icra müddətini saatlardan dəqiqələrə endirir; mühitin konteynerizasiyası — backend və test serveri üçün Docker istifadəsi təkrarlanabilirliyi təmin edir; hesabatlar və təkrar cəhdlər — uğursuz testlərin avtomatik yenidən işə salınması (2 cəhdə qədər) və hər ssenarinin keçid videosu ilə HTML hesabatın yaradılması.
Google Testing Blog (2022) məlumatına görə, paralel işə salma ilə xüsusi E2E-CI pipeline istifadə edən komandalar reqressiyaların aşkarlanma müddətini 60% azaldır. E2E-testlərin effektivliyinin əsas metriki testlərin sayı deyil, yalançı uğursuzluqlar olmadan uğurlu CI işlərinin faizidir. Hədəf göstərici — kritik yolların tam əhatəsi ilə E2E dəstinin sabitliyi 95%-dən yuxarı.
Tez-tez verilən suallar
Orta tətbiq üçün kritik istifadəçi ssenarilərini əhatə edən 15–25 E2E-test kifayətdir. Optimal miqdar test piramidası ilə müəyyən edilir: E2E-testlər ümumi test dəstinin 5–10%-ni təşkil edir. E2E-testlərin payının 10%-dən yuxarı artırılması icra müddətinin və dəstək xərclərinin qeyri-mütənasib artımına gətirib çıxarır.
Avtomatik təkrar cəhdlərdən (2–3 cəhd) istifadə edin, test mühitini Docker vasitəsilə təcrid edin, emulatorda animasiyaları söndürün və sabit pauzalar əvəzinə waitForVisible tətbiq edin. Detox və Maestro kimi alətlər Appium ilə müqayisədə flakiness-ni əhəmiyyətli dərəcədə azaldan daxili sinxronizasiyaya malikdir.
E2E-testlər üçün ideal mühit — prodüksiyonla eyni olan, test məlumatları ilə staging serverdir. Staging əlçatan deyilsə, Docker-də konteynerləşdirilmiş backend istifadə edin. Real prodüksiyon server E2E-testlər üçün istifadə edilə bilməz — testlər uyğunsuz məlumatlar yaradar və real istifadəçilərə təsir edər.
Bəli, yerli E2E-testlər üçün iOS-da XCUITest (Swift) və Android-də AndroidX Test ilə Espresso (Kotlin) istifadə olunur. Bu freymvorklar daha yaxşı performans verir, lakin çoxplatformalılığı dəstəkləmir. Appium və Maestro hər iki platforma üçün bir dil lazım olan komandalar üçün seçim olaraq qalır.
E2E-testlər istifadəçi ssenarisində hər dəyişiklik zamanı yenilənir: axına yeni ekranın əlavə edilməsi, UI elementlərinin və ya naviqasiya məntiqinin dəyişdirilməsi. Hər sprintdə test dəstinin auditi aparmaq tövsiyə olunur, köhnəlmiş ssenariləri silmək və yenilərini əlavə etmək, dəstin tətbiqin cari vəziyyətini əks etdirməsi üçün.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun