Тема
Стратегия тестирования Android-приложения
Слои
| Слой | Что проверяет | Когда |
|---|---|---|
| Unit | бизнес-правила, преобразования, reducers/ViewModel | каждый change |
| Integration | repository, БД, API contracts, migrations | каждый merge |
| UI/instrumentation | навигация, state restoration, accessibility | каждый merge |
| Device smoke | lifecycle, permissions, сеть, системные интеграции | release candidate |
| Play internal | реальная Play signing/delivery и install/update | каждый релиз |
| Closed testing | матрица устройств и реальные сценарии | перед production |
Capacitor дополнительно требует web lint/unit/build и browser/E2E. Для native проекта отсутствие npm — нормальное состояние, а не пропущенная проверка.
Обязательное ядро smoke-test
- clean install и cold start;
- основной пользовательский сценарий;
- системный Back и предсказуемая навигация;
- Home → resume, блокировка → resume, process recreation;
- поддерживаемые ориентации, размеры окон, font scale и dark mode;
- отказ в каждом runtime permission без crash/dead end;
- upgrade с предыдущей опубликованной версии;
- отсутствие секретов и персональных данных в Logcat/crash reports.
Сценарии по типу приложения
- API client: loading/empty/error, airplane mode, timeout, retry, 401/403, token expiry, rate limit и безопасный logout.
- Offline-first: локальная запись, очередь синхронизации, конфликт и повтор.
- Media: audio focus, interruption, Bluetooth/output change и background rules.
- Camera/location/files: отказ/отзыв permission, unavailable hardware и выбор через системные contracts вместо широкого доступа.
- Background work: reboot, Doze, ограничения battery/data saver и отсутствие бесконечных retries.
- Игра: input, сохранение, frame pacing, пауза loop/audio и длинная сессия.
- Capacitor: нет dev server/CDN для заявленного offline core, безопасный WebView и совпадение web/native lifecycle.
Команды
Native:
bash
./gradlew lint test assembleDebug bundleRelease
./gradlew connectedCheckCapacitor:
bash
npm ci
npm run lint
npm test
npm run build
npx cap sync android
cd android && ./gradlew lint test assembleDebug bundleRelease
ANDROID_SERIAL=<serial> ./gradlew :app:connectedDebugAndroidTestИспользуйте проектную scripts/verify.sh или npm run verify, если она проверена и включает нужные шаги. Недоступную проверку фиксируйте как непроверенную, а не как успешную.
Evidence
Сохраняйте версии toolchain, package/version, test/lint reports, merged permissions, APK/AAB SHA-256, AVD/device/API, сценарии smoke и результат Play-delivered install. Логи и скриншоты не должны содержать персональные данные.
Перед релизом дополнительно проверяйте AAB и device-specific splits по расширенному preflight. Если app содержит native .so, обычный 4 KB AVD не заменяет runtime-тест 16 KB image.
Текущие требования к closed testing зависят от типа и возраста Play-аккаунта; перед релизом проверяйте их в Console и в официальной справке, а не переносите старое число тестировщиков из предыдущего приложения.