Тестирование работы мобильного приложения при нестабильном интернете

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Тестирование работы мобильного приложения при нестабильном интернете
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1052
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Тестирование работы мобильного приложения при нестабильном интернете

Мобильная сеть — не стабильный канал. Пользователь едет в метро: сеть есть, пакеты теряются в 30%. Переходит с WiFi на LTE: 2–3 секунды полного обрыва. Заходит в лифт: соединение пропадает на минуту. Большинство приложений тестируют только на стабильном WiFi и выглядят катастрофически на реальном трафике.

Инструменты симуляции

iOS: Network Link Conditioner

На iOS стандартный инструмент — Network Link Conditioner из дополнительных инструментов Xcode (Additional Tools for Xcode). Устанавливается на симулятор и реальное устройство через Настройки → Разработчик.

Профили: 3G, Edge, 100% Loss, Very Bad Network (потеря 5%, задержка 500 мс). Можно создать кастомный: задать Downlink Bandwidth, Uplink Bandwidth, Delay, Packet Loss.

Программное управление для автоматизированных тестов — через XCTest и XCTNSURLSessionTaskMetrics. Метрики дают данные о реальных условиях соединения в тесте.

Android: tc и emulator network settings

На эмуляторе: Emulator Extended Controls → Cellular → Network type → Edge / GSM и Signal strength → Poor.

Программная симуляция через adb и tc (traffic control):

# Добавляем задержку 500ms и потерю пакетов 20%
adb shell tc qdisc add dev wlan0 root netem delay 500ms loss 20%

# Сбрасываем
adb shell tc qdisc del dev wlan0 root

tc netem работает на уровне сетевого интерфейса эмулятора. На реальном устройстве нужен root — для тестирования используем эмулятор или тестируем в зонах реального плохого покрытия.

Кросс-платформа: Charles Proxy и Proxyman

Charles Proxy (macOS/Windows) и Proxyman (macOS) работают как man-in-the-middle прокси. Приложение настраивается на использование прокси, и уже там применяем throttling:

Charles → Proxy → Throttle Settings: выбираем профиль GPRS / 3G / Custom. Все запросы приложения проходят через прокси с симулированной задержкой и ограниченной полосой.

Дополнительно — Breakpoints: перехватываем запрос, задерживаем его на 10 секунд вручную, имитируем timeout. Полезно для проверки UI в состоянии ожидания.

Что проверяем

Timeout и retry-логика. Запрос завис на 30 секунд — что видит пользователь? Крутящийся spinner без возможности отменить — плохо. Кнопка «Отмена» + таймаут + понятное сообщение об ошибке — хорошо. Проверяем каждый тип запроса: загрузка ленты, отправка формы, загрузка файла.

Переключение сетей. Переход WiFi→LTE прерывает TCP-соединения. Правильное поведение: приложение определяет смену через NWPathMonitor (iOS) / ConnectivityManager.NetworkCallback (Android) и переподключается. Неправильное: бесконечный спиннер, потому что старый URLSession-таск завис.

// iOS: мониторинг смены сети
let monitor = NWPathMonitor()
monitor.pathUpdateHandler = { path in
  if path.status == .satisfied {
    // есть соединение — повторяем незавершённые запросы
    self.retryPendingRequests()
  }
}
monitor.start(queue: DispatchQueue.global(qos: .background))

Потеря пакетов. При 15–20% потере пакетов HTTP-запрос может завершиться, может зависнуть. Проверяем: каждый запрос имеет timeout, таймаут разумный (5–15 секунд для данных, 30–60 для загрузки файлов), retry реализован с экспоненциальной задержкой.

Частичная загрузка. Данные приходят порциями при медленном соединении. Если приложение показывает контент только после получения всего ответа — пользователь видит белый экран 10 секунд. Streaming или прогрессивная загрузка улучшает восприятие.

Типичные находки при тестировании

Незакрытые соединения. URLSession с задачами, которые не отменяются при исчезновении контроллера. Следствие: memory leak + запрос приходит через 30 секунд, когда экран уже закрыт, и приложение падает с EXC_BAD_ACCESS.

Дублирование запросов при retry. Кнопка «Повторить» вызывает тот же метод, который уже выполняется. В итоге два одновременных запроса, два ответа, состояние гонки. Исправление: флаг isLoading, дизэйблим кнопку во время запроса.

Потеря данных при прерывании. Пользователь заполнил форму, нажал «Сохранить», соединение упало. Данные не сохранились — и потерялись. Правильное решение: локальное сохранение черновика до отправки, автоматическая повторная отправка при восстановлении сети.

Сроки

2–3 дня — настройка инструментов симуляции, тестирование по чеклисту сценариев, отчёт с находками. Стоимость рассчитывается индивидуально.