QA 14: Mobil ilovalarni testlash — iOS va Android farqlari, Simulator, ADB, TestFlight va checklist
🧪 QA Engineer — Zero to Hero
QA 14: Mobil ilovalarni testlash — iOS va Android farqlari, Simulator, ADB, TestFlight va checklist
Holat: 2026-yil oktabr. Dars Xcode 26.5 (iOS 26.5 Simulator), Android platform-tools (
adb), TestFlight va Google Play testing track'lari asosida yozilgan. Barchaxcrun simctlbuyruqlari Xcode 26.5'da haqiqiy simulatorda sinab ko'rilgan.
Bu darsdan keyin siz: mobil ilovani web ilovadan farqli ravishda — qurilmalar, tarmoq, uzilishlar, ruxsatlar va do'kon talablarini hisobga olib testlaysiz.
- qurilmalar matritsasini analitika asosida tuzish;
- simulator/emulator va real qurilmaning chegaralarini bilish;
- 12 ta mobil yo'nalish bo'yicha checklist bilan ishlash;
xcrun simctlvaadbbilan testni tezlashtirish (dark mode, katta shrift, deep link, push, joylashuv, SMS);- TestFlight va Google Play track'lari orqali beta build'larni olish;
- mobil bug report'ni dasturchi bir urinishda qayta hosil qila oladigan qilib yozishni o'rganasiz.
Mundarija
- Mobil testlash nega alohida?
- Native, cross-platform va hybrid: testga ta'siri
- Qurilmalar matritsasi: qaysi qurilmalarda testlaymiz?
- Simulator, emulator va real qurilma
- Mobil test checklist: 12 yo'nalish
- iOS asboblari: Simulator va xcrun simctl
- Android asboblari: Emulator, adb va Developer options
- Beta tarqatish: TestFlight, Google Play va Firebase
- Cloud device farm'lar
- Do'kon talablari bilan bog'liq QA tekshiruvlari
- Mobil bug report
- Amaliy mashqlar
- O'zingizni tekshiring
- Xulosa
- Manbalar
1. Mobil testlash nega alohida? {#nega-alohida}
Web ilova brauzerda ishlaydi va yangi versiya serverga chiqqan zahoti hamma foydalanuvchiga yetadi. Mobil ilova esa foydalanuvchining telefoniga o'rnatiladi. U telefon resurslari, operatsion tizim qoidalari, tarmoq va hatto kiruvchi qo'ng'iroqlar bilan "birga yashaydi".
| Jihat | Web ilova | Mobil ilova |
|---|---|---|
| Yangilanish | Deploy qilindi — hamma yangi versiyada | Do'kon review'i + foydalanuvchi yangilashi kerak; eski versiyalar oylab ishlaydi |
| Muhit | Bir nechta brauzer | Yuzlab model, OS versiyalari, ishlab chiqaruvchi qobiqlari (One UI, HyperOS...) |
| Tarmoq | Ko'pincha barqaror | Wi-Fi ↔ LTE almashuvi, metro, lift, sekin 3G, butunlay offline |
| Hayot sikli | Tab ochiq yoki yopiq | Fon, old fon, OS xotira uchun ilovani o'ldiradi, holatni tiklash kerak |
| Uzilishlar | Deyarli yo'q | Qo'ng'iroq, SMS, push, past batareya ogohlantirishi |
| Ruxsatlar | Kam (kamera, joylashuv) | Kamera, rasm, joylashuv, bildirishnoma, kontaktlar — har birining "rad etish" holati |
| Apparat | Deyarli yo'q | Kamera, GPS, biometrika (Face ID, barmoq izi), sensorlar |
| Debug vositalari | DevTools | Xcode, Android Studio, adb, Proxyman |
| Tarqatish | URL | App Store/Google Play, TestFlight, testing track'lar |
Shulardan QA uchun eng muhim xulosa: mobil bug'ni "tez tuzatib qo'yib" bo'lmaydi. Agar v2.4.0 da to'lov ekrani buzilgan bo'lsa, tuzatilgan v2.4.1 do'kon review'idan o'tib, foydalanuvchi uni yangilaguncha muammo davom etadi. Shuning uchun mobil reliz oldidan testlash odatda web'dagidan chuqurroq bo'ladi.
🧠 Esda tuting: Server API o'zgarganda faqat yangi ilovani emas, eski versiyalarni ham tekshiring. DemoBozor v2.5 chiqqanda do'konda v2.3 va v2.4 foydalanuvchilari ham bor. Yangi backend ular uchun ham ishlashi yoki "Majburiy yangilash" (force update) ekranini to'g'ri ko'rsatishi kerak.
2. Native, cross-platform va hybrid: testga ta'siri {#ilova-turlari}
| Tur | Texnologiya | QA uchun muhim jihat |
|---|---|---|
| Native | iOS: Swift (SwiftUI, UIKit); Android: Kotlin (Jetpack Compose, View) | Har platformada alohida kod — bir xil funksiya iOS'da ishlab, Android'da buzilishi mumkin |
| Cross-platform | Flutter, React Native, Kotlin/Compose Multiplatform | Umumiy kod ko'p, lekin platforma farqlari (orqaga tugmasi, klaviatura, ruxsatlar) baribir bor |
| Hybrid / WebView | Ilova ichida web sahifa (Capacitor, Cordova yoki native ilovadagi WebView ekranlar) | Web xatolari (CSS, JS) mobil ichida; to'lov sahifasi ko'pincha WebView'da bo'ladi |
Amaliy oqibatlari:
- Identifikatorlar. Avtomatlashtirish uchun iOS'da
accessibilityIdentifier, Android'daresource-idyoki ComposetestTag, Flutter'da Semantics kerak bo'ladi (QA 22). - Proksi. Flutter ilovalar tizim proksisini ishlatmaydi, shuning uchun Proxyman bilan qo'shimcha sozlash kerak bo'ladi (QA 15).
- WebView debug. iOS 16.4+ da
WKWebViewuchunisInspectable = truebo'lsa, Mac'dagi Safari'ning Develop menyusidan WebView'ni tekshirasiz. Android'daWebView.setWebContentsDebuggingEnabled(true)va Chrome'dagichrome://inspectsahifasi ishlaydi. - Platforma xulqi. Android'da tizim "Orqaga" tugmasi/ishorasi bor, iOS'da chetdan surib orqaga qaytiladi (swipe-back). Ikkalasi ham alohida test qilinadi.
💡 Maslahat: "Bu Flutter, bitta kod — bitta platformada tekshirsak yetadi" degan gapga ishonmang. Ruxsat dialoglari, klaviatura, shriftlar, push va deep link har platformada OS tomonidan boshqariladi.
3. Qurilmalar matritsasi: qaysi qurilmalarda testlaymiz? {#qurilma-matritsasi}
Hamma qurilmada testlab bo'lmaydi (bu testlashning 2-printsipi — QA 2). Shuning uchun qurilmalar matritsasi tuziladi: qaysi model, qaysi OS va qaysi ekran o'lchamida qancha chuqurlikda testlash kerakligi yoziladi.
Ma'lumot qayerdan olinadi?
- O'z analitikangiz: App Store Connect Analytics, Google Play Console, Firebase Analytics — foydalanuvchilaringiz qaysi qurilma va OS'da ekanini ko'rsatadi. Bu eng ishonchli manba.
- Bozor statistikasi: yangi ilova uchun umumiy rasm.
- Mahsulot qarori: minimal qo'llab-quvvatlanadigan OS versiyasi (masalan, DemoBozor uchun xayoliy qaror — iOS 17+ va Android 9+).
🇺🇿 Mahalliy kontekst: StatCounter ma'lumotiga ko'ra 2026-yil sentabrda O'zbekistonda mobil OS ulushi: Android 82.28%, iOS 17.71%. Demak, mahalliy auditoriyali ilovada Android, ayniqsa byudjet va o'rta segment qurilmalari matritsada katta o'rin egallashi kerak. Global auditoriyada nisbat boshqacha bo'ladi — har doim o'z analitikangizga tayaning.
Darajali (tier) yondashuv
| Daraja | Qaysi qurilmalar | Qanchalik chuqur | Qayerda |
|---|---|---|---|
| Tier 1 | Foydalanuvchilarning eng katta qismi ishlatadigan 4–6 model | To'liq regression + yangi funksiyalar | Real qurilmalar (ofisda) |
| Tier 2 | Keyingi muhim modellar, chekka ekranlar (eng kichik, eng katta, planshet) | Smoke + asosiy ssenariylar | Simulator/emulator, kerak bo'lsa cloud |
| Tier 3 | Eski OS, kam uchraydigan modellar, foldable'lar | Reliz oldidan tanlab | Cloud device farm |
DemoBozor uchun namunaviy matritsa (modellar faqat misol; o'zingiznikini analitikadan oling):
| Platforma | Qurilma (misol) | OS | Nega tanlangan |
|---|---|---|---|
| iOS | iPhone SE (3rd gen) | iOS 17 | Eng kichik ekran, eng past qo'llab-quvvatlanadigan OS |
| iOS | iPhone 13 | iOS 18 | Keng tarqalgan o'rta avlod |
| iOS | iPhone 17 Pro Max | iOS 26 | Eng katta ekran, Dynamic Island, eng yangi OS |
| iOS | iPad (A16) | iPadOS 26 | Planshet layout, Split View |
| Android | Samsung Galaxy A seriyasi (budjet) | Android 14 | Ommaviy segment, One UI, kam RAM |
| Android | Xiaomi Redmi Note seriyasi | Android 15 | HyperOS — fonda ilovani "agressiv" yopishi bilan mashhur |
| Android | Google Pixel 8 | Android 16 | Toza Android, eng yangi API |
| Android | Eski Android 9 qurilma | Android 9 | Minimal qo'llab-quvvatlanadigan versiya |
⚠️ Diqqat: Matritsani bir marta tuzib, unutib qo'ymang. Har chorakda analitikani yangilang. Yangi iPhone yoki yangi Android versiyasi chiqqanda ham ko'rib chiqing.
4. Simulator, emulator va real qurilma {#simulator-vs-real}
- iOS Simulator — Mac'da iOS muhitini simulyatsiya qiladi. U ARM qurilmaning nusxasi emas, Mac protsessorida ishlaydi.
- Android Emulator — virtual Android qurilma (AVD) ishga tushiradi.
| Imkoniyat | Simulator / Emulator | Real qurilma |
|---|---|---|
| UI, layout, navigatsiya, ko'p biznes mantiq | ✅ Tez va arzon | ✅ |
| Dark mode, shrift o'lchami, til | ✅ (simctl ui, sozlamalar) | ✅ |
| Deep link, push simulyatsiyasi, joylashuv | ✅ (simctl openurl/push/location, emulator console) | ✅ |
| Kamera, NFC, Bluetooth | ❌ yoki cheklangan | ✅ |
| Haqiqiy unumdorlik, isish, batareya sarfi | ❌ (Mac resurslari boshqacha) | ✅ |
| Haqiqiy uyali tarmoq, operator, signal yo'qolishi | ❌ (faqat simulyatsiya) | ✅ |
| Biometrika (Face ID, barmoq izi) | Simulyatsiya (Enrolled / Matching / Non-matching) | ✅ Haqiqiy |
| Ishlab chiqaruvchi qobig'i (One UI, HyperOS) va batareya optimizatsiyasi | ❌ | ✅ |
| TestFlight/Play'dan o'rnatish oqimi | ❌ | ✅ |
Qoida: kundalik ish va avtomatik testlar simulator/emulatorda, reliz oldidan esa Tier 1 real qurilmalarda asosiy ssenariylar bajariladi.
5. Mobil test checklist: 12 yo'nalish {#yonalishlar}
Mobil testlash xaritasi: 12 ta yo'nalish — o'rnatish, hayot sikli, uzilishlar, ruxsatlar, tarmoq va boshqalar
Quyidagi checklist DemoBozor misolida yozilgan. Uni o'z loyihangizga moslang va har relizda ishlating (QA 7).
5.1 O'rnatish, yangilash va o'chirish
- Toza o'rnatish (fresh install): onboarding, ruxsat so'rovlari, birinchi kirish.
- Yangilash (update) v2.4 → v2.5: foydalanuvchi tizimdan chiqib ketmaydi, savatcha va sozlamalar saqlanadi, lokal DB migratsiyasi xatosiz o'tadi. Fresh install va update — turli kod yo'llari, ikkalasi ham test qilinadi.
- Majburiy yangilash: server "minimal versiya 2.5" desa, eski ilova tushunarli ekran ko'rsatadi va do'konga yo'naltiradi.
- O'chirib qayta o'rnatish: iOS'da Keychain'dagi ma'lumot qolishi mumkin — kutilgan xulqmi?
- Joy kam: telefon xotirasi to'la bo'lsa, o'rnatish yoki yuklab olish xabari tushunarlimi.
5.2 Hayot sikli (lifecycle)
- Ilovani fonga o'tkazib, 1 daqiqa va 30 daqiqadan keyin qaytarish: ekran va kiritilgan ma'lumot joyidami?
- OS xotira uchun ilovani o'ldirsa (process death): qaytganda ilova to'g'ri tiklanadimi yoki ochiq to'lov ekranida crash bo'ladimi?
- Android'da Don't keep activities (Developer options) yoqilganda har bir ekranga kirib-chiqish.
- Ekran qulflanib, qayta ochilganda sessiya va taymerlar (SMS kod 120 soniyasi) to'g'ri ishlaydimi.
5.3 Uzilishlar (interruptions)
DemoBozor'ning eng nozik joylari — SMS kod kiritish va to'lov ekranlari:
- SMS kod kiritayotganda kiruvchi qo'ng'iroq — qo'ng'iroqdan keyin kod maydoni va taymer holati;
- to'lov tasdiqlanayotganda push keladi va foydalanuvchi uni bosadi — to'lov natijasi yo'qolmaydimi;
- past batareya ogohlantirishi, budilnik, Control Center yoki Notification Center ochilishi;
- boshqa ilovaga o'tib (masalan, SMS kodni ko'chirish uchun) qaytish.
5.4 Ruxsatlar (permissions)
Har bir ruxsat uchun kamida 5 holat: birinchi so'rov, ruxsat berish, rad etish, bir martalik ruxsat, keyin Sozlamalardan o'zgartirish.
| Ruxsat | DemoBozor'da qayerda | Muhim nuans |
|---|---|---|
| Bildirishnoma | Buyurtma holati push'lari | Android 13+ da alohida runtime ruxsat (POST_NOTIFICATIONS) |
| Joylashuv | Yetkazib berish manzili | iOS: "Allow Once", aniq/taxminiy joylashuv; Android 12+: taxminiy joylashuv tanlovi |
| Kamera | Profil rasmi, sharhga rasm | Rad etilsa, Sozlamalarga yo'naltiruvchi tushuntirish kerak |
| Rasmlar | Sharhga rasm qo'shish | iOS: cheklangan (tanlangan rasmlar) kirish |
⚠️ Diqqat: iOS'da foydalanuvchi ilova ochiq turganda Sozlamalardan ruxsatni o'zgartirsa, tizim ilovani yopishi mumkin (
simctl privacyyordamida ham shunday ogohlantirish bor). Qaytganda ilova xatosiz qayta ishga tushishi kerak.
5.5 Tarmoq
- Ilova offline holatda ochiladi: bo'sh oq ekran emas, tushunarli xabar va "Qayta urinish" bo'lishi kerak.
- So'rov o'rtasida aloqa uziladi: buyurtma yarim yo'lda qolsa nima bo'ladi?
- Wi-Fi ↔ LTE almashuvi rasm yuklash paytida.
- Sekin 3G: skeleton/loader, timeout, tugmani qayta-qayta bosish.
- Dublikat buyurtma: foydalanuvchi sekin tarmoqda "Buyurtma berish"ni uch marta bosdi. Nechta buyurtma yaratildi?
- Captive portal (mehmonxona yoki kafe Wi-Fi'si, login sahifasi bilan).
Sekin tarmoqni yaratish: Proxyman Network Conditions (QA 15), Apple'ning Network Link Conditioner vositasi yoki Android emulator console (network speed, network delay).
5.6 Push va deep link
- Push ilova ochiq, fonda va butunlay yopiq holatda keladi — har birida bosilganda to'g'ri ekran ochiladimi?
demobozor://orders/1043deep link: foydalanuvchi tizimga kirmagan bo'lsa, avval login, keyin aynan shu buyurtmaga o'tadimi?- Universal link (iOS) / App Link (Android):
https://demobozor.example/product/42havolasi brauzerda emas, ilovada ochiladimi? - Noto'g'ri parametrlar:
demobozor://product/abc, mavjud bo'lmagan ID — crash emas, "topilmadi" ekrani.
5.7 Ekran va orientatsiya
- Eng kichik ekran (iPhone SE): tugmalar klaviatura ostida qolmaydimi, matn kesilmaydimi?
- Eng katta ekran va planshet: layout cho'zilib xunuk bo'lmaydimi?
- Notch va Dynamic Island: kontent "xavfsiz hudud"dan (safe area) chiqmaydimi?
- Gorizontal holat (agar qo'llab-quvvatlansa), iPad'da Split View, foldable'larda ochish-yopish.
5.8 Imo-ishora va klaviatura
- iOS swipe-back, Android tizim "Orqaga" ishorasi: forma ma'lumoti yo'qolmaydimi, ogohlantirish chiqadimi?
- Pull-to-refresh, uzoq bosish, ikki marta bosish.
- Klaviatura turi: telefon uchun raqamli, email uchun
@bor klaviatura. - SMS kodni avtomatik to'ldirish: iOS'da
textContentType = .oneTimeCode, Android'da SMS Retriever yoki SMS User Consent API. - O'zbek lotin harflari (
o',g'yokioʻ,gʻ), kirill va emoji kiritish (QA 25).
5.9 Ko'rinish va accessibility
- Dark mode: matn va fon kontrasti, rasmlar va logotiplar ko'rinishi.
- Eng katta shrift (iOS Dynamic Type, Android font scale — Android 14 dan 200% gacha): matn kesilmaydimi, tugmalar ishlaydimi?
- VoiceOver/TalkBack: tugmalar nomi o'qiladimi ("tugma, Savatchaga qo'shish")?
- Reduce Motion, Bold Text, Increase Contrast.
5.10 Til, sana va vaqt
- O'zbek (lotin/kirill), rus, ingliz: uzun matnlar, ko'plik shakllari.
- Narx formati:
300 000 so'm, bo'shliq bilan ajratish. - Vaqt zonasi: telefonni Toshkent (UTC+5) dan boshqa zonaga o'tkazing — buyurtma vaqti, promo-kod muddati, SMS taymeri to'g'ri hisoblanadimi?
- Qurilma sanasini qo'lda o'zgartirish: muddati o'tgan promo-kod "tirilib" qolmaydimi?
5.11 Unumdorlik va resurslar
- Sovuq ishga tushish (cold start) vaqti — Tier 1 qurilmalarda o'lchanadi.
- Uzun katalog scroll'ida qotish (jank).
- Xotira: 50 ta mahsulotli savatcha va ko'p rasm — crash yo'qmi? Simulator'da Debug → Simulate Memory Warning.
- Batareya va trafik sarfi (fonda keraksiz so'rovlar).
- Batafsil — QA 23.
5.12 Xavfsizlik asoslari
- Logout'dan keyin token o'chadimi, orqaga tugmasi bilan himoyalangan ekranga qaytib bo'lmaydimi?
- App switcher'dagi ilova skrinshotida karta raqami yoki SMS kod ko'rinmaydimi?
- Token va shaxsiy ma'lumot
UserDefaults/SharedPreferencesda ochiq saqlanmaydimi (Keychain/Keystore kerak)? - Release build'da test sozlamalari, staging URL'lar va debug menyusi qolib ketmaganmi?
- Batafsil — QA 24.
6. iOS asboblari: Simulator va xcrun simctl {#ios-asboblar}
Simulator menyusi (QA uchun eng foydalilari)
| Menyu | Buyruq | QA'dagi foydasi |
|---|---|---|
| Device | Rotate Left / Rotate Right | Orientatsiya |
| Device | Shake | "Shake to report" kabi funksiyalar |
| Device | Home, Lock, Restart | Fon/qulf holatlari |
| Device | Erase All Content and Settings | Toza holatdan boshlash |
| Features | Face ID → Enrolled / Matching Face / Non-matching Face | Biometrik kirishning muvaffaqiyatli va muvaffaqiyatsiz holatlari |
| Features | Location → Custom Location | Yetkazib berish hududi |
| Features | Toggle Appearance | Light/Dark |
| Features | Increase / Decrease Preferred Text Size | Dynamic Type |
| Debug | Simulate Memory Warning | Xotira bosimi |
| Debug | Open System Log | Loglar |
xcrun simctl — terminaldan boshqarish
simctl Xcode bilan birga keladi. Quyidagi buyruqlar Xcode 26.5 da haqiqiy simulatorda sinab ko'rilgan. booted so'zi "hozir ishlab turgan simulator" degani; bir nechta simulator ochiq bo'lsa, xcrun simctl list devices dan UDID olib ishlating.
# Qurilmalar ro'yxati va simulatorni ishga tushirish
xcrun simctl list devices available
xcrun simctl boot "iPhone 17" # nomi yoki UDID
open -a Simulator # oynani ko'rsatish
# Ilovani o'rnatish va test argumentlari bilan ochish
xcrun simctl install booted ~/Downloads/DemoBozor.app
xcrun simctl launch booted uz.demobozor.app -uiTesting
# Dark mode va eng katta shrift (Dynamic Type)
xcrun simctl ui booted appearance dark
xcrun simctl ui booted content_size accessibility-extra-extra-extra-large
# "Toza" status bar: 9:41, to'liq batareya (skrinshotlar uchun)
xcrun simctl status_bar booted override --time "9:41" --batteryState charged --batteryLevel 100 --cellularBars 4 --wifiBars 3
xcrun simctl status_bar booted clear # qaytarish
# Joylashuv: Toshkent (format: kenglik,uzunlik)
xcrun simctl location booted set 41.2995,69.2401
# Deep link va universal link
xcrun simctl openurl booted "demobozor://orders/1043"
xcrun simctl openurl booted "https://demobozor.example/product/42"
# Ruxsatlar: berish, olib qo'yish, qayta so'rash
xcrun simctl privacy booted grant location uz.demobozor.app
xcrun simctl privacy booted revoke photos uz.demobozor.app
xcrun simctl privacy booted reset all uz.demobozor.app
# Skrinshot va video (video: Ctrl+C bilan to'xtatasiz)
xcrun simctl io booted screenshot ~/Desktop/DB-1043.png
xcrun simctl io booted recordVideo ~/Desktop/DB-1043.mov
# Ilova ma'lumotlari papkasi (lokal DB, UserDefaults fayllari)
xcrun simctl get_app_container booted uz.demobozor.app data
# Buferga SMS kod qo'yish (paste testi uchun)
echo "482913" | xcrun simctl pbcopy booted
⚠️ Diqqat:
simctl privacyruxsat oynasini chetlab o'tadi. Hujjat ham ogohlantiradi: bu Info.plist'dagi tavsif matnlari yo'qligi kabi xatolarni yashirib qo'yishi mumkin. Ruxsat oqimini testlayotganda qo'lda, haqiqiy dialog bilan tekshiring.
Push bildirishnomani simulyatsiya qilish
Payload JSON fayl bo'lishi, aps kalitini o'z ichiga olishi va 4096 baytdan oshmasligi kerak. Simulator Target Bundle kaliti bo'lsa, buyruqda bundle ID shart emas:
{
"Simulator Target Bundle": "uz.demobozor.app",
"aps": {
"alert": {
"title": "Buyurtma #1043 yo'lda",
"body": "Kuryer 30 daqiqada yetib keladi"
},
"sound": "default",
"badge": 1
},
"orderId": 1043,
"deeplink": "demobozor://orders/1043"
}
xcrun simctl push booted push-order-shipped.json
Endi uch holatni tekshiring: ilova ochiq (banner yoki ilova ichidagi xabar), fonda (bosilganda buyurtma ekrani) va yopiq (ilova ochilib, aynan #1043 ko'rinadi).
Real iPhone bilan ishlash
- Developer Mode (iOS 16+): Xcode'dan to'g'ridan-to'g'ri o'rnatilgan build'lar uchun Settings → Privacy & Security → Developer Mode. TestFlight build'lari uchun shart emas.
- Loglar: qurilmani Mac'ga ulang va Console.app da qurilmani tanlang. Xcode'da esa Window → Devices and Simulators.
- Network Link Conditioner: Developer Mode yoqilgan qurilmada Settings → Developer ichida bo'ladi. Unda 3G, "100% Loss" kabi profillar bor.
- Accessibility Inspector: Xcode → Open Developer Tool → Accessibility Inspector — elementlarning nomi va identifikatorini ko'rsatadi.
- Ekranni yozish: iOS Control Center'dagi Screen Recording — bug report uchun eng qisqa yo'l.
7. Android asboblari: Emulator, adb va Developer options {#android-asboblar}
Emulator
Android Studio → Device Manager orqali virtual qurilma (AVD) yaratasiz. Kerakli API darajasi va image turini (Google APIs yoki Google Play) tanlaysiz. Emulator oynasidagi Extended controls bo'limida joylashuv, uyali tarmoq, batareya, qo'ng'iroq/SMS, virtual sensorlar va barmoq izi simulyatsiyasi bor.
adb — Android Debug Bridge
adb Android SDK Platform Tools tarkibida keladi (macOS'da brew install android-platform-tools bilan ham o'rnatiladi). Quyidagi buyruqlar rasmiy hujjatga asoslangan:
# Ulangan qurilmalar (emulator ham)
adb devices -l
# Bir nechta qurilma bo'lsa: -s <serial>
adb -s emulator-5554 install -r app-staging-debug.apk # -r: ma'lumotni saqlab qayta o'rnatish
# O'chirish
adb uninstall uz.demobozor.app
# Deep link (rasmiy sintaksis: -W kutish, -a action, -d URI, keyin paket nomi)
adb shell am start -W -a android.intent.action.VIEW -d "demobozor://orders/1043" uz.demobozor.app
# Ilovani majburan to'xtatish va fondagi jarayonni o'ldirish (process death testi)
adb shell am force-stop uz.demobozor.app
adb shell am kill uz.demobozor.app # ilova fonda bo'lsin
# Ruxsatlarni berish va olib qo'yish (Android 6.0+)
adb shell pm grant uz.demobozor.app android.permission.CAMERA
adb shell pm revoke uz.demobozor.app android.permission.ACCESS_FINE_LOCATION
# Skrinshot: to'g'ridan-to'g'ri kompyuterga
adb exec-out screencap -p > DB-1043.png
# Video: maksimal 180 soniya (3 daqiqa); Ctrl+C bilan to'xtatiladi
adb shell screenrecord --time-limit 60 /sdcard/DB-1043.mp4
adb pull /sdcard/DB-1043.mp4 .
# Loglar: faqat ogohlantirish va xatolar
adb logcat "*:W"
adb logcat -v time > DB-1043-logcat.txt
💡 Maslahat: Logcat juda shovqinli. Bug'ni qayta hosil qilishdan oldin
adb logcat -cbilan eski loglarni tozalang, keyin faqat kerakli qismini faylga yozing.
Emulator console: qo'ng'iroq, SMS, batareya, tarmoq
adb emu orqali emulatorga "tashqi dunyo" hodisalarini yuborasiz:
# Kiruvchi qo'ng'iroq (SMS kod ekranida!)
adb emu gsm call 998901234567
# SMS kelishi (OTP oqimini tekshirish)
adb emu sms send 3700 "DemoBozor kodi: 482913"
# Batareya 5% va quvvatdan uzilgan
adb emu power capacity 5
adb emu power ac off
# Sekin tarmoq va kechikish
adb emu network speed edge
adb emu network delay gprs
# Joylashuv: E'TIBOR — avval UZUNLIK (longitude), keyin KENGLIK (latitude)
adb emu geo fix 69.2401 41.2995
⚠️ Diqqat:
geo fixda tartibsimctl locationdagidan teskari: avval uzunlik, keyin kenglik. Toshkentni teskari kiritsangiz, qurilma Hind okeani tomonga "uchib ketadi" va "yetkazib berish hududidan tashqarida" degan yolg'on bug chiqadi.
Developer options
Settings → About phone → Build number ni 7 marta bosing — "You are now a developer!" chiqadi. QA uchun eng foydali sozlamalar:
| Sozlama | Nima uchun |
|---|---|
| Don't keep activities | Har bir ekrandan chiqqanda activity yo'q qilinadi — holatni tiklash bug'larini topadi |
| Background process limit | Fondagi jarayonlarni cheklab, xotira bosimini simulyatsiya qiladi |
| Show taps, Pointer Location | Ekran videosida bosilgan joylar ko'rinadi — bug report uchun qulay |
| Window / Transition animation scale | Animatsiyalarni sekinlashtirib, vizual xatolarni ko'rish; avtomatik testlarda o'chirish |
| Force RTL layout direction | O'ngdan-chapga tillar uchun layout testi |
| Wireless debugging | Kabelsiz adb (adb pair ip:port, Android 11+) |
WebView ichini tekshirish
Ilovadagi WebView debuggable bo'lsa, Chrome'da chrome://inspect ni ochib, sahifani DevTools bilan tekshirasiz. To'lov sahifasi WebView'da bo'lsa, bu ayniqsa foydali.
8. Beta tarqatish: TestFlight, Google Play va Firebase {#beta}
QA'ga build bir necha yo'l bilan yetadi. Har birining qoidalarini bilish testlarni rejalashtirishda kerak bo'ladi.
TestFlight (iOS)
| Parametr | Qiymat (Apple hujjati) |
|---|---|
| Ichki testerlar | 100 tagacha (App Store Connect foydalanuvchilari) |
| Tashqi testerlar | 10 000 tagacha |
| Build amal qilish muddati | 90 kun |
| Tashqi test uchun review | Guruhga qo'shilgan birinchi build App Review'dan o'tadi; keyingilari to'liq review talab qilmasligi mumkin |
| Bir tester qurilmalari | 30 tagacha qurilmada |
QA uchun TestFlight odatlari:
- build raqamini (masalan,
2.4.0 (1287)) har bir bug report'ga yozing; - "What to Test" maydonida testerlarga nimani tekshirish kerakligini yozing;
- TestFlight ilovasidagi skrinshot bilan yuboriladigan fikr va crash hisobotlarini kuzatib boring;
- muddati tugayotgan build'larda test qilmang — 90 kun o'tsa, build ochilmay qoladi.
Google Play testing track'lari
| Track | Kim uchun | Muhim faktlar |
|---|---|---|
| Internal testing | Jamoa ichida tezkor test | 100 tagacha tester; yangi build daqiqalar ichida chiqadi |
| Closed testing | Tanlangan testerlar guruhi | Email ro'yxatlari yoki Google Groups orqali |
| Open testing | Hamma qo'shila oladigan beta | Do'kon sahifasida ko'rinadi |
🇺🇿 Mahalliy kontekst: 2023-yil 13-noyabrdan keyin ochilgan shaxsiy Google Play developer akkauntlari ilovani production'ga chiqarishdan oldin closed test o'tkazishi shart: kamida 12 tester, ketma-ket 14 kun davomida testga qo'shilgan bo'lishi kerak. Freelance yoki shaxsiy loyiha qilsangiz, bu muddatni reliz rejasiga qo'shing.
Firebase App Distribution
iOS va Android build'larini do'konsiz testerlarga tarqatish xizmati. Testerlar email orqali taklif oladi. CI (masalan, Fastlane — DevOps 2: Fastlane chuqur amaliyot) bilan bog'lash qulay.
9. Cloud device farm'lar {#cloud-farm}
Ofisda 50 ta telefon saqlash qimmat. Cloud device farm'lar internet orqali yuzlab real qurilmani ijaraga beradi:
| Xizmat | Nima beradi |
|---|---|
| BrowserStack (App Live, App Automate) | Qo'lda va avtomatik test, real iOS/Android qurilmalar |
| Sauce Labs (Real Device Cloud) | Real qurilmalar, Appium 3 qo'llab-quvvatlanadi |
| TestMu AI (2026-yil yanvarigacha LambdaTest nomi bilan tanilgan) | Real qurilmalar va brauzerlar buluti |
| AWS Device Farm | AWS ichida real qurilmalarda test |
| Firebase Test Lab | Android (va iOS) real hamda virtual qurilmalarda test |
Qachon kerak:
- muammo faqat ma'lum modelda chiqyapti, lekin u model ofisda yo'q;
- reliz oldidan Tier 3 qurilmalarda smoke test;
- avtomatik testlarni ko'p qurilmada parallel ishga tushirish (QA 22).
⚠️ Diqqat: Cloud qurilmalarga test hisoblarini kiritasiz, ilova esa uchinchi tomon serverida turadi. Prod ma'lumotlari va haqiqiy karta raqamlarini ishlatmang, faqat staging va test kartalardan foydalaning.
10. Do'kon talablari bilan bog'liq QA tekshiruvlari {#dokon}
Review'da rad etilish relizni bir necha kunga kechiktiradi. Ko'p rad etishlar esa QA bosqichida oldini olsa bo'ladigan xatolar. Batafsil — App Store Submission darsida.
Apple App Store uchun QA checklist:
- Crash va chala funksiyalar yo'q: "Tez kunda" degan bo'sh ekranlar, ishlamaydigan tugmalar, placeholder matnlar qolmagan.
- Ruxsat tavsiflari: har bir ruxsat uchun Info.plist'da tushunarli
NS...UsageDescriptionmatni bor. Tavsifsiz himoyalangan resursga murojaat qilish ilovani crash qiladi. - Hisobni o'chirish (Guideline 5.1.1(v)): akkaunt yaratish mumkin bo'lgan ilovada foydalanuvchi hisobini ilova ichidan o'chirishni boshlay olishi shart. Bu talab 2022-yil 30-iyundan amal qiladi. Faqat "vaqtincha o'chirish" yetarli emas. O'chirish web'da yakunlansa, ilovada aynan o'sha sahifaga to'g'ridan-to'g'ri havola bo'lishi kerak.
- Demo akkaunt: review uchun App Store Connect'dagi App Review Information bo'limiga ishlaydigan test login (va kerak bo'lsa test SMS kod) kiritilgan. Uni QA tekshiradi.
- Havolalar: maxfiylik siyosati, foydalanish shartlari va qo'llab-quvvatlash sahifalari ochiladi.
Google Play uchun:
- Data safety bo'limi ilovaning haqiqiy xulqiga mos (qaysi ma'lumot yig'iladi va kimga uzatiladi);
- shaxsiy akkaunt bo'lsa — closed test talabi (8-bo'lim);
- release build'da debug sozlamalari yo'q (masalan, foydalanuvchi sertifikatlariga ishonish — QA 15).
11. Mobil bug report {#mobil-bug-report}
Mobil bug report'da web'dagidan ko'ra ko'proq kontekst kerak (QA 8):
| Maydon | Misol |
|---|---|
| Qurilma | iPhone 13 (real) / Pixel 8 emulator |
| OS | iOS 26.5 / Android 16 |
| Ilova versiyasi va build | 2.4.0 (1287), TestFlight |
| Muhit | staging (staging-api.demobozor.example) |
| Tarmoq | Wi-Fi / LTE / 3G (Network Link Conditioner), VPN bor/yo'q |
| Til va hudud | O'zbek (lotin), Asia/Tashkent |
| Hisob turi | Oddiy xaridor, Premium a'zo |
| Takrorlanish | 5 urinishdan 3 tasida |
| Dalillar | Ekran videosi, Console/logcat, Proxyman HAR (maskalangan), Crashlytics/Sentry crash ID |
Namuna:
Sarlavha: [iOS][To'lov] Qo'ng'iroq uzilishidan keyin to'lov ekrani oq bo'lib qoladi (2.4.0)
Muhit: iPhone 13, iOS 26.5, DemoBozor 2.4.0 (1287) TestFlight, staging, Wi-Fi
Shart: Savatchada 1 ta "Choynak (elektr)" (189 000 so'm), Humo karta tanlangan
Qadamlar:
1. Savatcha → "Buyurtma berish" → "To'lash" ni bosing.
2. To'lov sahifasi yuklanayotganda boshqa telefondan shu raqamga qo'ng'iroq qiling.
3. Qo'ng'iroqni rad eting va ilovaga qayting.
Kutilgan natija: To'lov sahifasi qayta yuklanadi yoki "To'lov holati tekshirilmoqda" ko'rinadi.
Haqiqiy natija: Oq ekran; "Orqaga" bosilsa savatcha bo'sh, buyurtma #1043 "To'lov kutilmoqda" holatida qoladi.
Takrorlanish: 5/5 (real qurilmada). Simulator'da qo'ng'iroq simulyatsiyasi yo'q.
Dalillar: DB-1043.mov (ekran videosi), DB-1043-console.log, DB-1043.masked.har
Jiddiylik: Critical | Ustuvorlik: P1
💡 Maslahat: Video — mobil bug report'ning eng kuchli dalili. 20–40 soniyalik qisqa video bitta paragraf tavsifdan ko'ra ko'proq narsani ko'rsatadi: ekranlar ketma-ketligi, bosilgan joylar (Android'da Show taps yoqing) va natija.
12. Amaliy mashqlar {#mashqlar}
Mashq 1: Qurilmalar matritsasi
DemoBozor'ning (xayoliy) oylik analitikasi: Android 81% (Samsung A-seriya 34%, Redmi 22%, boshqa 25%), iOS 19% (iPhone 11–13: 9%, iPhone 14–16: 7%, iPhone 17: 3%). Minimal versiyalar: iOS 17, Android 9. Ofisda 6 ta real qurilma olishga ruxsat bor. Qaysilarini olasiz va nega?
<details> <summary>💡 Javobni ko'rish</summary>
Namuna yechim (ulushga mutanosib, lekin chekka holatlar ham qamrab olingan):
| # | Qurilma | Sabab |
|---|---|---|
| 1 | Samsung Galaxy A seriyasi (budjet), Android 14 | Eng katta segment (34%) |
| 2 | Xiaomi Redmi Note, Android 15 (HyperOS) | 22%, fondagi agressiv cheklovlar |
| 3 | Eski Android 9 qurilma (kam RAM) | Minimal versiya va zaif apparat |
| 4 | Google Pixel (eng yangi Android) | Yangi API va ruxsat o'zgarishlari birinchi shu yerda chiqadi |
| 5 | iPhone 12 yoki 13, iOS 17 | iOS'dagi eng katta guruh + minimal iOS |
| 6 | iPhone 17, iOS 26 | Eng yangi OS va Dynamic Island |
Planshet va foldable'lar Tier 3 — cloud device farm orqali. Asosiy fikr: ulush bo'yicha tanlang, lekin minimal versiya va eng yangi versiyani albatta qo'shing.
</details>
Mashq 2: SMS kod ekranidagi uzilishlar
DemoBozor'da SMS kod 120 soniya amal qiladi, qayta yuborish 60 soniyadan keyin. Kod kiritish ekrani uchun kamida 6 ta uzilish va hayot sikli test g'oyasini yozing.
<details> <summary>💡 Javobni ko'rish</summary>
- Kod kiritilayotganda kiruvchi qo'ng'iroq → qaytganda taymer davom etadi (pauza bo'lib qolmaydi), kiritilgan raqamlar saqlanadi.
- SMS'ni ko'rish uchun Messages ilovasiga o'tib qaytish → ekran qayta yuklanmaydi, avtomatik to'ldirish ishlaydi.
- Ilovani 3 daqiqaga fonga o'tkazish → qaytganda "Kod muddati tugadi, qayta yuboring" holati.
- Fonda turganda OS ilovani o'ldiradi → qaytganda telefon raqami ekraniga to'g'ri qaytish (yoki holat tiklanishi).
- Ekranni qulflab ochish → taymer real vaqtga mos.
- Kod kiritayotganda push keladi va foydalanuvchi uni bosadi → login oqimi buzilmaydi, qaytish mumkin.
- Qurilma vaqtini qo'lda 5 daqiqa oldinga surish → kod muddati server vaqti bo'yicha tekshiriladi (bypass qilinmaydi).
- Offline holatda "Kodni qayta yuborish" → tushunarli xato, 60 soniyalik cheklov buzilmaydi.
</details>
Mashq 3: Skrinshotga tayyor simulator
Bitta skript yozing: simulatorni dark mode va eng katta shriftga o'tkazsin, status bar'ni 9:41 va to'liq batareyaga o'rnatsin, deep link bilan demobozor://product/42 ni ochsin va skrinshot olsin. Oxirida sozlamalarni qaytarsin.
<details> <summary>💡 Javobni ko'rish</summary>
#!/bin/bash
set -e
DEVICE=booted
xcrun simctl ui $DEVICE appearance dark
xcrun simctl ui $DEVICE content_size accessibility-extra-extra-extra-large
xcrun simctl status_bar $DEVICE override --time "9:41" --batteryState charged --batteryLevel 100
xcrun simctl openurl $DEVICE "demobozor://product/42"
sleep 3
xcrun simctl io $DEVICE screenshot ~/Desktop/product-42-dark-xxxl.png
# Holatni qaytarish
xcrun simctl status_bar $DEVICE clear
xcrun simctl ui $DEVICE content_size large
xcrun simctl ui $DEVICE appearance light
large — iOS'dagi standart shrift o'lchami. sleep 3 ekran ochilishini kutish uchun; avtomatik testlarda buning o'rniga element paydo bo'lishini kutish yaxshiroq (QA 22).
</details>
Mashq 4: Android'da deep link va Samarqand
Emulatorda (1) demobozor://product/42 deep link'ini oching, (2) joylashuvni Samarqandga (kenglik 39.6542, uzunlik 66.9597) o'rnating, (3) kiruvchi SMS kodni simulyatsiya qiling.
<details> <summary>💡 Javobni ko'rish</summary>
adb shell am start -W -a android.intent.action.VIEW -d "demobozor://product/42" uz.demobozor.app
adb emu geo fix 66.9597 39.6542 # avval uzunlik, keyin kenglik!
adb emu sms send 3700 "DemoBozor kodi: 482913"
Eng ko'p uchraydigan xato — geo fix 39.6542 66.9597 deb yozish. Bu Samarqand emas, butunlay boshqa joy bo'ladi.
</details>
Mashq 5: Kamera ruxsati
DemoBozor'da profil rasmini kamera bilan olish mumkin. iOS va Android uchun ruxsat ssenariylari jadvalini tuzing (holat → kutilgan natija).
<details> <summary>💡 Javobni ko'rish</summary>
| # | Holat | Kutilgan natija |
|---|---|---|
| 1 | Birinchi marta "Rasm olish" | Tizim dialogi; undan oldin ilova nega kerakligini tushuntiradi |
| 2 | Ruxsat berildi | Kamera ochiladi, rasm saqlanadi |
| 3 | Rad etildi | Ilova crash bo'lmaydi; "Sozlamalarda ruxsat bering" xabari va Sozlamalarga o'tish tugmasi |
| 4 | Rad etilgandan keyin yana bosish | iOS qayta dialog ko'rsatmaydi — ilova Sozlamalarga yo'naltiradi; Android'da ikki marta rad etilgach ham shunday |
| 5 | Sozlamalarda ruxsat yoqildi va ilovaga qaytildi | Kamera endi ishlaydi (iOS ilovani qayta ishga tushirgan bo'lishi mumkin — crash emas) |
| 6 | Ruxsat ilova ochiq turganda olib qo'yildi | Ilova to'g'ri xulq qiladi, ma'lumot yo'qolmaydi |
| 7 | Kamerasiz qurilma yoki simulator | "Galereyadan tanlash" varianti qoladi |
</details>
Mashq 6: Simulator yetadimi?
Har bir testni "Simulator/Emulator yetarli" yoki "Real qurilma shart" deb ajrating: (a) Dark mode'da savatcha, (b) NFC bilan to'lov, (c) 3G'da katalog skeleton'i, (d) metroda signal yo'qolganda buyurtma, (e) Face ID muvaffaqiyatsiz bo'lganda parol so'rash, (f) 30 daqiqalik ishlatishdan keyin qurilma isishi, (g) Xiaomi'da fondagi push.
<details> <summary>💡 Javobni ko'rish</summary>
- (a) Simulator yetarli.
- (b) Real qurilma (NFC).
- (c) Simulator + Proxyman Network Conditions yetarli; reliz oldidan real qurilmada bir marta.
- (d) Real qurilma — haqiqiy tarmoq almashuvi va signal yo'qolishi.
- (e) Simulator'da Non-matching Face bilan tekshirsa bo'ladi; real qurilmada ham bir marta.
- (f) Real qurilma — isish va unumdorlik.
- (g) Real qurilma — ishlab chiqaruvchi batareya optimizatsiyasi emulatorda yo'q.
</details>
Mashq 7: Bug report yozing
Tester shunday dedi: "Android'da kartaga mahsulot qo'shib, telefonni gorizontal qilsam savatcha nolga tushadi." Mobil bug report sarlavhasi, muhit, qadamlar va natijalarni yozing (qurilma: Galaxy A seriya, Android 14, ilova 2.4.0 (1287), staging).
<details> <summary>💡 Javobni ko'rish</summary>
Sarlavha: [Android][Savatcha] Ekran gorizontal holatga burilganda savatcha bo'shab qoladi (2.4.0)
Muhit: Samsung Galaxy A seriya, Android 14, DemoBozor 2.4.0 (1287), staging, Wi-Fi, uz-Latn
Shart: Avtomatik burilish yoqilgan, foydalanuvchi tizimga kirgan
Qadamlar:
1. Katalog → "Paxta ko'ylak" → "Savatchaga qo'shish" (soni: 2).
2. Savatcha ekranini oching — 2 ta mahsulot ko'rinadi.
3. Telefonni gorizontal holatga buring.
Kutilgan natija: Savatchada 2 ta mahsulot qoladi, layout gorizontalga moslashadi.
Haqiqiy natija: Savatcha "Bo'sh" ko'rsatiladi; qayta vertikal qilinsa ham bo'sh. Server'da savatcha saqlangan
(GET /api/v1/cart → 2 ta mahsulot, Proxyman bilan tekshirildi) — muammo ilovaning holatni saqlashida.
Takrorlanish: 4/4. iOS'da takrorlanmadi.
Dalillar: video (Show taps yoqilgan), logcat, Proxyman so'rov/javob skrinshoti
Jiddiylik: Major | Ustuvorlik: P2
Muhim jihatlar: platforma va modul sarlavhada; "Don't keep activities" bilan ham takrorlanishini tekshirish foydali — sabab activity qayta yaratilganda holat yo'qolishi bo'lishi mumkin.
</details>
13. O'zingizni tekshiring {#checklist}
- [ ] Web va mobil testlash farqini 5 ta misol bilan tushuntira olaman
- [ ] Qurilmalar matritsasini analitika asosida tuza olaman
- [ ] Simulator yetadigan va real qurilma shart bo'lgan testlarni ajrata olaman
- [ ] 12 yo'nalishli mobil checklist'ni o'z loyihamga moslay olaman
- [ ]
simctlbilan dark mode, shrift, deep link, push, joylashuv va ruxsatlarni boshqara olaman - [ ]
adbva emulator console bilan deep link, SMS, qo'ng'iroq vageo fixni ishlata olaman - [ ] TestFlight va Google Play track'larining asosiy cheklovlarini bilaman
- [ ] Mobil bug report'ga qurilma, OS, build, tarmoq va video dalilini qo'shaman
Xulosa {#xulosa}
- Mobil ilova telefonga o'rnatiladi va eski versiyalar uzoq yashaydi, shuning uchun reliz oldidan testlash web'dagidan chuqurroq bo'ladi. Yangi backend'ni eski ilova versiyalari bilan ham tekshiring.
- Qurilmalar matritsasi analitikadan tuziladi (O'zbekistonda 2026-yil sentabrda Android 82.28%). Tier 1 — real qurilmalar, qolganlari — simulator va cloud.
- Simulator UI va mantiq uchun tez vosita. Kamera, NFC, isish, haqiqiy tarmoq va vendor xulqi esa faqat real qurilmada tekshiriladi.
- 12 yo'nalish: o'rnatish/yangilash, hayot sikli, uzilishlar, ruxsatlar, tarmoq, push/deep link, ekran, imo-ishora/klaviatura, ko'rinish/a11y, til/vaqt, unumdorlik, xavfsizlik.
xcrun simctlvaadbtestni tezlashtiradi.geo fixda avval uzunlik yoziladi.- TestFlight: 100 ichki va 10 000 tashqi tester, build 90 kun amal qiladi. Google Play'da yangi shaxsiy akkauntlar uchun 12 tester × 14 kun closed test talabi bor.
- Keyingi dars: QA 15: Proxyman — HTTPS trafikni ushlash, Map Local, Breakpoint, Scripting va Network Conditions
Manbalar {#manbalar}
- Apple — TestFlight
- Apple — TestFlight overview (App Store Connect Help)
- Apple — Offering account deletion in your app
- Apple — App Review Guideline 5.1.1(v): Account deletion
- Apple — App Store Review Guidelines
- Android Developers — Android Debug Bridge (adb)
- Android Developers — Logcat command-line tool
- Android Developers — Send emulator console commands
- Android Developers — Create deep links
- Android Developers — Configure on-device developer options
- Google Play Console Help — Set up an open, closed, or internal test
- Google Play Console Help — Testing requirements for new personal developer accounts
- Firebase App Distribution
- StatCounter — Mobile OS Market Share Uzbekistan
- TestMu AI (formerly LambdaTest) rebrand — press release, 2026-yil yanvar
- Proxyman Docs — iOS Simulator