Mobil tətbiqlərdə UI testi: nədir, növləri və necə aparılır

Müəllif: IT Sectr Dərc olunub: 2026-04-07 Oxuma vaxtı: 8 dəq

UI testi mobil tətbiqin istifadəçi interfeysi elementlərinin — düymələrin, mətn sahələrinin, siyahıların və naviqasiya komponentlərinin düzgün görünməsini və qarşılıqlı əlaqəsini yoxlayır. Biznes məntiqini yoxlayan vahid testlərdən fərqli olaraq, UI testləri istifadəçi hərəkətlərini — toxunmaları, sürüşdürmələri, mətn daxil etməni — emulyasiya edir və interfeysin reaksiyasını yoxlayır. Tədqiqata görə Android Developers, 2024, UI testi kritik istifadəçi ssenarilərinin 70%-ni əhatə edir və məntiqi yoxlamalar üçün əlçatmaz olan qeyd düzünü qüsurlarını aşkarlamağa imkan verir.

Başlıca

  • UI testi — tətbiqin istifadəçi interfeysinin istifadəçi hərəkətlərinin emulyasiyası ilə yoxlanması prosesi: toxunmalar, mətn daxil etmə və sürüşdürmələr.
  • Espresso — Google-dan Android tətbiqlərinin UI testi üçün freymvork, UI axını ilə sinxronizasiyanı və animasiyaların avtomatik gözlənilməsini təmin edir.
  • XCUITest — Apple-ın iOS tətbiqlərinin UI testi üçün doğma freymvorku, Xcode ilə inteqrasiya olunub və Accessibility etiketləri vasitəsilə işləyir.
  • Appium — Android və iOS üçün WebDriver protokolundan istifadə edərək eyni dildə UI testləri yazmağa imkan verən platformalararası alət.
  • Snapshot testi UI testlərini ekranların görünüşünü yoxlamaqla tamamlayır — referans vəziyyətin ekran görüntüsünü cari render ilə müqayisə edir.

UI testi nədir?

UI testi — test kodunun tətbiqin qrafik interfeysi ilə real istifadəçinin edəcəyi şəkildə qarşılıqlı əlaqədə olduğu avtomatlaşdırılmış yoxlama növüdür. Test ekranda elementi — düyməni, mətn sahəsini, siyahını — tapır, onun üzərində əməliyyat yerinə yetirir və interfeysin gözlənilən reaksiyasını yoxlayır. Məsələn, səhv şifrə daxil etdikdən sonra UI testi ekranda düzgün mətnli xəta mesajının görünüb-görünmədiyini yoxlayır.

UI testlərinin digər avtomatlaşdırma növlərindən əsas fərqi onların tətbiqin daxili API-si vasitəsilə deyil, Accessibility qatı vasitəsilə işləməsidir. Bu o deməkdir ki, UI testləri interfeysi istifadəçi və ekran oxuma sistemi kimi dəqiq görür. Bunun sayəsində UI testləri təkcə funksionallığı deyil, həm də elementlərin əlçatanlığını — WCAG tələblərinə uyğunluğu yoxlayır.

JetBrains Developer Ecosystem 2023 sorğusuna görə, mobil komandaların 58%-i CI/CD boru kəmərində UI testlərindən istifadə edir. Kommersiya layihələrində UI testləri ilə orta əhatə tətbiqin 30–40% ekranlarını təşkil edir. UI testləri olan layihələr interfeys qəzaları ilə bağlı tətbiq mağazalarında 25% daha az mənfi rəy alır.

UI testi vahid testdən nə ilə fərqlənir

UI testləri ilə vahid testlər arasındakı əsas fərq abstraksiya səviyyəsidir. Vahid testlər Android və ya iOS freymvorkundan təcrid olunmuş ayrı-ayrı siniflər və funksiyalar üzərində işləyir. Onlar emulyator işə salmadan JVM-də (Android üçün) icra olunur və millisaniyələr çəkir. UI testləri real cihazda və ya emulyatorda işləyir, sistem xidmətləri ilə qarşılıqlı əlaqədə olur və bir ssenari üçün saniyələr və ya dəqiqələr tələb edir.

