Screenshot Test: bu nima, turlari va testda qanday ishlaydi

Muallif: IT Sectr Nashr etilgan: 2026-04-10 O'qish vaqti: 9 daq

Screenshot Test — foydalanuvchi interfeysini avtomatik tekshirish, bunda ilova ekranlarining skrinshotlari etalon tasvirlar bilan solishtiriladi. Golden testlardan farqli o‘laroq, screenshot testlari real qurilmalarda yoki emulyatorlarda bajariladi, navigatsiya, tizim elementlari va animatsiyalar bilan to‘liq ekranlarni oladi va ilova bilan o‘zaro aloqa qilish uchun UI Automator (Android) yoki XCUITest (iOS) dan foydalanadi. Batafsil — Android UI Automator hujjatlarida.

Asosiy

  • Screenshot Test — etalon bilan solishtirish uchun qurilmada to‘liq ekran skrinshotini olish
  • UI Automator — dasturiy skrinshot olish va UI bilan o‘zaro aloqa qilish uchun Android frameworki
  • XCUITest — iPad, iPhone va Accessibility qo‘llab-quvvatlashi bilan screenshot testlari uchun iOS frameworki
  • Firebase Test Lab — screenshot testlarini ko‘plab real qurilmalarda parallel ishga tushirish
  • Diff-tahlil — skrinshotlarni etalon bilan solishtirish, o‘zgarishlarni ajratib ko‘rsatish va HTML hisoboti

Screenshot Test nima va nima uchun kerak?

Screenshot Test — bu foydalanuvchi interfeysining end-to-end testi bo‘lib, unda test ilova ekranini ochadi, harakatlarni bajaradi (bosish, matn kiritish, aylantirish) va olingan holatning skrinshotini oladi. Skrinshot repozitariyda saqlanadigan etalon (baseline) bilan solishtiriladi. Agar skrinshotlar farq qilsa — test muvaffaqiyatsiz bo‘ladi. Screenshot testlari birlik testlarida ko‘rinmaydigan vizual regressiyalarni aniqlaydi: noto‘g‘ri chekinishlar, elementlarning ustma-ust tushishi, noto‘g‘ri ranglar.

Nima uchun golden testlar mavjud bo‘lsa ham screenshot testlari kerak — golden testlari komponentlarni izolyatsiya qilingan holda tekshiradi: bitta tugma, bitta karta, bitta matn. Screenshot testlari butun ekranni ishlab chiqarishga maksimal yaqin muhitda tekshiradi: real navigatsiya, real ma’lumotlar (yoki maksimal realistik moklar), real tizim shriftlari, real holat paneli. Faqat screenshot testi real qurilmada tugmaning boshqa element bilan ustma-ust tushishini ko‘rsata oladi.

Screenshot testlarining biznes qiymati

Biznes qiymati — Google (2023) ma’lumotlariga ko‘ra, vizual xatolar mobil ilova xatolarining 15-25% ini tashkil qiladi. Screenshot testlari ilgari QA muhandislari tomonidan qo‘lda bajarilgan vizual sifat tekshiruvini avtomatlashtiradi. Bitta screenshot testi bitta ekranni qo‘lda test qilishning 5-10 daqiqasini o‘rnini bosadi. 50 ekranli ilova uchun tejash: bitta regressiya o‘tishi uchun 4-8 kishi-soat. Screenshot testlari 2-3 reliz siklida o‘zini oqlaydi.

Screenshot Test vs Golden Test: yondashuvlarni solishtirish

Golden testlari tezroq va soddaroq: komponentni off-screen buferda render qilish millisoniyalar davom etadi, qurilma talab qilmaydi, CI da barqaror. Screenshot testlari realistikroq: tizim elementlari bilan real ekranni oladi, animatsiyalar va navigatsiyani qo‘llab-quvvatlaydi, real qurilmalarda ishlaydi. Tanlov maqsadga bog‘liq: dasturchi uchun tez fikr-mulohaza (golden) yoki relizdan oldin maksimal realizm (screenshot).

XarakteristikaScreenshot TestGolden Test
Tezlik2-30 soniya50-200 ms
RealizmMaksimal (real qurilma)Cheklangan (off-screen)
Qurilma talab qiladiHa (emulyator/fizik)Yo‘q (JVM, XCTest)
AnimatsiyalarQo‘llab-quvvatlaydiQo‘llab-quvvatlamaydi
NavigatsiyaKo‘p bosqichli ssenariylarBitta komponent
FlakinessYuqori (tarmoq, vaqtlash)O‘rta (GPU, shriftlar)
ParallellikDevice Farm (Firebase, AWS)Ko‘p oqimli JVM/XCTest

