Mobil Ishlab Chiqishda Testlash: bu nima, qanday turlari va qanday tashkil qilish

Muallif: IT Sectr Nashr etilgan: 2026-03-31 O'qish vaqti: 9 daq

Mobil ilova testlash — bu ilovaning to'g'ri ishlashini, ishdan chiqmasligini va talablarga javob berishini tekshirish jarayonidir. Software Testing Help (2025) ma'lumotlariga ko'ra, avtomatlashtirilgan testlash qo'lda testlashga nisbatan regressiya tekshiruvlari vaqtini 70–80% ga qisqartiradi. Ushbu maqolada testlash darajalari, iOS va Android vositalari, TDD va BDD, shuningdek testlar uchun CI/CD ni ko'rib chiqamiz.

Asosiy nuqtalar

  • Yagona testlar alohida funksiyalar va sinflarni tekshiradi; integratsiya testlari modullararo aloqani tekshiradi; E2E to'liq foydalanuvchi stsenariysini qamrab oladi.
  • iOS: XCTest yagona testlar uchun, XCUITest UI testlari uchun. Android: JUnit + Mockito + Espresso.
  • Platformalararo freymvorklar: Detox (React Native), Appium (universal), XCUITest (iOS).
  • TDD (Test-Driven Development) — avval test, keyin kod; BDD — oddiy tilda stsenariylar.
  • CI/CD: har pushda testlar avtomatik ishga tushadi — bu tijorat ishlab chiqish uchun majburiy standartdir.

Testlash darajalari: Unit, Integration, E2E

Birlik testlash

Birlik testlari mobil ilova testlashning asosidir. Ular kodning eng kichik birligini — bitta funksiya, usul yoki sinfni tizimning qolgan qismidan izolyatsiya qilgan holda tekshiradi. Mobil ishlab chiqishda birlik testlari JUnit (Android) va XCTest (iOS) da yoziladi. Yaxshi birlik testi tez, mustaqil va takrorlanadigan bo'lishi kerak — u tarmoq, ma'lumotlar bazasi yoki UI komponentlariga bog'liq bo'lmasligi kerak. Izolyatsiya uchun test dublikatlaridan foydalaniladi: mock, stub va fake.

Mockito (Java/Kotlin) va MockK (Kotlin-first) Android-da mock ob'ektlarini yaratish uchun mashhur kutubxonalardir. iOS da OCMock, Cuckoo yoki qo'lda protokollar ishlatiladi. Qoida: birlik testlari biznes mantiqini va ma'lumotlar modellarini qamrab olishi kerak. UI testlari birlik testlarini takrorlamasligi kerak — ular foydalanuvchining interfeys bilan o'zaro aloqasini tekshiradi.

Integratsiya testlash

