Mobil ishlanmada integratsiya testi — mohiyati, turlari va qanday o'tkaziladi

Muallif: IT Sectr Nashr etilgan: 2026-04-06 O'qish vaqti: 8 daq

Integratsiya testi mobil ilova komponentlari — modullar, xizmatlar, ma'lumotlar bazalari va tashqi API-lar o'rtasidagi o'zaro ta'sirning to'g'riligini tekshiradi. Har bir komponentni izolyatsiya qiluvchi birlik testlaridan farqli o'laroq, integratsiya testlari tutashuv joylaridagi xatolarni aniqlaydi: ma'lumotlar formatlarining mos kelmasligi, parametrlarni uzatishdagi nosozliklar va server javoblarini noto'g'ri qayta ishlash. Martin Fowler, 2018 ma'lumotlariga ko'ra, integratsiya testlari birlik tekshiruvlarida o'tkazib yuborilgan kritik nuqsonlarning 40% gacha qamrab oladi va tizimning relizdan oldin barqarorligiga ishonch beradi.

Asosiy fikrlar

  • Integratsiya testi — tizim komponentlari: ma'lumotlar bazalari, tarmoq xizmatlari va ichki modullar o'rtasidagi o'zaro ta'sirni tekshirish jarayoni.
  • Big Bang — barcha komponentlar bir vaqtning o'zida ulanib va sinovdan o'tkaziladigan yondashuv, kichik loyihalar uchun mos.
  • Bottom-Up — avval past darajadagi komponentlar, keyin asta-sekin yuqori darajadagilar tekshiriladigan strategiya.
  • Top-Down — yuqori daraja interfeyslarini pastki modullar uchun stublardan foydalangan holda tekshirishdan boshlanadigan yondashuv.
  • MockWebServer — Android testlarida HTTP serverini emulyatsiya qilish uchun kutubxona, haqiqiy backend bo'lmasdan tarmoq so'rovlarini tekshirish imkonini beradi.

Integratsiya testi nima?

Integratsiya testi — bu dasturiy ta'minotni tekshirish bosqichi bo'lib, unda ilovaning alohida modullari yoki quyi tizimlari o'rtasidagi o'zaro ta'sirning to'g'riligi baholanadi. Birlik testlari har bir komponentni alohida tekshirsa, integratsiya testlari bu komponentlarni birlashtiradi va ularning birgalikda qanday ishlashini tekshiradi. Odatiy stsenariylar tarmoq qatlami va repository o'rtasida ma'lumotlarni uzatish, ORM orqali ma'lumotlar bazasiga yozish va uchinchi tomon API-laridan javoblarni qayta ishlashni o'z ichiga oladi.

Mobil ishlanma kontekstida integratsiya testlari UI qatlami, biznes mantiq va ma'lumotlar manbalari o'rtasidagi o'zaro ta'sirni qamrab oladi. Masalan, test "Kirish" tugmasi bosilgandan so'ng ilova serverga so'rov yuborishi, token olishi va uni lokal xotirada saqlashini tekshirishi mumkin. Bunday tekshiruv komponentlar zanjirining uzilishlarsiz ishlashini tasdiqlaydi.

World Quality Report 2023 hisobotiga ko'ra, integratsiya testini muntazam qo'llaydigan kompaniyalar faqat birlik testlariga tayanadigan loyihalarga nisbatan ishlab chiqarish hodisalari sonini 35% ga kamaytiradi. Bu integratsiya tekshiruvlarini tijorat ishlanmasida sifat kafolati strategiyasining majburiy elementiga aylantiradi.

Nega mobil ilovalarda integratsiya testi kerak

Mobil ilovalar ko'plab o'zaro bog'liq komponentlardan iborat: tarmoq so'rovlari, lokal ma'lumotlar bazalari, push bildirishnomalari, tizim xizmatlari va uchinchi tomon SDK-lari. Bu komponentlarning har biri alohida ishlab chiqiladi, ammo ish vaqtida ular real vaqtda ma'lumotlar almashadilar. Integratsiya testi modullarni alohida tekshirishda aniqlab bo'lmaydigan nuqsonlarni ochib beradi.

Integratsiya testlari tomonidan aniqlanadigan tipik muammolarga API va ilova modeli o'rtasidagi ma'lumot turlarining nomuvofiqligi, JSON serializatsiya xatolari, tarmoq taym-autlarini noto'g'ri qayta ishlash va Room yoki Core Data orqali ma'lumotlar bazasiga parallel kirishdagi nosozliklar kiradi. Integratsiya tekshiruvlarisiz bunday nuqsonlar ishlab chiqarishga o'tadi va faqat haqiqiy foydalanuvchilarda namoyon bo'ladi.

Google Testing Blog (2021) tadqiqoti shuni ko'rsatadiki, integratsiya testi bosqichida aniqlangan nuqsonni tuzatish narxi relizdan keyingiga qaraganda 5 baravar past. Buning sababi shundaki, dastlabki bosqichlarda dasturchi xato kontekstini to'liq tushunadi va uni shoshilinch hotfix siklidisiz tuzatishi mumkin. Integratsiya testlarini yozishga vaqt sarfi qo'llab-quvvatlash xarajatlarini kamaytirish va foydalanuvchi ishonchini oshirish orqali o'zini oqlaydi.

Integratsiya testiga yondashuvlar

Integratsiya testlarini tashkil qilishning uchta asosiy yondashuvi mavjud: Big Bang, Bottom-Up va Top-Down. Strategiyani tanlash loyiha hajmiga, ilova arxitekturasiga va testlarni yozish vaqtida komponentlarning mavjudligiga bog'liq. Har bir yondashuvning test qamrovini rejalashtirishda hisobga olinishi kerak bo'lgan afzalliklari va cheklovlari bor.

Big Bang

Big Bang — tizimning barcha komponentlari bir vaqtning o'zida ulanadigan va umumiy test bajariladigan yondashuv. Bu usul amalga oshirish uchun sodda: stub yozish yoki alohida modullarni emulyatsiya qilish talab qilinmaydi. Biroq xato aniqlanganda, uning qaysi komponentdan kelib chiqqanligini aniqlash qiyin. Big Bang modullar soni beshdan oshmaydigan, oddiy arxitekturali kichik loyihalarda oqlanadi.

Bottom-Up

Bottom-Up — integratsiya testi past darajadagi komponentlardan boshlanadigan strategiya: ma'lumotlar bazasi, tarmoq qatlami, tizim xizmatlari. Har bir daraja tekshirilgandan so'ng, testlar asta-sekin yuqori modullarni — repozitoriyalarni, Use Case sinflarini va ViewModelni ulaydi. Asosiy afzallik ilonaning fundamental qatlamlarida nuqsonlarni erta aniqlashdir, bu esa ishlanmaning keyingi bosqichlarida kaskad xatolar xavfini kamaytiradi.

Top-Down

Top-Down — test yuqori darajadagi komponentlardan — UI ekranlari va navigatsiyadan boshlanadigan, pastki modullar esa stub yoki mocklar yordamida taqlid qilinadigan yondashuv. Bu server qismi yoki ma'lumotlar bazasi to'liq amalga oshirilmasdan oldin foydalanuvchi stsenariylarini tekshirish imkonini beradi. Top-Down ayniqsa mijoz va server qismlarining parallel ishlanmasida, backend hali haqiqiy integratsiyaga tayyor bo'lmaganda foydalidir.

Integratsiya testi uchun vositalar

Mobil ilovalarning integratsiya testi uchun uch toifaga bo'linadigan bir qator ixtisoslashgan vositalar qo'llaniladi: server emulyatsiyasi uchun kutubxonalar, ma'lumotlar bazalari bilan ishlash uchun freymvorklar va tizim xizmatlarini tekshirish vositalari. Muayyan vositani tanlash platformaga — Android yoki iOS — va loyihaning texnologik stekiga bog'liq.

  • MockWebServer — Android uchun Square kutubxonasi, test muhitida HTTP serverini emulyatsiya qiladi. Kutilgan javoblarni o'rnatish, so'rovlarning mazmuni va sarlavhalarini tekshirish, tarmoq xatolarini simulyatsiya qilish imkonini beradi.
  • OHHTTPStubs — iOS uchun kutubxona, tarmoq so'rovlarini NSURLProtocol darajasida tutib oladi va oldindan tayyorlangan javoblarni qaytaradi. Kechikishlar va ulanish xatolarini qo'llab-quvvatlaydi.
  • Room Testing — Android-ning ma'lumotlar bazasini testlash uchun o'rnatilgan mexanizmi: in-memory Room nusxasini yaratish, yozish va o'qish operatsiyalarini bajarish, migratsiyalar va triggerlarni tekshirish.
  • Core Data Testing — iOS uchun yondashuv, unda in-memory Core Data konteyneri yaratiladi, bu so'rovlarni, obyektlar o'rtasidagi munosabatlarni va doimiy saqlashsiz ma'lumotlarni saqlashni testlash imkonini beradi.

Integratsiya testlari uchun kod namunalari

Android va iOS uchun integratsiya testlarining amaliy namunalarini ko'rib chiqaylik. Android platformasi uchun MockWebServer JUnit bilan birga, iOS uchun esa XCTest OHHTTPStubs kutubxonasi bilan ishlatiladi. Ikkala namuna API-dan ma'lumotlarni olish va ularni lokal repozitoriyada saqlash stsenariysini tekshiradi.

Android: MockWebServer bilan tarmoq qatlamini testlash

Bu test emulyatsiya qilingan serverga Retrofit so'rovi to'g'ri JSON qaytarishini va repozitoriy javobni domen modeliga aylantirishini tekshiradi. MockWebServer so'rovni tutib oladi va belgilangan JSONni qaytaradi, shundan so'ng test kutilgan natijani haqiqiy bilan solishtiradi.

kotlin
class UserRepositoryTest {
    private val mockServer = MockWebServer()

    @Before
    fun setup() {
        mockServer.start()
    }

    @Test
    fun fetchUser_returnsCorrectData() {
        val json = "{ \`"id\`": 1, \`"name\`": \`"Alice\`" }"
        mockServer.enqueue(MockResponse()
            .setBody(json)
            .setResponseCode(200))

        val repository = UserRepository(
            createRetrofit(mockServer.url("/").toString()))
        val user = repository.fetchUser(1)

        assertEquals(1, user.id)
        assertEquals("Alice", user.name)
    }

    @After
    fun tearDown() {
        mockServer.shutdown()
    }
}

iOS: OHHTTPStubs bilan API so'rovlarini testlash

iOS uchun o'xshash test URL so'rovlarini tutib olish uchun OHHTTPStubs-dan foydalanadi. Kutubxona URL Loading System tizim freymvorki darajasida server javobini almashtiradi, bu esa istalgan tarmoq kutubxonasini — URLSession, Alamofire yoki Moyani testlash imkonini beradi.

swift
import XCTest
import OHHTTPStubs
import OHHTTPStubsSwift

class UserRepositoryTests: XCTestCase {
    func testFetchUser_returnsCorrectData() {
        stub(condition: isPath("/users/1")) { _ in
            return HTTPStubsResponse(
                jsonObject: ["id": 1, "name": "Alice"],
                statusCode: 200,
                headers: nil
            )
        }

        let repository = UserRepository()
        let expectation = expectation(description: "fetch user")

        repository.fetchUser(id: 1) { user in
            XCTAssertEqual(user.id, 1)
            XCTAssertEqual(user.name, "Alice")
            expectation.fulfill()
        }

        waitForExpectations(timeout: 2.0)
    }
}

Integratsiya testining eng yaxshi amaliyotlari

Samarali integratsiya testi testlarning barqarorligini oshiradigan va ularga xizmat ko'rsatish xarajatlarini kamaytiradigan bir qator amaliyotlarga rioya qilishni talab qiladi. Tashqi bog'liqliklarni izolyatsiya qiling: ishlab chiqarish nusxalari o'rniga in-memory ma'lumotlar bazalaridan foydalaning va tashqi API-larni test stub kutubxonalari orqali emulyatsiya qiling. Bu tarmoq mavjudligi yoki tashqi xizmatlar holati tufayli noaniq nosozliklarni bartaraf qiladi.

Testlarning mustaqilligini saqlang: har bir integratsiya testi boshqa testlar natijalariga bog'liq bo'lmagan holda alohida ishlashi kerak. Test muhitini tayyorlash va tozalash uchun JUnit-da @Before va @After annotatsiyalaridan yoki XCTest-da setUp va tearDown-dan foydalaning. Bu testlarning o'zaro ta'sirini oldini oladi va xato diagnostikasini soddalashtiradi.

Chegara holatlarini qamrab oling: integratsiya testlari nafaqat muvaffaqiyatli stsenariylarni (happy path), balki xato boshqaruvini ham — taym-autlar, HTTP 4xx va 5xx kodlari, bo'sh javoblar, buzilgan JSONni tekshirishi kerak. Google Testing Blog (2022) ma'lumotlariga ko'ra, ishlab chiqarish hodisalarining 60% testlar bilan qamrab olinmagan chegara holatlarini noto'g'ri boshqarish bilan bog'liq.

Tez-tez so'raladigan savollar

Integratsiya testi birlik testdan nima bilan farq qiladi?

Birlik testlari bitta sinf yoki funksiyani izolyatsiyada tekshiradi, bog'liqliklarni stublar bilan almashtiradi. Integratsiya testlari bir nechta real komponentlarning — masalan, tarmoq ulanishi va ma'lumotlar bazasining bir vaqtda o'zaro ta'sirini tekshiradi.

Integratsiya testlarini ishga tushirish qancha vaqt oladi?

Integratsiya testlarini ishga tushirish odatda testlar soni va muhit murakkabligiga qarab 2 daqiqadan 15 daqiqagacha vaqt oladi. Katta loyihalar uchun merge dan oldin umumiy tekshirish vaqtini qisqartirish uchun testlarni CI tizimida parallel job-larga bo'lish tavsiya etiladi.

Qaysi komponentlar majburiy ravishda integratsiya testlari bilan qamrab olinishi kerak?

Birinchi navbatda integratsiya testlari tarmoq qatlami, ma'lumotlar bazasi va tizim xizmatlari — bildirishnomalar, kamera, geolokatsiya uchun yoziladi. Backendga API so'rovlari va lokal xotira bilan operatsiyalar eng yuqori ROI beradi, chunki bu komponentlar ko'pincha regressiya manbaiga aylanadi.

Bitta ekran uchun integratsiya testlari kerakmi?

Bitta ekran uchun ViewModelning birlik testlari va UI testlari yetarli. Integratsiya testlari bitta ekran uchun faqat ekran bir nechta ma'lumotlar manbai bilan o'zaro ta'sir qilganda — masalan, ikki xil API dan javoblarni birlashtirganda yoki bir vaqtda tarmoqqa va lokal bazaga ma'lumotlar yozganda oqlanadi.

Integratsiya testlari qanchalik tez-tez ishga tushirilishi kerak?

Integratsiya testlari har bir pull requestda CI pipeline-da va asosiy relizlardan oldin ishga tushiriladi. Shuningdek bog'liqliklar yoki test muhitidagi o'zgarishlar bilan bog'liq nuqsonlarni aniqlash uchun tungi (nightly build) to'liq integratsiya testlari to'plamini ishga tushirish tavsiya etiladi.

Xulosa

  • Integratsiya testi ilova komponentlari — tarmoq qatlami, ma'lumotlar bazasi va xizmatlar o'rtasidagi o'zaro ta'sirni tekshiradi.
  • Big Bang kichik loyihalar uchun mos, Bottom-Up va Top-Down — murakkab arxitekturali tizimlar uchun.
  • MockWebServer va OHHTTPStubs mos ravishda Android va iOS uchun asosiy server emulyatsiya vositalaridir.
  • Integratsiya testlari Martin Fowlerga ko'ra birlik tekshiruvlarida o'tkazib yuborilgan nuqsonlarning 40% gacha aniqlaydi.
  • Bog'liqliklarni izolyatsiya qilish in-memory bazalar va stublar orqali testlarning barqarorligini oshiradi va noaniq nosozliklarni bartaraf qiladi.
  • Tuzatish narxi integratsiya testi bosqichida ishlab chiqarishga o'tgan nuqsondan 5 baravar past.
  • Qo'shing integratsiya testlarini har bir pull requestda CI pipeline-ga va to'liq qamrov uchun tungi bajarilishlarga.

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

Shuningdek o'qing