Как тестировать мобильное приложение в условиях нестабильного или медленного интернета?

«Как тестировать мобильное приложение в условиях нестабильного или медленного интернета?» — вопрос из категории Мобильное тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тестирование в условиях плохого соединения проверяет отказоустойчивость и пользовательский опыт (UX).

1. Эмуляция сетевых условий (Network Throttling):

  • Браузерные DevTools: Во вкладке Network можно выбрать предустановки (Slow 3G, Offline) или задать кастомные параметры (Latency, Throughput, Packet loss).
  • Прокси-инструменты: Charles Proxy, Fiddler — позволяют детально настраивать скорость, вводить задержки и симулировать обрыв соединения.
  • Нативные настройки Android/iOS: В эмуляторах/симуляторах и на реальных устройствах (например, настройки разработчика в Android).

2. Ключевые сценарии для проверки:

  • Таймауты и повторные попытки (Retry Logic): Приложение должно корректно обрабатывать таймауты запросов и иметь стратегию повторных попыток с экспоненциальной задержкой.
    
    // Пример теста retry-логики на Jest
    jest.setTimeout(10000);

test('API call retries 3 times on network failure', async () => { const mockFetch = jest .fn() .mockRejectedValueOnce(new Error('Network Error')) .mockRejectedValueOnce(new Error('Network Error')) .mockResolvedValueOnce({ data: 'success' });

await fetchWithRetry(mockFetch, { retries: 3 }); expect(mockFetch).toHaveBeenCalledTimes(3); // Убедились, что было 3 попытки });


*   **Локальное кэширование и офлайн-работа:** Проверить, сохраняются ли данные локально при потере связи и синхронизируются ли при восстановлении.
*   **Индикация состояния:** Пользователь должен видеть индикатор загрузки или сообщение об отсутствии соединения.
*   **Graceful Degradation:** Часть функционала (например, загрузка тяжелых изображений) может отключаться, но основная функция (просмотр текста) должна работать.
*   **Восстановление соединения (Reconnect):** Автоматическое или по действию пользователя возобновление прерванных операций.

**3. Автоматизация:** Инструменты вроде Appium или Detox можно комбинировать с прокси для автоматизации сценариев при разных сетевых профилях.