
Привет, Хабр! Сегодня большинство компаний разрабатывают мобильные приложения, поэтому умение работать с ними становится почти обязательным скиллом. Мобильное приложение — это не просто веб в миниатюре, это отдельный мир со своей архитектурой, устройствами, операционными системами и ограничениями. В статье расскажем об основных особенностях мобильных платформ, с которыми тестировщики сталкиваются на практике. Подробности — под катом!
Автор: Антон Дуенин, автор YouTube-канала «Горящий Тестер».
Чем мобильное тестирование отличается от веба
С точки зрения теории тестирования веб- и мобильные приложения похожи. Пользователи прогоняют их через функциональные и нефункциональные тесты, техники вроде «черного» и «белого ящика», классический тест-дизайн. Разница между ними становится очевидной, как только переходим от теории к практике.
Установка и обновление. Веб-приложения не требуют установки: достаточно открыть в браузере сайт, чтобы получить его актуальную версию. Мобилкам, наоборот, нужно поддерживать одновременно несколько версий приложения. Не каждый пользователь включает автообновления, поэтому тестировщику важно проверять процесс установки, обновления и обратной совместимости приложения.
Разрешения и доступы. Мобильные ОС по умолчанию ограничивают доступ к ресурсам — камере, GPS, микрофону, контактам. Приложение должно корректно работать как при согласии пользователя предоставить доступ, так и при его отказе.
Аппаратные ограничения. У смартфонов по сравнению с ПК слабое железо, ограниченный объем памяти и батарея, которая может сесть. Веб-приложения на ПК работают в более «стабильной среде».
Главная проблема тестирования — разнообразие устройств
Только у Android есть десятки тысяч моделей: от бюджетных смартфонов с 3G и маленьким экраном до современных флагманов с 5G и гибким дисплеем. Оцените список со всеми устройствами и представьте, что вам нужно протестировать каждый девайс. У Apple модельный ряд не такой обширный, но там тоже есть старые устройства, которые люди используют по сей день.
Как вы знаете, у каждого устройства свои характеристики. В основном, отличия касаются:
размера и разрешения экранов;
версии операционных систем;
конкретного железа внутри девайса;
физических кнопок и разъемов, а также их комбинаций.
Проверить приложение всего на одном-двух устройствах обычно недостаточно — на практике тестировщикам нужны десятки девайсов. Некоторые компании держат собственный парк смартфонов, но это дорого. Их сложно поддерживать в актуальном состоянии и использовать для тестирования мобильных приложений, особенно если специалисты сидят на удаленке.
Альтернатива физическим устройствам — мобильная ферма Selectel. Это сервис для тестирования приложений, который предоставляет удаленный доступ к устройствам на базе Android и iOS. С его помощью тестировщики могут выбирать смартфон нужной модели, подключаться к нему через веб-интерфейс, устанавливать приложения, делать скриншоты, собирать логи и даже запускать автотесты. Решение избавляет от необходимости держать коробку с кучей реальных смартфонов около рабочего стола.
Рассмотрим, как тестировать приложения на устройствах в мобильной ферме Selectel.

Мобильная ферма Selectel
Начните тестировать на реальных устройствах за 2 минуты – откуда угодно.
Создание фермы и выбор устройства
После авторизации в панели управления переходим в раздел Мобильная ферма и нажимаем кнопку Создать ферму.

Далее задаем название фермы. Выбираем устройство, например Samsung Galaxy S23 c Android 14. Подтверждаем условия и создаем ферму. Смартфон появится в списке доступных устройств, и его можно открыть для работы.

Управление устройством
При открытии вы получаете полный контроль над девайсом. Экран транслируется в браузер, и вы можете взаимодействовать с приложением так же, как и на физическом телефоне. Собственно, это и есть реальный телефон.

В мобильной ферме предлагает несколько функций для тестирования.
Скриншоты. Нажал кнопку — скриншот сохранился на ферме. Главное, не забудьте сохранить их себе до окончания работы с устройством. Завершение сессии стирает все локальные файлы и изменения.
Логи. На вкладке Логи можно посмотреть всю системную информацию, которая крутится на девайсе в рантайме. В принципе, это похоже на логи в Android Studio — там есть фильтрация по уровням, отдельным частям лога и все такое.
Терминал. Позволяет выполнять команды ADB (Android Debug Bridge).
Файловая система. Предоставляет доступ к файловой системе девайса. Если ваши логи пишутся в отдельный файл или приложение сохраняет какие-то другие нужные вещи в памяти, здесь их можно достать.

Ручное тестирование и автоматизация
Сначала можно поэкспериментировать с девайсами руками: установить приложения, прогнать тест-кейсы и проверить UI. Затем перейти к автоматизации, мобильная ферма ее также поддерживает. Подробную информацию по подключению можно прочитать в документации.
Пройдемся по основным шагам, чтобы подключиться к девайсу.
1. Через CLI создаем пару ADB-ключей:
cd ~/.android/
adb keygen adbkey
adb pubkey ~/.android/adbkey > ~/.android/adbkey.pub
2. Добавляем свой публичный ключ в мобильную ферму через Профиль → Доступ → ADB-ключи.

3. Подключаемся к девайсу с помощью консольной команды, которую можно скопировать прямо из интерфейса.

4. После подключения можно увидеть сообщение failed to authenticate to [ваш девайс]. Не беспокойтесь, такое случается — он все равно подключился. Проверить можно с помощью команды adb devices.

5. SUCCESS, вы подключились к девайсу. Теперь можете прогонять свои кейсы так же, как делаете в телефоне, который лежит у вас на столе.
Интеграция с CI/CD
Мобильную ферму можно встроить и в CI/CD-пайплайн. Например, у меня в GitHub Actions после git push запускается джоба (автоматическая задача), которая устанавливает приложение на выбранные девайсы и прогоняет тесты.
В ci.yml файле прописываю креды (данные) для доступа к моему аккаунту и девайсу на ферме:

Используем git push, переходим в GitHub Actions, ждем завершения прогона — и вуаля! Результат, как видно, зеленый — это всегда приятно.

Таким образом, с помощью мобильной фермы можно значительно облегчить себе жизнь и всегда иметь доступ к любому комплекту необходимых девайсов.
Функциональные особенности тестирования
Мобильные приложения используют множество функций, которые отсутствуют в вебе. Пройдемся по основным.
Push-уведомления
Это нотификашки, которые появляются в верхней шторке уведомлений или на экране блокировки. Пуши могут приходить во время работы с приложением — например, если находятся на заднем фоне и когда выключен экран.

Диплинки
Ссылки, открывающие конкретный экран приложения. По сути, они не сильно отличаются от обычных URL, но выглядят чуть иначе. Кроме того, у них есть некоторые трудности с открытием.
URL: https://t.me/burning_tester
Deeplink: tg://resolve?domain=burning_tester
В URL сначала идет протокол, потом домен, конкретный ресурс и, опционально, параметры. В диплинках практически все то же самое, но вместо протокола в начале идет сигнатура вашего приложения.
Возникает вопрос, как открыть диплинк. Если URL можно использовать почти из любого текстового редактора, то диплинки обычно в них не поддерживаются — приходится искать обходные пути. Из того, что знаю я, — диплинки кликабельны в чатах Slack, активны в некоторых приложениях, которые ведут на их же модули, и в специальных программах, такие как Deeplink Tester для Android.
Разрешения
К большинству функций — камера, микрофон, геолокация, NFC, галерея и т.д — приложение запрашивает у пользователя доступ. Важно, чтобы оно корректно работало как с полученным разрешением, так и без него — например, может повторно предложить пользователю предоставить доступ, а не упасть с ошибкой.

