Как тестировать загрузку фотографии при медленном интернете и прерывании загрузки?
Что проверяют
Умеете ли вы воспроизвести плохую сеть управляемо и знаете ли, какое поведение считать правильным после обрыва. Следом обычно спрашивают, как убедиться, что на сервере не остался битый файл или дубль.
Как отвечать
Начните с требований: максимальный размер и форматы, сжимается ли фото на клиенте, таймауты, есть ли докачка или загрузка начинается заново. От этого зависит ожидаемый результат каждого сценария.
Инструменты для управляемой сети:
- браузер: троттлинг во вкладке Network в Chrome DevTools, свои профили с задержкой и скоростью, режим offline;
- мобильные: Network Link Conditioner на iOS и macOS, настройки сети в Android Emulator, Charles или Proxyman с ограничением скорости;
- обрывы: брейкпоинт в Charles, чтобы остановить запрос на середине, Toxiproxy для таймаутов и разрыва соединения, авиарежим, переключение с Wi-Fi на мобильную сеть.
Сценарии:
- медленная сеть: прогресс честный и не висит на 99%, интерфейс не блокируется, есть отмена, повторное нажатие не отправляет фото второй раз;
- обрыв в начале, в середине и в конце: понятная ошибка, выбранное фото не теряется, повтор работает. При докачке (протокол tus, multipart upload в S3) загрузка продолжается с места обрыва;
- жизненный цикл: сворачивание приложения, блокировка экрана, закрытие вкладки. На iOS фоновая загрузка идёт через фоновую
URLSession, её проверяют отдельно; - сервер: после обрыва нет обрезанного файла и дубля, контрольная сумма совпадает, незавершённые части удаляются.
Где спотыкаются
Режут только скорость. Реальная мобильная сеть это ещё задержка и потеря пакетов, именно они вызывают таймауты и повторные запросы.
Проверяют сообщение об ошибке и на этом останавливаются. Главный баг обычно на сервере: запрос дошёл, ответ потерялся, клиент повторил, и фото загрузилось дважды. Лечится ключом идемпотентности, и это стоит проверить.
Тестируют без согласованных ожиданий. Если никто не решил, нужна ли докачка, любой исход можно назвать и багом, и нормой.