Mobil inkişafda inteqrasiya testi — mahiyyəti, növləri və necə aparılır

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

İnteqrasiya testi mobil tətbiqin komponentləri — modullar, xidmətlər, verilənlər bazaları və xarici API-lər arasında qarşılıqlı əlaqənin düzgünlüyünü yoxlayır. Hər bir komponenti təcrid edən vahid testlərdən fərqli olaraq, inteqrasiya testləri qovşaqlardakı səhvləri aşkarlayır: verilənlər formatlarının uyğunsuzluğu, parametr ötürülməsində nasazlıqlar və server cavablarının səhv işlənməsi. Martin Fowler, 2018-in məlumatlarına görə, inteqrasiya testləri vahid yoxlamalarda buraxılmış kritik qüsurların 40%-ə qədərini əhatə edir və sistemin buraxılışdan əvvəl sabitliyinə əminlik verir.

Əsas məqamlar

  • İnteqrasiya testi — sistem komponentləri: verilənlər bazaları, şəbəkə xidmətləri və daxili modullar arasında qarşılıqlı əlaqənin yoxlanılması prosesi.
  • Big Bang — bütün komponentlərin eyni anda birləşdirilib test edildiyi yanaşma, kiçik layihələr üçün uyğundur.
  • Bottom-Up — əvvəlcə aşağı səviyyəli komponentlərin, sonra tədricən yuxarı səviyyəlilərin test edildiyi strategiya.
  • Top-Down — yuxarı səviyyə interfeyslərinin aşağı modullar üçün stub-lardan istifadə etməklə yoxlanılmasına başlayan yanaşma.
  • MockWebServer — Android testlərində HTTP serverini emulyasiya etmək üçün kitabxana, real backend olmadan şəbəkə sorğularını yoxlamağa imkan verir.

İnteqrasiya testi nədir?

İnteqrasiya testi — proqram təminatının yoxlanılması mərhələsidir ki, burada tətbiqin ayrı-ayrı modulları və ya alt sistemləri arasında qarşılıqlı əlaqənin düzgünlüyü qiymətləndirilir. Vahid testlər hər bir komponenti təcrid edərkən, inteqrasiya testləri bu komponentləri birləşdirir və onların birlikdə necə işlədiyini yoxlayır. Tipik ssenarilərə şəbəkə qatı ilə repo arasında verilənlərin ötürülməsi, ORM vasitəsilə verilənlər bazasına yazma və üçüncü tərəf API-lərindən cavabların işlənməsi daxildir.

Mobil inkişaf kontekstində inteqrasiya testləri UI qatı, biznes məntiqi və verilənlər mənbələri arasındakı qarşılıqlı əlaqəni əhatə edir. Məsələn, test "Giriş" düyməsi basıldıqdan sonra tətbiqin serverə sorğu göndərib-göndərmədiyini, token alıb-almadığını və onu lokal yaddaşa saxlayıb-saxlamadığını yoxlaya bilər. Belə yoxlama komponentlər zəncirinin nasazlıqsız işlədiyini təsdiqləyir.

World Quality Report 2023 hesabatına görə, inteqrasiya testini müntəzəm tətbiq edən şirkətlər yalnız vahid testlərə güvənən layihələrlə müqayisədə istehsal hadisələrinin sayını 35% azaldır. Bu, inteqrasiya yoxlamalarını kommersiya inkişafında keyfiyyət təminatı strategiyasının məcburi elementinə çevirir.

Mobil tətbiqlərdə inteqrasiya testi niyə lazımdır

Mobil tətbiqlər çoxlu sayda qarşılıqlı əlaqəli komponentlərdən ibarətdir: şəbəkə sorğuları, lokal verilənlər bazaları, push bildirişləri, sistem xidmətləri və üçüncü tərəf SDK-ları. Bu komponentlərin hər biri ayrıca hazırlanır, lakin iş vaxtı real vaxtda verilənlər mübadiləsi aparır. İnteqrasiya testi modulların təcrid olunmuş yoxlanılması zamanı aşkar edilə bilməyən qüsurları üzə çıxarır.

İnteqrasiya testləri tərəfindən aşkar edilən tipik problemlərə API ilə tətbiq modeli arasında verilən tiplərinin uyğunsuzluğu, JSON serializasiya səhvləri, şəbəkə vaxt aşımının səhv işlənməsi və Room və ya Core Data vasitəsilə verilənlər bazasına paralel girişdə nasazlıqlar daxildir. İnteqrasiya yoxlamaları olmadan bu qüsurlar istehsala keçir və yalnız real istifadəçilərdə özünü göstərir.

Google Testing Blog (2021) araşdırması göstərir ki, inteqrasiya testi mərhələsində aşkar edilmiş qüsurun düzəldilməsi dəyəri buraxılışdan sonrakından 5 dəfə aşağıdır. Bu, erkən mərhələlərdə tərtibatçının səhv kontekstini tam başa düşməsi və təcili hotfix dövrü olmadan onu düzəldə bilməsi ilə izah olunur. İnteqrasiya testlərinin yazılmasına vaxt sərfi dəstək xərclərinin azaldılması və istifadəçi etimadının artırılması ilə özünü doğruldur.

İnteqrasiya testinə yanaşmalar

İnteqrasiya testlərinin təşkili üçün üç əsas yanaşma mövcuddur: Big Bang, Bottom-Up və Top-Down. Strategiya seçimi layihənin ölçüsündən, tətbiqin arxitekturasından və testlərin yazılması zamanı komponentlərin əlçatanlığından asılıdır. Hər bir yanaşmanın test əhatəsinin planlaşdırılmasında nəzərə alınmalı olan üstünlükləri və məhdudiyyətləri var.

Big Bang

Big Bang — sistemin bütün komponentlərinin eyni anda birləşdirildiyi və ümumi test icrasının aparıldığı yanaşmadır. Bu metod həyata keçirmək üçün sadədir: stub yazmaq və ya ayrı-ayrı modulları emulyasiya etmək tələb olunmur. Ancaq səhv aşkar edildikdə, onun hansı komponentdən qaynaqlandığını müəyyən etmək çətindir. Big Bang modulların sayı beşi keçməyən, sadə arxitekturalı kiçik layihələrdə əsaslandırılmışdır.

Bottom-Up

Bottom-Up — inteqrasiya testinin aşağı səviyyəli komponentlərdən başladığı strategiyadır: verilənlər bazası, şəbəkə qatı, sistem xidmətləri. Hər səviyyə yoxlandıqdan sonra testlər tədricən yuxarı modulları — repozitoriləri, Use Case siniflərini və ViewModel-i birləşdirir. Əsas üstünlük tətbiqin fundamental qatlarında qüsurların erkən aşkar edilməsidir ki, bu da inkişafın sonrakı mərhələlərində kaskad səhvlər riskini azaldır.

Top-Down

Top-Down — testin yuxarı səviyyəli komponentlərdən — UI ekranları və naviqasiyadan başladığı, aşağı səviyyəli modulların isə stub və ya mock-larla təqlid edildiyi yanaşmadır. Bu, server hissəsi və ya verilənlər bazası tam tətbiq edilməmişdən əvvəl istifadəçi ssenarilərini yoxlamağa imkan verir. Top-Down xüsusilə müştəri və server hissələrinin paralel inkişafı zamanı, backend hələ real inteqrasiyaya hazır olmadıqda faydalıdır.

İnteqrasiya testi üçün alətlər

Mobil tətbiqlərin inteqrasiya testi üçün üç kateqoriyaya bölünən bir sıra ixtisaslaşmış alətlərdən istifadə olunur: server emulyasiyası üçün kitabxanalar, verilənlər bazaları ilə işləmək üçün freymvorklar və sistem xidmətlərinin yoxlanılması vasitələri. Konkret alətin seçimi platformadan — Android və ya iOS — və layihənin texnologiya stack-indən asılıdır.

  • MockWebServer — Android üçün Square kitabxanası, test mühitində HTTP serverini emulyasiya edir. Gözlənilən cavabları təyin etməyə, sorğuların məzmununu və başlıqlarını yoxlamağa, şəbəkə səhvlərini simulyasiya etməyə imkan verir.
  • OHHTTPStubs — iOS üçün kitabxana, şəbəkə sorğularını NSURLProtocol səviyyəsində ələ keçirir və əvvəlcədən hazırlanmış cavabları qaytarır. Gecikmələri və əlaqə xətalarını dəstəkləyir.
  • Room Testing — Android-in verilənlər bazası testi üçün daxili mexanizmi: in-memory Room nümunəsinin yaradılması, yazma və oxuma əməliyyatlarının icrası, miqrasiyaların və triggerlərin yoxlanılması.
  • Core Data Testing — iOS üçün yanaşma, burada in-memory Core Data konteyneri yaradılır ki, bu da sorğuları, varlıqlar arasındakı əlaqələri və sabit yaddaş olmadan verilənlərin saxlanmasını test etməyə imkan verir.

İnteqrasiya testləri üçün kod nümunələri

Android və iOS üçün inteqrasiya testlərinin praktik nümunələrini nəzərdən keçirək. Android platforması üçün MockWebServer JUnit ilə birlikdə, iOS üçün isə XCTest OHHTTPStubs kitabxanası ilə istifadə olunur. Hər iki nümunə API-dən verilənlərin alınması və onların lokal repozitoridə saxlanılması ssenarisini yoxlayır.

Android: MockWebServer ilə şəbəkə qatının testi

Bu test emulyasiya edilmiş serverə Retrofit sorğusunun düzgün JSON qaytardığını və repozitorinin cavabı domen modelinə çevirdiyini yoxlayır. MockWebServer sorğunu ələ keçirir və müəyyən edilmiş JSON-u qaytarır, bundan sonra test gözlənilən nəticəni faktiki ilə müqayisə edir.

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 ilə API sorğularının testi

iOS üçün oxşar test URL sorğularını ələ keçirmək üçün OHHTTPStubs-dan istifadə edir. Kitabxana URL Loading System sistem freymvorku səviyyəsində server cavabını əvəz edir ki, bu da istənilən şəbəkə kitabxanasını — URLSession, Alamofire və ya Moya-nı test etməyə imkan verir.

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)
    }
}

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