Qoplash strategiyasi: golden + screenshot

Golden + Screenshot — komponentlar kutubxonasidagi (Design System) har bir UI komponenti uchun golden testlaridan foydalaning. Vizual regressiyalarning 80% komponent darajasida ushlanadi. Screenshot testlari — muhim foydalanuvchi yo‘llari uchun: onboarding, kirish, to‘lov oqimi, savat. Komponentlarning real ekranda integratsiyasi bilan bog‘liq 20% regressiyalar faqat screenshot testlari bilan ushlanadi. IT Sectr da 80/20 nisbatidan foydalanamiz: 400 golden + 100 screenshot.

Qachon screenshot testi kerak emas — agar ekran interaktivliksiz statik tarkibdan iborat bo‘lsa, komponentning golden testi bir xil tekshirish darajasini arzonroq narxda beradi. Agar ekran dinamik o‘zgarsa (lenta, chat), screenshot testi murakkab ma’lumot konfiguratsiyasi va kutish vaqtini talab qiladi. Bunday hollarda asosiy holat uchun screenshot (bo‘sh ro‘yxat, yuklash) va ro‘yxatdagi alohida kartalar uchun golden dan foydalaning.

Android uchun UI Automator va Firebase Test Lab

UI Automator — ilovalararo UI testi uchun Android frameworki. UiDevice.takeScreenshot() orqali skrinshot olish imkonini beradi. Espresso dan farqli o‘laroq (bitta ilova ichida ishlaydi), UI Automator tizim dialoglari (ruxsatlar, bildirishnomalar) va boshqa ilovalar bilan o‘zaro aloqa qila oladi. UI Automator da screenshot testi: ilovani ochish, yuklanishni kutish, skrinshot olish, etalon bilan solishtirish.

kotlin
class LoginScreenScreenshotTest {

    @get:Rule
    val rule = ComposeTestRule.createAndroidComposeRule<MainActivity>()

    @Test
    fun login_screen_default() {
        val device = UiDevice.getInstance(
            InstrumentationRegistry.getInstrumentation()
        )

        // Ekran yuklanishini kutamiz
        IdlingRegistry.getInstance().waitForIdle()

        // Skrinshot olamiz
        val screenshot = device.takeScreenshot()
        val golden = loadGolden("login_default.png")

        // Etalon bilan solishtiramiz
        val diff = ImageComparator.compare(screenshot, golden)
        assertTrue(diff.similarity > 0.98)
    }
}

Firebase Test Lab — yuzlab real qurilmalarda parallel instrumental testlarni ishga tushirish uchun Google Cloud xizmati. Firebase Test Lab da screenshot testlari turli qurilmalarda (Pixel 7, Galaxy S24, Xiaomi 14) skrinshotlarni oladi va ularni etalonlar bilan solishtiradi. Afzallik: bitta test 20 qurilmada 10-15 daqiqada UI ni tekshiradi. Kamchilik: narxi (20 qurilma uchun $1-5). Firebase Test Lab CI bilan gcloud CLI yoki Gradle plagini orqali integratsiyalanadi.

Shot: screenshot testlarini soddalashtiruvchi kutubxona

Shot — Android da screenshot testi uchun kutubxona, skrinshotlarni yaratish va solishtirishni osonlashtiradi. Shot Espresso va UI Automator asosida ishlaydi, golden boshqaruvi (yaratish, yangilash, o‘chirish), chegara (piksel yoki foiz) bilan solishtirish va HTML hisobotini yaratishni qo‘shadi. Shot o‘z tasvir solishtirish infratuzilmasini yozmasdan screenshot testini tez joriy qilishni xohlovchi loyihalar uchun mos keladi.

iOS uchun XCUITest va Xcode Cloud

XCUITest — iOS, iPadOS va tvOS ilovalarini UI testi uchun Apple frameworki. XCUITest da screenshot testlari ekranni olish uchun XCUIScreen.main.screenshot() va skrinshotni saqlash uchun XCAttachment dan foydalanadi. XCUITest foydalanuvchi harakatlarini simulyatsiya qiladi: tap, swipe, typeText va har qadamdan so‘ng skrinshot oladi. Xcode 16+ da XCTAttachment orqali skrinshotlarni etalonlar bilan solishtirish uchun o‘rnatilgan qo‘llab-quvvatlash qo‘shilgan.