Integratsiya testlari komponentlar o'rtasidagi o'zaro aloqani tekshiradi: ma'lumotlar bazasi bilan ombor, API xizmati bilan ViewModel, ekranlar o'rtasida navigatsiya. Birlik testlaridan farqli o'laroq, integratsiya testlari real yoki realga yaqin bog'liqliklardan foydalanadi (masalan, xotiradagi ma'lumotlar bazasi yoki mock server). Robolectric emulyatorsiz JVM da Android testlarini ishga tushirish uchun freymvork bo'lib, integratsiya testlarini 10 marta tezlashtiradi.

Snapshot testlari (Golden Tests) maxsus integratsiya testi turi bo'lib, renderlangan UI komponentini mos yozuvlar tasviri (snapshot) bilan solishtiradi. Agar tashqi ko'rinish o'zgarsa, test muvaffaqiyatsiz bo'ladi — ishlab chiqaruvchi nima o'zgarganini ko'radi. Facebook SnapshotTestCase (iOS) va Shot (Android) snapshot testlash uchun mashhur vositalardir.

E2E va UI testlash

E2E testlari (end-to-end) boshidan oxirigacha to'liq foydalanuvchi stsenariysini tekshiradi: ilovani ishga tushirish, kirish, harakatni bajarish, natijani tekshirish. UI testlari interfeysga qaratilgan E2E ning kichik to'plamidir. Vositalar: Espresso (Android), XCUITest (iOS), Detox (React Native). E2E testlari eng sekin, shuning uchun ular CI da alohida ishga tushiriladi — odatda tungi yig'ilishlarda.

iOS Vositalari: XCTest va XCUITest

XCTest

XCTest mobil ilovalarni birlik testlash uchun Apple-ning o'rnatilgan freymvorkidir. XCTestRunner simulyator yoki real qurilmada testlarni ishga tushiradi. Testlar XCTestCase dan meros oladi, tayyorgarlik va tozalash uchun setUp va tearDown o'z ichiga oladi. XCTest tekshirishlar uchun XCTAssert (XCTAssertEqual, XCTAssertNil, XCTAssertTrue) va asinxron operatsiyalarni kutish uchun XCTWaiter ni o'z ichiga oladi.

Oddiy XCTest testi misoli: User modelini yaratish, boshlang'ich holatning to'g'riligini, nom formatlash va yosh hisoblashni tekshirish. Code Coverage Xcode da kodning qaysi satrlari testlar bilan qoplanganligini ko'rsatadi — tijorat loyihalari uchun maqsad: biznes mantiqining kamida 70–80% qamrovi. XCTest xcodebuild test orqali Xcode Server va CI tizimlari bilan integratsiyalangan.

XCUITest

XCUITest UI testlash uchun Apple-ning freymvorkidir. U kirish identifikatorlari orqali ishlaydi: XCUIElementQuery tugmalar, kiritish maydonlari, jadvallarni yorliq, identifikator yoki turi bo'yicha topadi. XCUITest harakatlar ketma-ketligini yozib oladi (yozib olish/ijro etish) va test kodini yaratadi. Muhim: barqaror test ishlashi uchun barcha UI elementlar accessibilityIdentifier ga ega bo'lishi kerak.

Android Vositalari: JUnit, Espresso, Robolectric

JUnit va Mockito

JUnit Java/Kotlin da mobil ilovalarni modul testlash uchun asosiy freymvorkdir. Android da JUnit 4 (so'nggi barqaror versiya 4.13.2) va yangi loyihalar uchun JUnit 5 ishlatiladi. Mockito mock ob'ektlarini yaratish uchun kutubxona: when(mock.method()).thenReturn(value) — test qilinayotgan sinfni bog'liqliklardan izolyatsiya qilish uchun standart naqsh.

Android uchun JUnit testi misoli:

java
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;

@RunWith(MockitoJUnitRunner.class)
public class LoginViewModelTest {

    @Mock
    AuthRepository authRepository;

    @Test
    public void login_emptyEmail_returnsError() {
        LoginViewModel vm = new LoginViewModel(authRepository);
        String result = vm.login("", "password123");
        assertEquals("Email cannot be empty", result);
        verify(authRepository, never()).authenticate(any());
    }
}

Espresso va UI Automator

Espresso Google-ning Android UI testlari uchun freymvorkidir. Espresso avtomatik ravishda UI oqimi bilan sinxronlanadi: onView(withId(R.id.button)).perform(click()).check(matches(isDisplayed())). Espresso o'rnatilgan bo'sh holat kutish tufayli yozish oson va barqaror. UI Automator tizim elementlari (ruxsat dialog oynalari, bildirishnoma soyasi) bilan o'zaro aloqa qila oladigan ilovalararo testlar uchun freymvorkdir.

Platformalararo Vositalar: Detox, Appium

React Native uchun Detox

Detox Wix dan React Native mobil ilovalarni testlash uchun kulrang quti E2E freymvorkidir. Detox ichki qismida Espresso (Android) va XCUITest (iOS) dan foydalanib, yagona test kod bazasidan ikkala platformada ishlaydi. Detox ilova bo'sh holatga kelguncha (animatsiyalar, tarmoq so'rovlari, taymerlar yo'q) avtomatik kutadi va shundan keyingina keyingi harakatni bajaradi.

Appium

Appium Android, iOS, Web va gibrid ilovalarni qo'llab-quvvatlovchi universal platformalararo freymvorkdir. Appium WebDriver protokolidan foydalanadi va har qanday dasturlash tilini (Java, Python, JS, Ruby) qo'llab-quvvatlaydi. Appium Server buyruqlarni mahalliy UI Automator / XCUITest buyruqlariga tarjima qiluvchi HTTP server sifatida ishlaydi. Appium ning asosiy kamchiligi tezlik: testlar mahalliy Espresso yoki XCUITest dan sekinroq ishlaydi.

iOS va Android test vositalarini solishtirish
Mezon iOS Android
Birlik testlari XCTest JUnit 4/5 + Mockito
UI testlari XCUITest Espresso, UI Automator
Snapshot testlari FBSnapshotTestCase Shot, Roborazzi
Imo-ishora avtomatlashtirish XCUIGesture UiAutomator touch
Kod qamrovi Xcode Code Coverage Jacoco
CI integratsiyasi xcodebuild test Gradle connectedCheck

TDD va BDD: Testlash Metodologiyalari

TDD: Test-Driven Development

TDD bu amalga oshirish kodidan oldin test yoziladigan mobil ilova testlash metodologiyasidir. Red-Green-Refactor sikli: (1) muvaffaqiyatsiz bo'lgan test yozing (Red), (2) testdan o'tish uchun minimal kod yozing (Green), (3) testdan o'tishni saqlab, kodni qayta quring. TDD yangi funksionallik uchun 100% test qamrovi va toza arxitektura beradi, chunki test talabning birinchi spetsifikatsiyasidir.

BDD: Behaviour-Driven Development

BDD TDD ning kengaytmasi bo'lib, testlar tabiiy tilda Given-When-Then formatida yoziladi. Given (kontekst) — When (harakat) — Then (kutilgan natija). BDD testlari jamoa a'zolarining barchasi uchun tushunarli: ishlab chiqaruvchilar, testerlar, tahlilchilar va mijozlar. Mock vs Stub vs Fake: Mock o'zaro aloqani tekshiradi (usul chaqirilganmi), Stub belgilangan ma'lumotlarni qaytaradi, Fake soddalashtirilgan ishchi amalga oshirish (masalan, xotiradagi MB). IT Sectr da biz muhim biznes mantig'i uchun TDD va qabul stsenariylari uchun BDD dan foydalanamiz.

Test Dublikatlari testlarda real bog'liqliklarni almashtiradigan ob'ektlarning umumiy nomidir. To'rt turi bor: Dummy (parametrlarni to'ldirish uchun ob'ekt, ishlatilmaydi), Stub (berilgan qiymatlarni qaytaradi), Spy (tekshirish uchun chaqiruvlarni yozib oladi), Mock (kutilgan chaqiruvlarni oldindan belgilaydi). Farqni tushunish to'g'ri test loyihalash uchun juda muhimdir.

CI/CD va Device Farm

CI/CD da Test Avtomatlashtirish

CI/CD — Uzluksiz Integratsiya va Uzluksiz Yetkazib Berish: har bir kod o'zgarishida mobil ilovalarni avtomatik qurish va testlash amaliyoti. Mobil ishlab chiqishda CI/CD quvur liniyasi quyidagilarni o'z ichiga oladi: linting, birlik testlari, integratsiya testlari, APK/IPA qurish va UI testlari. GitHub Actions va Bitrise mobil CI/CD uchun mashhur platformalardir. Testlar tez ishlashi kerak: birlik testlari 1–2 daqiqada, integratsiya 5–10 da, UI testlari 15–30 daqiqada.

Device Farm

Device Farm testlash uchun real qurilmalar fermasidir. Firebase Test Lab (Android) va Xcode Cloud (iOS) yuzlab qurilma modellariga bulutli kirishni ta'minlaydi. Device Farm emulyatorlarda ko'rinmaydigan muammolarni aniqlaydi: turli ekran o'lchamlari, eski qurilmalarda ishlash, moslik muammolari. IT Sectr da biz muntazam ravishda Android uchun Firebase Test Lab va iOS uchun Xcode Cloud dan foydalanamiz.

Tez-tez so'raladigan savollar

Test qamrovining necha foizi normal hisoblanadi?

Tijorat loyihalari uchun biznes mantig'ining kamida 70–80% qamrovi. UI kodni qoplash qiyinroq — buning uchun 50% etarli. Asosiy masala foiz emas, balki testlar sifatidir: muhim stsenariylarni, chekka holatlarni va xato boshqaruvini sinab ko'ring.

Mock Stub dan qanday farq qiladi?

Mock o'zaro aloqani tekshiradi — ma'lum bir usul ma'lum parametrlar bilan chaqirilganmi. Stub oldindan belgilangan ma'lumotlarni qaytaradi. Mock xatti-harakatni, Stub holatni tekshiradi.

UI uchun test yozish kerakmi?

Ha, lekin faqat muhim stsenariylar uchun: kirish, ro'yxatdan o'tish, buyurtma berish, to'lov. UI testlari sekin va mo'rt — har bir ekran uchun test yozmang. Foydalanuvchining E2E stsenariylariga e'tibor qarating.

Snapshot Test nima?

Snapshot Test (Golden Test) renderlangan UI komponentini mos yozuvlar tasviri bilan solishtiradi. Tashqi ko'rinish o'zgarsa (shrift, to'ldirish, rang), test muvaffaqiyatsiz bo'ladi — ishlab chiqaruvchi o'zgarish ataylab qilinganligini tekshiradi. Komponent kutubxonalari uchun ideal.

E2E testlarini qanday tezlashtirish mumkin?

E2E testlarini bir nechta qurilmada parallel ishga tushiring, Cloud Device Farm dan foydalaning va testlarni mustaqil guruhlarga bo'ling. Testlarni optimallashtiring: kutishlarni minimallashtiring, tarmoq so'rovlari uchun mock dan foydalaning.

Xulosa

  • Birlik testlari — test piramidasining asosi: tez, izolyatsiya qilingan, biznes mantiqini qamrab oladi.
  • iOS: birlik uchun XCTest, UI uchun XCUITest. Android: JUnit + Mockito, UI uchun Espresso, tez integratsiya testlari uchun Robolectric.
  • Platformalararo freymvorklar: Detox (React Native), Appium (universal), XCUITest (iOS-mahalliy).
  • TDD — koddan oldin test, BDD — biznes tilida stsenariylar (Given-When-Then).
  • CI/CD — har pushda avtomatik test ishga tushirish zamonaviy ishlab chiqish uchun majburiydir.
  • Device Farm — apparat muammolarini aniqlash uchun bulutda real qurilmalarda testlash.
  • Test piramidasi: ko'p birlik, kam integratsiya, kamroq E2E — tezlik va qamrovning optimal muvozanati.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish