Как проверить работу приложения при разных типах подключения и отрабатывать сетевые запросы?
Что проверяют
Умеете ли вы превратить «плохую сеть» в воспроизводимые условия, а не ждать, пока кто-то поймает слабый сигнал в лифте. Следом обычно спрашивают, что конкретно должно происходить с приложением, когда запрос оборвался посередине.
Как отвечать
Сначала назовите, чем создаёте условия:
- прокси: Charles, Proxyman или mitmproxy. Дают ограничение скорости, задержку, подмену ответа на
500или пустое тело, брейкпоинт, на котором запрос висит сколько нужно; - эмуляторы и устройства: в Android Emulator тип сети и уровень сигнала задаются в расширенных настройках или командами консоли
network speedиnetwork delay, на iOS есть Network Link Conditioner с профилями вроде3Gи100% Loss. Appium на Android умеет переключать Wi-Fi, мобильные данные и авиарежим; - браузер: троттлинг и режим
Offlineво вкладке Network в DevTools, в автотестах Playwrightcontext.setOffline(true)иpage.route(), чтобы оборвать запрос или вернуть ошибку.
Потом сценарии, ради которых всё это затевается:
- медленный ответ: есть индикатор загрузки, кнопку нельзя нажать повторно, спиннер не крутится вечно, срабатывает таймаут;
- ошибка сервера и таймаут: пользователь видит понятное сообщение и кнопку «Повторить», введённые данные не пропали;
- обрыв посередине: отправка формы или загрузка файла прервалась, после восстановления сети нет дубля заказа или платежа;
- смена сети: переход с Wi-Fi на мобильную сеть и обратно, авиарежим, работа из офлайн-кэша, если он заявлен.
В автотестах сетевые ошибки стабильнее мокать через прокси или page.route(), чем зависеть от реальной сети.
Где спотыкаются
Проверяют только «интернета нет совсем». Самые неприятные баги живут в промежуточных состояниях: сеть есть, но ответ идёт 40 секунд или теряется часть пакетов.
Смотрят только на экран, а не на трафик. Без прокси не видно, что приложение при ошибке шлёт запрос десять раз подряд или не отменяет старые запросы при уходе с экрана.
Не проверяют повторную отправку. После обрыва пользователь жмёт кнопку ещё раз, и без идемпотентности на сервере появляется второй заказ.