swift
final class LoginScreenScreenshotTests: XCTestCase {

    var app: XCUIApplication!

    override func setUp() {
        super.setUp()
        app = XCUIApplication()
        app.launch()
    }

    func test_login_initial_state() {
        let loginButton = app.buttons["login_button"]
        XCTAssertTrue(loginButton.exists)

        // Skrinshot olamiz
        let screenshot = app.screenshot()
        let attachment = XCTAttachment(screenshot: screenshot)
        attachment.name = "Login-Screen-Initial"
        attachment.lifetime = .keepAlways
        add(attachment)

        // Etalon bilan solishtirish (XCTAttachment + golden talab qiladi)
        assertScreenshot(
            screenshot: screenshot,
            goldenName: "login_initial_state"
        )
    }
}

Xcode Cloud — Apple dan iOS ilovalarini qurish va test qilish uchun bulutli CI. Xcode Cloud simulyatorlarda XCUITest testlarini ishga tushirishni qo‘llab-quvvatlaydi. Screenshot testlari bir nechta simulyatorda parallel ishga tushirilishi mumkin (iPhone 15, iPhone 15 Pro Max, iPad Pro). Natijalar: qo‘shimchalar bilan XCResult Bundle. Xcode Cloud GitHub/GitLab ga o‘rnatilmagan — integratsiya uchun Xcode Cloud Webhooks dan foydalaning. Muqobil: macos-14 va xcodebuild bilan GitHub Actions.

Solishtirish frameworklari — iOSSnapshotTestCase (Uber) simulyatorda ishga tushirilsa, screenshot testlari uchun ham ishlaydi. SwiftSnapshotTesting (pointfree) ko‘proq komponentlarning golden testlariga yo‘naltirilgan. iOS da screenshot testlari uchun o‘rnatilgan XCUITest + XCTAttachment + maxsus ImageComparator (Pixelmator yoki AImage) dan foydalaning. CI da simulyatordan foydalaning — real qurilmalarda screenshot testlari faqat Device Farm (AWS Device Farm) orqali ishlaydi.

CI da screenshot testlarini avtomatlashtirish jarayoni

Baseline boshqaruvi — etalon skrinshotlar repozitariyda (Git LFS) yoki S3 da saqlanadi. Har bir skrinshot shablon bo‘yicha nomlanadi: {testName}_{device}_{orientation}_{locale}.png. Misol: loginScreenPixel7PortraitRu.png. Yangi qurilma yoki locale qo‘shilganda, yangi baseline yaratiladi. UI o‘zgartirilganda, eski baseline lar code review dan so‘ng yangilari bilan almashtiriladi. Baseline test manbalari kabi kod bazasining bir qismidir.

CI Pipeline — (1) Ilovani qurish. (2) Emulyatorlarda/simulyatorlarda screenshot testlarini ishga tushirish. (3) Skrinshotlarni baseline bilan solishtirish. (4) Nomuvofiqlik bo‘lsa — diff tasvirini yaratish. (5) Diff-artefaktlarni yuklash (actual, expected, diff — uchta fayl). (6) Natijalar jadvali bilan HTML hisobotini nashr qilish. (7) Agar chegara oshib ketgan bo‘lsa — test muvaffaqiyatsiz bo‘ladi. (8) Sharhlovchi diff-artefaktlarni ko‘rib chiqadi va qaror qabul qiladi: tasdiqlash (baseline ni yangilash) yoki rad etish (kodni tuzatish).

Chegara va tolerantlik — mutlaq pikselma-piksel solishtirish juda qattiq. SSIM (Structural Similarity Index) yoki MSE (Mean Squared Error) dan foydalaning. SSIM 0.98 = 98% strukturaviy o‘xshashlik — yaxshi chegara. Turli ekranlar uchun turli chegaralar kerak bo‘lishi mumkin: qorong‘u mavzu (ko‘proq qora — yuqori aniqlik), gradientlar (ko‘proq shovqin — past aniqlik). Chegarani per-test parametr orqali sozlang: @ScreenshotTest(threshold = 0.99).