Testlərin hədəf auditoriyası da fərqlənir. UI testləri kompleks istifadəçi ssenarilərini — qeydiyyatı, sifarişin verilməsini, axtarışı yoxlayır. Vahid testlər biznes məntiqini əhatə edir: hesablamalar, validasiya, məlumat çevrilməsi. UI testi vergi hesablamasının düzgünlüyünü yoxlamır — o, yekun məbləğin ekranda göstərilməsini yoxlayır. Hesablamanın özü vahid testlə yoxlanılır.

Google Testing Blog (2020)-a görə, layihədə testlərin optimal nisbəti test piramidası qaydasına uyğun olmalıdır: 70% vahid test, 20% inteqrasiya testi və 10% UI testi. Bu nisbətin UI testləri lehinə pozulması icra müddətinin uzanmasına və test dəstinin kövrəkliyinə gətirib çıxarır, çünki UI testləri ekran düzümündəki dəyişikliklərə həssasdır.

UI testi üçün freymvorklar

Android üçün dominant freymvork Espresso — AndroidX Test-ə daxil edilmiş Google kitabxanasıdır. Espresso avtomatik olaraq UI axını ilə sinxronlaşır, növbəti yoxlamadan əvvəl animasiyaların və fon tapşırıqlarının tamamlanmasını gözləyir. Jetpack Compose üçün ənənəvi görüntü identifikatorları \u0259vəzinə semantik düyünlər vasitəsilə işləyən Compose UI Test genişləndirməsi istifadə olunur.

iOS üçün əsas alət Xcode tərkibinə daxil olan XCUITest-dir. Testlər Swift dilində yazılır və elementlərin axtarışı üçün Accessibility identifikatorlarından istifadə edir. XCUITest record funksiyası vasitəsilə test yazılmasını və xcodebuild vasitəsilə CI sistemləri ilə inteqrasiyanı dəstəkləyir. Platformalararası layihələr üçün WebDriver protokoluna əsaslanan və minimal kod dəyişiklikləri ilə Android və iOS-da eyni testləri işə salmağa imkan verən Appium tətbiq olunur.

Espresso və Compose UI Test

Espresso onView və resurs id identifikatorları vasitəsilə ənənəvi View sistemi ilə işləyir. Compose UI Test semantik qatdan istifadə edir ki, bu da testləri görüntü iyerarxiyasından daha az asılı edir. Məsələn, Espresso-da düymə axtarışı: onView(withId(R.id.submit)), Compose-da: onNodeWithTag(“submit”). Compose testləri avtomatik olaraq rekompozisiyanı idarə edir və boş vəziyyət üçün açıq gözləmə tələb etmir.

iOS üçün XCUITest

XCUITest giriş nöqtəsi kimi XCUIApplication-dan istifadə edir. İnterfeysin hər bir elementi Accessibility xüsusiyyətləri vasitəsilə axtarılır: proqram girişi üçün accessibilityIdentifier və VoiceOver üçün accessibilityLabel. Freymvork Xcode-da record funksiyası vasitəsilə test yazılmasını dəstəkləyir — tərtibatçı simulyatorda hərəkətləri yerinə yetirir, Xcode isə test kodunu yaradır. Hazır testlər xcodebuild test vasitəsilə işə salınır.

Platformalararası həllər

Appium WebDriver protokoluna əsaslanır və istənilən dilləri dəstəkləyir: Java, Python, JavaScript. Elementlərin axtarışı üçün id, xpath, class name və accessibility id strategiyaları istifadə olunur. Appium server quraşdırılması və Desired Capabilities — platformName, deviceName, appPackage konfiqurasiyası tələb edir. Alternativ olaraq, YAML ssenarilərindən istifadə edən və test kodunun kompilyasiyasını tələb etməyən Maestro mövcuddur.

  • Espresso — onView(withId(R.id.button)).perform(click()).check(matches(isDisplayed()))
  • XCUITest — app.buttons[“loginButton”].tap(); XCTAssertTrue(app.staticTexts[“welcome”].exists)
  • Appium — driver.findElement(By.id(“com.example:id/button”)).click()
  • Detox — Wix tərəfindən React Native üçün JS axını ilə sinxronlaşan freymvork
  • Maestro — YAML ssenariləri ilə kod yazmağı tələb etməyən müasir alət

