Перейти к содержанию
Innovialabs

Как тестировать приложение: ручные, автотесты и фермы устройств

Практика3 мин

Коротко

Надёжная схема — много быстрых unit-тестов, меньше UI-тестов компонентов и немного end-to-end сценариев, плюс ручная проверка перед релизом. Эмуляторы подходят для ежедневной разработки, а реальные устройства и облачные фермы — для проверки на том, чем пользуются ваши клиенты.

Короткий ответ: пирамида тестов

Мобильное приложение проверяют на трёх уровнях:

  • Unit-тесты — много, быстрые, проверяют логику без интерфейса.
  • UI-тесты компонентов (в Flutter — widget-тесты) — меньше, проверяют экраны и элементы.
  • End-to-end (E2E) — немного, проверяют ключевые сценарии целиком: вход, оплата, оформление заказа.

Поверх автотестов остаётся ручное тестирование: исследование нового функционала и регрессия перед релизом.

Уровни тестов

УровеньЧто проверяетСкоростьГде запускать
UnitБизнес-логику, расчёты, преобразование данныхСекундыНа каждом коммите
UI-компоненты / widgetОтрисовку экрана, реакцию на нажатия, состоянияБыстроНа каждом pull request
E2EСценарий от запуска до результата, с сетью и навигациейМедленноНа pull request или по ночам

Чем выше уровень, тем дороже тест в поддержке и тем чаще он бывает нестабильным (flaky). Поэтому основную логику проверяйте снизу, а E2E оставляйте для самых важных путей.

Инструменты

ИнструментПлатформаДля чего
XCTest / XCUITestiOSUnit- и UI-тесты, встроены в Xcode
EspressoAndroidUI-тесты внутри процесса приложения, синхронизация с главным потоком
flutter_test, integration_testFlutterUnit-, widget- и интеграционные тесты
DetoxReact NativeE2E по принципу «серого ящика»: ждёт, пока приложение освободится
MaestroiOS, Android, кросс-платформаE2E-сценарии в YAML, быстрый старт без глубокого знания кода
AppiumiOS, AndroidКросс-платформенные E2E через WebDriver

Пример сценария Maestro:

appId: com.example.app
---
- launchApp
- tapOn: "Войти"
- inputText: "test@example.com"
- tapOn: "Продолжить"
- assertVisible: "Главная"

Ручное тестирование

Автотесты не заменяют человека полностью. Вручную стоит проверять:

  • новый функционал — исследовательское тестирование, когда сценарии ещё не устоялись;
  • визуальные мелочи: шрифты, отступы, тёмную тему, разные размеры экрана;
  • прерывания: входящий звонок, сворачивание приложения, потеря сети, отказ в разрешениях;
  • регрессию по чек-листу перед релизом.

Для раздачи сборок тестировщикам используйте TestFlight на iOS и внутреннее тестирование в Google Play Console.

Эмуляторы или реальные устройства

Эмуляторы и симуляторыРеальные устройства
СтоимостьБесплатноНужно покупать или арендовать
Скорость стартаБыстро, удобно в CIМедленнее настраивать
ТочностьНе воспроизводят реальную производительность, камеру, датчикиРеальное поведение, оболочки производителей
Когда использоватьЕжедневная разработка, unit- и UI-тестыПроверка перед релизом, производительность, железо

Особенно важно проверять на реальных Android-устройствах: оболочки производителей по-разному работают с фоновыми задачами, уведомлениями и энергосбережением.

Облачные фермы устройств

Если покупать парк телефонов дорого, используйте фермы: Firebase Test Lab, AWS Device Farm, BrowserStack, Sauce Labs. Они запускают ваши тесты на реальных устройствах в облаке и возвращают логи, видео и скриншоты.

Как выбрать набор устройств:

  • Возьмите из аналитики самые популярные модели и версии ОС среди ваших пользователей.
  • Добавьте минимальную поддерживаемую версию ОС.
  • Включите маленький экран и бюджетное устройство с небольшим объёмом памяти.

Частые ошибки

  • Ожидания через фиксированные паузы (sleep) вместо ожидания состояния — главный источник нестабильных тестов.
  • Тестировать только «счастливый путь» без ошибок сети и пустых данных.
  • Проверять приложение только на одном телефоне разработчика.
  • Запускать E2E вручную, а не в CI: про них быстро забывают.

Частые вопросы

С unit-тестов для самой рискованной логики: расчёты цен, авторизация, работа с данными. Затем добавьте один-два E2E для главного сценария, например входа и оформления заказа.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.