Effektiv inteqrasiya testi testlərin sabitliyini artıran və onlara dəstək xərclərini azaldan bir sıra təcrübələrə riayət etməyi tələb edir. Xarici asılılıqları təcrid edin: istehsal nümunələri əvəzinə in-memory verilənlər bazalarından istifadə edin və xarici API-ləri test stub kitabxanaları vasitəsilə emulyasiya edin. Bu, şəbəkənin əlçatanlığı və ya xarici xidmətlərin vəziyyəti səbəbindən qeyri-deterministik nasazlıqları aradan qaldırır.

Testlərin müstəqilliyini qoruyun: hər bir inteqrasiya testi digər testlərin nəticələrindən asılı olmayaraq təcrid olunmuş şəkildə işləməlidir. Test mühitinin hazırlanması və təmizlənməsi üçün JUnit-də @Before və @After annotasiyalarından və ya XCTest-də setUp və tearDown-dan istifadə edin. Bu, testlərin qarşılıqlı təsirinin qarşısını alır və səhv diaqnostikasını sadələşdirir.

Sərhəd halları əhatə edin: inteqrasiya testləri yalnız uğurlu ssenariləri (happy path) deyil, həm də xəta idarəetməsini — vaxt aşımları, HTTP 4xx və 5xx kodları, boş cavablar, zədələnmiş JSON yoxlamalıdır. Google Testing Blog (2022) məlumatlarına görə, istehsal hadisələrinin 60%-i testlərlə əhatə olunmayan sərhəd hallarının səhv idarə edilməsi ilə bağlıdır.

Tez-tez verilən suallar

İnteqrasiya testi vahid testdən nə ilə fərqlənir?

Vahid testlər bir sinfi və ya funksiyanı təcrid şəraitində yoxlayır, asılılıqları stublarla əvəz edir. İnteqrasiya testləri bir neçə real komponentin — məsələn, şəbəkə əlaqəsi və verilənlər bazasının eyni vaxtda qarşılıqlı əlaqəsini yoxlayır.

İnteqrasiya testlərini işə salmaq nə qədər vaxt aparır?

İnteqrasiya testlərini işə salmaq adətən testlərin sayından və mühitin mürəkkəbliyindən asılı olaraq 2 dəqiqədən 15 dəqiqəyə qədər vaxt aparır. Böyük layihələr üçün merge-dən əvvəl ümumi yoxlama vaxtını qısaltmaq üçün testləri CI sistemində paralel job-lara bölmək tövsiyə olunur.

Hansı komponentlər mütləq inteqrasiya testləri ilə əhatə olunmalıdır?

İlk növbədə inteqrasiya testləri şəbəkə qatı, verilənlər bazası və sistem xidmətləri — bildirişlər, kamera, geolokasiya üçün yazılır. Backend-ə API sorğuları və lokal yaddaşla əməliyyatlar ən yüksək ROI verir, çünki bu komponentlər daha tez-tez reqressiya mənbəyinə çevrilir.

Bir ekran üçün inteqrasiya testləri lazımdırmı?

Bir ekran üçün ViewModel-in vahid testləri və UI testləri kifayətdir. İnteqrasiya testləri bir ekran üçün yalnız o halda əsaslandırılır ki, ekran bir neçə verilənlər mənbəyi ilə qarşılıqlı əlaqədə olur — məsələn, iki fərqli API-dən cavabları birləşdirir və ya eyni anda şəbəkəyə və lokal bazaya verilənlər yazır.

İnteqrasiya testləri nə qədər tez-tez işə salınmalıdır?

İnteqrasiya testləri hər pull request-də CI pipeline-da və əsas buraxılışlardan əvvəl işə salınır. Həmçinin asılılıqlarda və ya test mühitində dəyişikliklərlə bağlı qüsurları aşkar etmək üçün gecə (nightly build) tam inteqrasiya testləri dəstini işə salmaq tövsiyə olunur.

Xülasə

  • İnteqrasiya testi tətbiq komponentləri — şəbəkə qatı, verilənlər bazası və xidmətlər arasında qarşılıqlı əlaqəni yoxlayır.
  • Big Bang kiçik layihələr üçün uyğundur, Bottom-Up və Top-Down — mürəkkəb arxitekturalı sistemlər üçün.
  • MockWebServer və OHHTTPStubs müvafiq olaraq Android və iOS üçün əsas server emulyasiya alətləridir.
  • İnteqrasiya testləri Martin Fowler-ə görə vahid yoxlamalarda buraxılmış qüsurların 40%-ə qədərini aşkar edir.
  • Asılılıqların izolyasiyası in-memory bazalar və stublar vasitəsilə testlərin sabitliyini artırır və qeyri-deterministik nasazlıqları aradan qaldırır.
  • Düzəliş dəyəri inteqrasiya testi mərhələsində istehsala keçmiş qüsurdan 5 dəfə aşağıdır.
  • Daxil edin inteqrasiya testlərini hər pull request-də CI pipeline-a və tam əhatə üçün gecə icralarına.

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