← Теория
📱 Блок 04 — Mobile-тестирование Ozon
UI в мобильном · Баги на устройствах · Трафик · Жизненный цикл · Артефакты
📱 1. Виды мобильного тестирования
| Тип | Что тестируем | Инструменты |
| Нативное приложение | APK/IPA, установленное на устройство | Appium, Espresso, XCUITest |
| Мобвеб (Mobile Web) | Сайт в браузере телефона | Selenium, Playwright, BrowserStack |
| Гибридное | WebView внутри нативного приложения | Appium + Selenium |
Нативное vs Мобвеб vs Гибридное
| Нативное | Мобвеб | Гибридное |
| Установка | Из магазина (App Store / Google Play) | Через URL в браузере | Из магазина, но внутри — WebView |
| Доступ к устройству | Камера, пуш, контакты, геолокация | Ограничен (браузер) | Через мост (bridge) |
| Скорость | Быстрое | Зависит от сети | Среднее |
| Обновление | Через магазин (не мгновенное) | Мгновенное (обновил сервер) | Через магазин, контент мгновенно |
В вакансии Ozon: "веб, мобвеб и мобильное приложение" — все три типа! Значит нужно знать особенности каждого.
🎨 2. Специфика UI в мобильном
Отличия от десктопа
| Аспект | Десктоп | Мобильное |
| Размер экрана | Большой, много места | Маленький, всё компактно |
| Ввод | Мышь + клавиатура | Touch (тап, свайп, пинч) |
| Hover | Есть | ❌ Нет |
| Клавиатура | Всегда видна | Всплывает, закрывает половину экрана |
| Ориентация | Горизонтальная | Может быть любая (поворот!) |
| Сеть | Стабильная | Может пропадать (метро, лифт) |
Типичные мобильные баги
- Клавиатура закрывает поля ввода или кнопку
- Touch-зона слишком маленькая — палец не попадает
- Длинный текст вылезает за экран
- Скролл в модалке — скроллится вся страница вместо модалки
- Поворот экрана — данные теряются или вёрстка ломается
- Safe area — элементы залезают под «чёлку» или навигацию
- Deep link — при переходе по ссылке открывается не тот экран
Touch-события
| Действие | Событие | Что проверить |
| Тап | tap / click | Кнопка реагирует, не двойной клик |
| Долгое нажатие | long press | Контекстное меню, выделение |
| Свайп | swipe (left/right/up/down) | Навигация, удаление элемента |
| Пинч | pinch (zoom) | Увеличение карты/картинки |
| Тяни-толкай | pull-to-refresh | Обновление контента |
🏗 3. Жизненный цикл приложения
Android Activity Lifecycle
Created → Started → Resumed (активно на экране)
↓ свайп вниз / переключение
Paused → Stopped → Destroyed
↑ возврат
Restarted → Started → Resumed
iOS App Lifecycle
Not Running → Inactive → Active (на экране)
↓ кнопка Home / переключение
Inactive → Background → Suspended
↓ память нужна
Terminated
Что тестировать
| Сценарий | Что проверить |
| Свернуть и вернуть | Данные на месте, состояние сохранено |
| Убить процесс | При открытии — корректное состояние (не краш) |
| Входящий звонок | Приложение не крашится, после звонка — нормально |
| Низкая память | OS убивает приложение — при возврате корректно |
| Поворот экрана | Вёрстка не ломается, данные не теряются |
| Смена языка | Перевод корректный, текст помещается |
На собе: "Нужно тестировать жизненный цикл: свернуть/вернуть, убить процесс, входящий звонок, поворот экрана. Данные должны сохраняться, приложение не должно крашиться."
📲 4. Тестирование на реальных устройствах
Эмулятор vs Реальное устройство
| Эмулятор / Симулятор | Реальное устройство |
| Скорость | Быстро запустить | Нужно физическое устройство |
| Touch | Мышь (не то же самое) | Настоящий палец ✅ |
| Производительность | Скорость ПК (нереалистичная) | Реальная ✅ |
| Push / Камера / GPS | Часто работает криво | Работает реально ✅ |
| Разнообразие | Любая комбинация | Ограничено парком устройств |
| Стоимость | Бесплатно | Дорого (или BrowserStack) |
Что тестировать на реальном устройстве
- Touch-зоны — реально ли попасть пальцем в кнопку
- Производительность — тормозит ли на старом устройстве
- Батарея — жрёт ли приложение аккумулятор
- Пуш-уведомления — приходят ли реально
- Камера / Геолокация / Датчики — работают аппаратно
- Разный размер экрана — iPhone SE vs iPad
Инструменты
| Инструмент | Что делает |
| BrowserStack | Облачные реальные устройства (ты уже используешь!) |
| ADB | Управление Android-устройством с компьютера |
| Xcode | Симуляторы iOS (только на Mac) |
| Android Studio | Эмуляторы Android |
| Charles | Перехват трафика с мобильного (через прокси) |
🌐 5. Трафик через мобильное устройство
Для мобильного QA нет DevTools → нужно перехватывать трафик через прокси.
Как настроить Charles для мобилки
- Компьютер и телефон в одной WiFi-сети
- Узнать IP компьютера (например 192.168.1.100)
- На телефеле: Настройки WiFi → Прокси → Вручную → IP + порт Charles (8888)
- Установить SSL-сертификат Charles на телефон (чтобы видеть HTTPS)
- Всё — Charles показывает весь трафик телефона
Что можно делать
- Видеть все запросы мобильного приложения
- Подменять ответы (mock)
- Throttling — эмулировать медленную сеть
- Проверять что приложение шлёт правильные данные
На собе: "Для анализа трафика мобильного приложения используем Charles Proxy. Настраиваем телефон на прокси компьютера. Можно видеть запросы, подменять ответы, эмулировать плохую сеть."
📋 6. Артефакты для баг-репорта
В мобильном тестировании баг-репорт должен содержать больше информации, чем в вебе.
Что обязательно указать
| Поле | Почему важно | Пример |
| Устройство | Баг может быть только на конкретном | iPhone 14 Pro, Samsung S24 |
| ОС | iOS vs Android — разное поведение | iOS 17.4, Android 14 |
| Версия приложения | Может быть пофикшено в новой | v2.3.1 (build 456) |
| Ориентация | Баг только при повороте? | Портретная / Ландшафтная |
| Сеть | WiFi / 4G / без сети | WiFi, плохой 3G |
| Скриншот / Видео | Воспроизведение бага | Скрин + запись экрана |
| Логи | Crash-лог для разработчика | ADB logcat, Console (iOS) |
Как получить логи
| Платформа | Как | Команда |
| Android | ADB logcat | adb logcat > logs.txt |
| iOS | Console.app (Mac) или Xcode | Devices → Open Console |
На собе: "В мобильном баг-репорте обязательно: устройство, ОС, версия приложения, ориентация, сеть. Плюс скриншот/видео и логи (ADB logcat для Android, Console для iOS)."
🍎🤖 7. iOS vs Android — отличия для QA
| Аспект | iOS | Android |
| Устройства | Мало моделей, предсказуемо | Огромное разнообразие |
| ОС | Контролируемая Apple | Производители добавляют свои оболочки |
| Навигация | Свайп назад от левого края | Кнопка Back (системная) |
| Таббар | Внизу (UITabBar) | Внизу (BottomNavigation) |
| Нотификации | Центр уведомлений (сверху вниз) | Шторка (сверху вниз) |
| Жесты | Face ID → свайп вверх для Home | Зависит от модели (кнопка / жесты) |
| Возврат | Свайп слева | Системная кнопка ← |
| Тестирование | Нужен Mac для сборки/симулятора | ADB работает с любого ПК |
На собе: "Android — больше разнообразие устройств и оболочек → больше комбинаций для тестирования. iOS — меньше моделей, но нужны Mac/Xcode. Главное отличие навигации: iOS — свайп назад, Android — системная кнопка Back."
💬 Вопросы для самопроверки