Как проверить поведение приложения при стрессовой нагрузке, низком заряде батареи, крашах и восстановлении?
Что проверяют
Умеете ли вы воспроизводить неудобные условия на устройстве и знаете ли, что каждое из них проверяется своими средствами. Следом часто спрашивают, что должно происходить с данными пользователя, если приложение убили посреди операции.
Как отвечать
Разбейте ответ на три части.
Стресс на мобильном клиенте это не JMeter: серверную нагрузку тестируют отдельно. На устройстве проверяют:
- поток случайных действий:
adb shell monkey -p <пакет> -v 5000на Android, долгие сценарии без перезапуска для поиска утечек памяти; - нехватку памяти: опция «Не сохранять действия» в настройках разработчика и
adb shell am kill <пакет>для свёрнутого приложения, в симуляторе iOS пункт Simulate Memory Warning; - плохую сеть: троттлинг в эмуляторе, Network Link Conditioner на iOS, обрыв посреди загрузки.
Низкий заряд эмулируется без ожидания разрядки: adb shell dumpsys battery unplug и adb shell dumpsys battery set level 5, режим энергосбережения, Doze через adb shell dumpsys deviceidle force-idle. На iPhone режим энергосбережения включается вручную. Смотрите, что фоновые задачи откладываются корректно, синхронизация не теряется, а расход энергии разумный: его видно в профилировщике Android Studio и в Energy Impact в Xcode.
Краш и восстановление: провоцируете падение (кнопка краша в тестовой сборке, убийство процесса), затем проверяете, что после перезапуска нет повреждённых данных, черновики и незавершённые операции восстановлены, повторная отправка не дублирует платёж, а отчёт о падении с символикацией дошёл в Crashlytics или аналог.
Где спотыкаются
Отвечают про JMeter и LoadRunner, путая нагрузку на сервер с поведением клиента на слабом устройстве.
Говорят, что Crashlytics «вызывает сбои». Он собирает отчёты, а падение провоцируете вы сами.
Проверяют только поворот экрана и забывают про смерть процесса в фоне. Именно там теряются введённые данные и состояние экрана, если оно не сохраняется через onSaveInstanceState или SavedStateHandle.