UI testləri üçün kod nümunələri

Eyni ssenari — tətbiqə daxil olma — üçün UI testlərinə üç fərqli freymvorkda baxaq: Android üçün Espresso, iOS üçün XCUITest və platformalararası yanaşma üçün Appium. Ssenari: login və şifrə daxil edin, daxil olma düyməsini basın, xoş gəldin mesajının göründüyünü yoxlayın.

Android: Espresso

Espresso-da test elementi identifikator üzrə axtarmaq üçün onView və əməliyyatı yerinə yetirmək üçün perform istifadə edir. isDisplayed matcheri ilə check metodu elementin ekranda göründüyünü təsdiqləyir.

kotlin
@RunWith(AndroidJUnit4::class)
class LoginUiTest {

    @Rule
    @JvmField
    val composeTestRule = createComposeRule()

    @Test
    fun login_withValidCredentials_showsWelcome() {
        composeTestRule
            .onNodeWithTag("emailField")
            .performTextInput("user@example.com")
        composeTestRule
            .onNodeWithTag("passwordField")
            .performTextInput("secret123")
        composeTestRule
            .onNodeWithTag("loginButton")
            .performClick()
        composeTestRule
            .onNodeWithText("Xoş gəldiniz, İstifadəçi!")
            .assertIsDisplayed()
    }
}

iOS: XCUITest

XCUITest interfeys elementlərinə giriş üçün Accessibility identifikatorları vasitəsilə XCUIApplication-dan istifadə edir. tap() və exists metodları qarşılıqlı əlaqə və yoxlama təmin edir.

swift
class LoginUITests: XCTestCase {
    let app = XCUIApplication()

    override func setUp() {
        continueAfterFailure = false
        app.launch()
    }

    func testLogin_withValidCredentials_showsWelcome() {
        app.textFields["emailField"].tap()
        app.textFields["emailField"].typeText("istifadeci@example.com")
        app.secureTextFields["passwordField"].tap()
        app.secureTextFields["passwordField"].typeText("gizli123")
        app.buttons["loginButton"].tap()
        XCTAssertTrue(app.staticTexts["Welcome, User!"].exists)
    }
}

UI testinin ən yaxşı təcrübələri

Birinci prinsip — elementlərin axtarışı üçün mətn etiketləri əvəzinə Accessibility identifikatorlarından istifadə edin. Düymənin mətni lokallaşdırma zamanı dəyişə bilər, identifikator isə sabit qalır. Android-də bu contentDescription xüsusiyyəti, iOS-da isə accessibilityIdentifier-dir. Bu yanaşma testləri interfeys dilindən asılı olmayan edir və kopiraytinq dəyişikliyində texniki xidmət xərclərini azaldır.

sleep() və sabit gecikmələrdən qaçının — freymvorkun daxili gözləmə mexanizmlərindən istifadə edin. Espresso avtomatik olaraq animasiyaların və fon tapşırıqlarının tamamlanmasını gözləyir. XCUITest timeout ilə XCTAssertTrue təmin edir. Açıq fasilələr testləri yavaşlatır və daha az sabit edir, xüsusilə CI mühitində yavaş cihazlarda.

Testləri kritikliyə görə qruplaşdırın: smoke testləri (3–5 əsas ssenari) hər commit-də işə salınır, tam UI test dəsti — buraxılışdan əvvəl. Google Testing Blog (2022)-yə görə, CI-da 30 dəqiqədən çox vaxt aparan UI testləri işə salınma tezliyini 40% azaldır ki, bu da onların reqressiyaların erkən aşkarlanması aləti kimi effektivliyini azaldır.

UI testlərinin məhdudiyyətləri və onları necə aşmaq olar

UI testlərinin bir sıra məhdudiyyətləri var. Düzüm dəyişikliklərinə həssaslıq: identifikatorun, iyerarxiyanın və ya element növünün dəyişməsi dəyişməz funksionallıqda belə testi pozur. Həll yolu — element seçicilərini ayrı siniflərdə mərkəzləşdirən Page Object nümunəsindən istifadə etmək. Düzüm dəyişdikdə onlarla test deyil, bir Page Object faylı düzəlişir.

