Мобильное тестирование включает всё, что есть в вебе, плюс то, чего в вебе почти нет: прерывания, нестабильная сеть, разрешения, батарея, тысячи моделей устройств и медленные релизы через магазины. На собеседовании ждут именно эту специфику.
Типы приложений
- Нативные: Swift для iOS, Kotlin для Android. Прямой доступ к API платформы.
- Кроссплатформенные: Flutter, React Native и подобные. Один код на две платформы, но поведение на них всё равно надо проверять отдельно.
- Гибридные: веб-страницы внутри WebView.
- PWA: сайт, который ставится на экран и работает офлайн, с ограничениями API, особенно на iOS.
Прерывания
Пользователя постоянно прерывают. Проверяй посреди важного сценария (оплата, заполнение формы, загрузка):
- входящий звонок, SMS, уведомление;
- сворачивание и возврат;
- блокировка экрана;
- низкий заряд и режим энергосбережения;
- подключение наушников, смена ориентации.
Ожидание: данные не теряются, действия не задваиваются, экран корректно восстанавливается.
На Android полезна опция разработчика «Не сохранять действия» (Don't keep activities): экран уничтожается сразу при уходе, и так воспроизводится ситуация, когда система выгрузила приложение из памяти.
Сеть
- Медленная сеть, потеря пакетов, офлайн.
- Переход с Wi-Fi на мобильную сеть посреди запроса.
- Авиарежим и возврат из него.
Главный вопрос: что будет с запросом, который ушёл, но ответ не пришёл? Для платежа повтор не должен создать второе списание, а клиент должен узнать итоговый статус у сервера.
Разрешения
Камера, геолокация, уведомления, фото, микрофон. Проверь все исходы:
- разрешено;
- запрещено;
- «разрешить только сейчас» или «только во время использования»;
- отозвано в настройках во время работы приложения.
На iOS системный запрос показывается один раз. После отказа приложение может только объяснить, зачем нужен доступ, и отправить в настройки.
Установка и обновление
- Чистая установка.
- Обновление поверх предыдущей версии: данные, авторизация и настройки сохраняются, миграция локальной базы проходит. Большинство пользователей обновляется, а не ставит заново.
- Обновление через несколько версий.
- Удаление и повторная установка.
Устройства
Эмуляторы и симуляторы удобны для быстрых проверок и CI, но не воспроизводят реальную производительность, нагрев, камеру, датчики, сотовую сеть и оболочки производителей. Набор реальных устройств выбирают по аналитике: популярные модели, самая старая поддерживаемая версия ОС, маленький экран, слабое железо, производители с агрессивным энергосбережением. Для широты используют облачные фермы.
Инструменты
- Логи: Android
adb logcat, iOS Console и Xcode. В проде креши собирают Firebase Crashlytics, AppMetrica и подобные. - Трафик: прокси-снифферы Charles, Proxyman, mitmproxy с установленным сертификатом. В релизной сборке может стоять закрепление сертификата, тогда перехват не сработает, и это нормально.
- Бета-сборки: TestFlight для iOS, треки внутреннего и закрытого тестирования в Google Play Console, Firebase App Distribution.
Диплинки и уведомления
Диплинк на товар проверяют в разных состояниях: приложение закрыто, в фоне, не установлено, пользователь не вошёл, товара больше нет. Пуш-уведомления: приходят ли при закрытом приложении, куда ведёт нажатие, что если уведомления запрещены.
Почему релиз мобильного дороже
Хотфикс снова проходит ревью магазина, а пользователи обновляются когда захотят. Старые версии живут месяцами, и бэкенд должен с ними работать. Поэтому важны бета, поэтапная раскатка (1%, 10%, 50%), фича-флаги, мониторинг крешей в первые часы.
Частые ошибки
- Тестировать только на эмуляторе и только на новом флагмане.
- Забывать отказ в разрешении и отзыв разрешения.
- Не проверять обновление поверх старой версии.
- Прикладывать к багу падения только скриншот без лога.
Что спросят на собесе
- Чем мобильное тестирование отличается от веба?
- Как протестировать прерывания и работу с сетью?
- Эмулятор или реальное устройство: когда что?
- Как получить лог падения и посмотреть трафик приложения?
- Что проверить при выпуске новой версии?