Управление
Если в вебе пользователь взаимодействует с интерфейсом через клавиатуру и мышь, то на мобильных устройствах — через сенсорный экран. Выходить из приложения или отменять действие можно как кнопками, так и специальными жестами.
При тестировании важно учитывать, насколько удобно пользователю управлять вашим приложением. Область действия элементов должна быть достаточно крупной, чтобы не нужно было точно прицеливаться пальцем. Никакие функции вашего приложения не должны пересекаться со стандартными жестами. То есть у вас не должно быть, например, функции, завязанной на свайп справа налево, потому что этот жест очень часто используется как действие Назад.
UI и ориентация
Смартфон можно использовать как вертикально, так и горизонтально. Однако при смене ориентации ваш интерфейс не должен ломаться. Его нужно либо адаптировать под новую ширину, либо банально не переворачивать, даже если автоповорот экрана включен в настройках.
Также стоит учитывать размер устройства. Хоть экран смартфона и небольшой, он может уменьшиться еще сильнее. Например, есть пользователь откроет клавиатуру, которая закроет все важные элементы приложения.
Фоновый режим
Ваше приложение может быть не только в активном состоянии, но и в фоновом режиме, пока вы работаете с чем-то другим. Дальнейшее поведение зависит от того, для чего оно предназначено.
Одни приложения (Spotify) должны продолжать работу в фоне, другие (видеоплееры) — ставить воспроизведение на паузу. Возможно, оно должно уходить в спящий режим и потреблять меньше ресурсов, а возможно и нет. И тогда нужно удостовериться, что приложение в фоне не теряет соединение или другие важные функции. Эти сценарии нужно тестировать отдельно.
Биометрия
Некоторые приложения используют встроенные функции устройства для аутентификации пользователя — например, отпечаток пальца, FaceID, PIN-код и другие. Чаще всего такие методы применяются в банковских приложениях. При тестировании важно учитывать все возможные варианты аутентификации.
Сетевые факторы
Веб-приложения чаще работают в стабильной среде — на ПК с доступом к Wi-Fi, где трафик практически не ограничен. У мобильных девайсов ситуация обстоит иначе.
Нестабильный сигнал. Пользователь может ехать в метро, при этом связь будет периодически появляться и исчезать.
Переключение сети. Смартфон переключается с Wi-Fi на мобильный интернет и обратно. При этом часть ваших функций может быть завязана на загрузку больших объемов данных. Рекомендуем использовать Wi-Fi по умолчанию, а мобильную сеть — только с явного разрешения пользователя, особенно в роуминге.
Разные режимы сети. 5G, 4G, 3G, E.
Расход трафика и оффлайн. У пользователя могут банально закончиться гигабайты мобильного интернета или просто пропасть связь.
Тестировщику важно моделировать такие сценарии: искусственно ограничивать скорость, включать и выключать сеть, проверять стабильность работы. Особенно критично это для банковских и торговых приложений: внезапный обрыв соединения во время транзакции может стоить компании и пользователям кучу денег и нервов.
Ограниченные ресурсы устройств
Производительность смартфонов сильно уступает возможностям ПК, поэтому тестирование мобильных приложений требует особого внимания к оценке их производительности.
Батарея
Если не подключить смартфон к розетке, то со временем он разрядится. Если ваше приложение настолько плохо оптимизировано, что сжигает всю батарею за полчаса, то вряд ли пользователи будут довольны.
У смартфонов есть режимы энергосбережения, которые зависят от текущего уровня заряда. На 15% Android отправляет уведомление, а на 5% — снижает яркость экрана и переходит в энергосберегающий режим. Последнее ограничивает работу некоторых функций — например, фонарика и камеры.
Возможно, ваше приложение тоже должно менять поведение при низком заряде. Как тот же Telegram, который переходит в режим энергосбережения.
Память
Приложение не должно занимать слишком много оперативной памяти в неактивном состоянии. Утечки RAM приводят к торможениям и вылетам, поэтому важно серьезно подходить к оптимизации вашего продукта.
В долгосрочной памяти приложения тоже оставляют мусор: кеши, временные и ненужные файлы, которые порой не исчезают даже после удаления самого приложения. Со временем весь этот хлам занимает гигабайты, который очень сложно освободить.
Нагрузка на процессор
Сложные анимации или игры могут перегревать телефон — это снижает производительность и вызывает дискомфорт у пользователя. Из-за разнообразия моделей требовательное приложение может отлично работать на флагманах, но не справляться с нагрузкой на моделях постарше и подешевле.
Особенности платформ iOS и Android
Android и iOS — разные миры, языки (Kotlin/Java и Swift), IDE (Android Studio и Xcode), правила публикации и модерации.
Время модерации приложений отличается: Apple проверяет обновления несколько дней, тогда как Google пропускает их быстрее. Обе платформы имеют свои гайдлайны по интерфейсу и UX — их соблюдение облегчает работу пользователей, а игнорирование может привести к отклонению публикации.
Также существуют различия в открытости платформ. Apple имеет закрытую экосистему: приложения можно устанавливать только через App Store или TestFlight, сторонние файлы APK не запускаются. На Android установка приложений из неизвестных источников проще, хотя с каждым годом система все больше ограничивает такие возможности ради безопасности.
Эти особенности важно учитывать при планировании тестирования, так как они влияют на его продолжительность и сложность.
Управление версиями и обновлениями
Еще одна сложность — работа с версиями приложения. Пользователи не всегда обновляют его вовремя, поэтому при разработке и тестировании нужно учитывать не только последнюю версию, но и несколько предыдущих. Если новая версия бэкенда совместима только с последним фронтом, а 95% пользователей используют старые версии, это может привести к серьезным проблемам.
При обновлении важно сохранять все пользовательские данные: сессии, локальные файлы, загруженные материалы и т. д. Новая версия не должна нарушать историю взаимодействия — например, заставлять постоянно логиниться или повторно загружать файлы. В противном случае это вызовет сильное раздражение у пользователей.
Представьте, крупная компания месяцами заводила свои данные в ваше приложение и строила рабочие процессы вокруг него, а при обновлении все эти наработки внезапно исчезли. Последствия такой ошибки приведут не просто к негативным отзывам и оттоку пользователей, а к серьезному репутационному и финансовому ущербу. Разработчик не только выставит свой продукт как ненадежный, но и потеряет много денег в попытках восстановить эти данные. Да и сам клиент после таких фокусов может просто отказаться от приложения и компания лишится части прибыли.
Иногда компании решают эту проблему через принудительное обновление. При выходе новой версии на всех старых включается feature-flag: уведомление закрывает приложение за непропускаемым экраном, который требует обновиться, иначе приложение не будет работать.