İcra müddəti: real cihazda və ya emulyatorda işə salma vahid testdən 10–50 dəfə çox vaxt aparır. Həll yolu — Firebase Test Lab və ya AWS Device Farm vasitəsilə UI testlərini bir neçə cihazda paralel işə salmaq. Qeyri-sabitlik (flakiness) — animasiyalar, şəbəkə gecikmələri və ya emulyator vəziyyəti səbəbindən CI işə salmalarının tez-tez rast gəlinən problemi. Flakiness ilə mübarizə üçün uğursuz testlərin avtomatik təkrarlanması və hər test ssenarisinin sabitlik analitikası tətbiq olunur.

Tez-tez verilən suallar

Bir ekran üçün neçə UI testi lazımdır?

Orta ekran üçün 3–5 UI testi kifayətdir: happy path, xəta validasiyası, boş vəziyyət, istiqamət dəyişikliyi və Accessibility yoxlaması. Mürəkkəb ekranlar çox sayda vəziyyətlə — sifariş formaları, parametrlər — əsas ssenarilərin tam əhatəsi üçün 10–15 test tələb edə bilər.

Android və iOS üçün eyni freymvorkdan istifadə etmək olarmı?

Bəli, Appium və Maestro eyni ssenariləri hər iki platformada işə salmağa imkan verir. Lakin doğma freymvorklar — Espresso və XCUITest — daha yaxşı sabitlik, sürət və WebDriver proxy vasitəsilə əlçatmaz platforma imkanlarına çıxış təmin edir.

Jetpack Compose-da UI necə test edilir?

Compose üçün semantik matcherləri olan Compose UI Test kitabxanası istifadə olunur: onNodeWithText, onNodeWithTag, onNodeWithContentDescription. Compose-un semantik qatı görüntü iyerarxiyasını abstraksiya edir ki, bu da testləri View sistemi üçün ənənəvi Espresso ilə müqayisədə daha az kövrək edir.

UI-ni fiziki cihazlarda test etmək lazımdırmı?

Əsas UI test işə salmaları CI-da emulyatorlarda aparılır — bu sürətli və ucuzdur. Buraxılışdan əvvəl yekun yoxlamanı real avadanlığın xüsusiyyətlərini — müxtəlif qərarlılıq, ƏS versiyaları və performansı — nəzərə almaq üçün Firebase Test Lab vasitəsilə fiziki cihazlarda aparmaq tövsiyə olunur.

UI testlərinin icra müddətini necə azaltmaq olar?

Bir neçə cihazda paralel işə salmadan istifadə edin, Developer Options vasitəsilə emulyatorda animasiyaları söndürün, modul test arxitekturası qurun və hər commit-də smoke dəstini, tam reqressiya işə salmasını isə cədvəl üzrə və ya buraxılışdan əvvəl işə salın.

Nəticə

  • UI testi interfeysi istifadəçi hərəkətlərinin emulyasiyası — toxunmalar, mətn daxil etmə, sürüşdürmələr vasitəsilə yoxlayır.
  • Espresso və Compose UI Test — Android üçün əsas freymvorklar; XCUITest — iOS üçün; Appium — platformalararası layihələr üçün.
  • Test piramidası 70/20/10 nisbətini tövsiyə edir: müvafiq olaraq vahid, inteqrasiya və UI testləri.
  • Accessibility identifikatorları UI testlərini lokallaşdırmaya və düzüm dəyişikliklərinə davamlı edir.
  • Page Object nümunəsi element seçicilərini mərkəzləşdirir, interfeys dəyişikliyində texniki xidmət xərclərini azaldır.
  • Smoke testləri (3–5 ssenari) hər commit-də işə salınır, tam dəst — buraxılışdan əvvəl.
  • Paralel işə salma emulyatorlarda və animasiyaların söndürülməsi CI-da UI testlərinin icra müddətini qısaldır.

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.

Layihəni müzakirə et

Həm də oxuyun