Device Farm vs Simulyator — real qurilmalarda testlar (Firebase Test Lab, AWS Device Farm) maksimal realizm beradi, lekin sekin va pulli. Simulyatorlarda/emulyatorlarda testlar — tez va bepul, lekin real qurilma xususiyatlarini ko‘rsatmaydi (turli GPU, ekran rang uzatishi, piksel zichligi). Strategiya: pre-merge tekshiruvi uchun simulyator (5 daqiqa), Device Farm nightly uchun (30 daqiqa, 20 qurilma). IT Sectr da tungi o‘tishlar uchun eng yaxshi 10 Android qurilmasida Firebase Test Lab dan foydalanamiz.

Tez-tez so‘raladigan savollar

Screenshot Test vs Golden Test — nimani tanlash kerak?

Golden Test — har bir kommitda alohida UI komponentlarini tez tekshirish uchun (50-200 ms). Screenshot Test — relizdan oldin real qurilmalarda butun ekranlarni E2E tekshirish uchun (2-30 soniya). Ikkalasidan foydalaning: Design System komponentlari uchun golden, muhim foydalanuvchi yo‘llari uchun screenshot. 80/20 nisbati ko‘pchilik loyihalar uchun optimaldir.

Skrinshotlarni solishtirish uchun qanday chegaradan foydalanish kerak?

SSIM 0.98 — ko‘pchilik ekranlar uchun yaxshi boshlang‘ich chegara. Qorong‘u mavzu uchun 0.99 dan foydalanish mumkin (yuqori kontrast — aniqroq solishtirish). Gradient va tasvirlar bilan ekranlar uchun — 0.95-0.97. Mutlaq pikselma-piksel solishtirishdan (MSE = 0) foydalanmang — anti-aliasing va GPU farqlari tufayli 20-30% noto‘g‘ri musbat natijalar beradi. Chegarani har bir test uchun individual sozlang.

Baseline skrinshotlarni qanchalik tez-tez yangilash kerak?

Har bir ataylab UI o‘zgarishida — ranglar, shriftlar, chekinishlar, belgilar o‘zgarishi, elementlarni qo‘shish/o‘chirish. Muhit o‘zgarishida (OS versiyasi, CI shriftlari) baseline ni yangilamang — bu flaky test belgisi. Baseline faqat dasturchi tomonidan code review dan so‘ng lokal yangilanadi: eski baseline o‘chirildi, record=true bilan testlar ishga tushirildi, yangi skrinshotlar tekshirildi, commit qilindi.

Screenshot testlarini UI Automator siz qilish mumkinmi?

Ha — Android da Espresso va iOS da XCUITest orqali. Espresso ilova jarayoni ichida ishlaydi va Accessibility Service ni talab qilmaydi (UI Automator kabi). XCUITest — UI testlari uchun standart Apple frameworki. Screenshot testlari uchun farq minimal: XCUITest biroz barqarorroq (mahalliy Apple API), UI Automator biroz moslashuvchanroq (jarayonlararo aloqa).

Screenshot testlari reliz siklini sekinlashtiradimi?

To‘g‘ri sozlangan bo‘lsa — yo‘q. Pre-merge: faqat o‘zgartirilgan ekranlarda screenshot testlarini ishga tushiring (30-60 soniya). Nightly: Device Farm da to‘liq o‘tish (30 daqiqa, 20 qurilma). Emulyatorda screenshot testlarining bajarilish vaqti: har bir ekran uchun 2-10 soniya. 20 ekran = 40-200 soniya. Bu bitta ekranni qo‘lda test qilish vaqtidan (5-10 daqiqa) kamroq.

Xulosalar

  • Screenshot Test — real qurilmalarda skrinshotlarni olish va solishtirish orqali UI ni E2E tekshirish
  • Golden Test dan farqi — screenshot navigatsiya bilan butun ekranlarni test qiladi, golden — alohida komponentlarni
  • Android — UI Automator, Espresso, Firebase Test Lab, golden boshqaruvi uchun Shot kutubxonasi
  • iOS — XCUIScreen.screenshot() bilan XCUITest, Xcode Cloud, Uber dan iOSSnapshotTestCase
  • CI Pipeline — simulyatorlarda pre-merge (tez), Device Farm da nightly (realistik)
  • Baseline — Git LFS da saqlash, shablon bo‘yicha nomlash {test}_{device}_{orientation}_{locale}
  • Chegara — boshlang‘ich chegara sifatida SSIM 0.98, har bir test uchun individual sozlanadi

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