Доступность и пользовательский опыт
Доступность критична для UX мобильных приложений. Малый экран и управление пальцами требуют удобного интерфейса и крупных элементов для комфортного взаимодействия.
Рассмотрим, какие еще факторы стоит учитывать при тестировании.
Кнопки должны быть достаточно крупными и удобно расположенными для нажатия одной рукой.
Желательно, чтобы все основные элементы интерфейса было одинаково удобными для использования как левой, так и правой рукой.
Пользователи могут менять размер шрифта и масштаб интерфейса их смартфона, поэтому ваше приложение должно к этому адаптироваться.
Поддержка темной темы уже стала стандартом: ее отсутствие воспринимается как недостаток и может вызвать у пользователя неприятные ощущения. Например, если он использует темную тему во всех приложения, то неожиданный переход на светлую может доставить ему сильный дискомфорт.
Для людей с ограничениями по зрению важен высокий контраст и поддержка системных настроек доступности. Представьте на месте пользователя вашу бабушку. Все ли ей будет видно в вашем приложении?
Инструменты мобильного тестировщика
Помимо общих с веб инструментов, в мобильном тестировании используются целый набор специфических. Рассмотрим основные приложения. Подробнее об инструментах рассказывали в статье «Тестирование мобильных приложений: особенности, этапы и инструменты».
Android Studio / Xcode. IDE для сборки и запуска приложений.
Charles и Fiddler. Снифферы, перехватывающие сетевой трафик. К сожалению, здесь не получится просто нажать F12 и посмотреть запросы в DevTools — необходимо отдельно заморачиваться с перехватом.
ADB (Android Debug Bridge). Консольный инструмент для управления Android-устройствами: установка APK, снятие логов, управление настройками.
TestFlight (iOS). Сервис для распространения тестовых сборок. Пользователи с доступом к нему могут установить новую версию приложения до выхода в App Store и откатиться на старые версии.
Firebase App Distribution (Android/iOS). Аналог TestFlight с расширенными возможностями для аналитики и доставки билдов.
Типы мобильных приложений
От типа вашего приложения зависят подходы и инструменты, которые будете использовать при тестировании. Кратко рассмотрим каждый.
Нативные. Создаются под конкретную платформу. Отдельно пишут код под iOS, отдельно — под Android, обычно разными разработчиками. Это самый дорогой и трудоемкий тип приложений, но при этом самый надежный, производительный и гибкий.
Веб-приложения. По сути, просто сайты, которые открываются в браузере на телефоне. Преимущество — кроссплатформенность, недостаток — ограниченный доступ к функциям устройства.
Гибридные. Оболочка с WebView (встроенным браузером) внутри. Разрабатываются быстрее, но часто уступают нативным по скорости и качеству UX.
На практике многие компании применяют смешанный подход: основной функционал делают нативным, а вспомогательные экраны — например, смену пароля или форму обратной связи — реализуют через WebView.
Заключение
Тестирование мобильных приложений намного сложнее, чем веб. Специалисту приходится учитывать множество переменных:
конкретную модель, версию и ОС;
качество сети;
энергопотребление и производительность;
особенности публикации в сторах;
правила доступности.
Даже в задачах, которые выполняются в веб-приложениях одной кнопкой, на мобилках приходится изворачиваться — например, подключать снифферы и обходить ограничения на установку. Но на практике все не так страшно. Почти с самого детства мы постоянно пользуемся мобильными девайсами, поэтому некоторые особенности считываем автоматически.
Сложность мобильного тестирования в том, что факторов много и легко упустить очевидное. Разобравшись с ними, вы повысите не только качество приложений, но и свою ценность как специалиста. На собеседованиях вопросы по особенностям мобильного тестирования встречаются часто, и подробные знания о них произведут сильное впечатление.