← Назад к вопросам

Как при тестировании затроттлить интернет

1.0 Junior🔥 182 комментариев
#Техники тест-дизайна

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Основные подходы к тестированию с ограничением интернета (throttling)

Для тестирования приложений в условиях ограниченной скорости интернета (throttling) используются как встроенные инструменты браузеров, так и специализированные программы. Это критически важно для проверки поведения приложения при медленном соединении (3G, EDGE), обработки таймаутов, загрузки контента и отзывчивости UI.

Встроенные инструменты разработчика (Chrome, Firefox, Edge)

В Chrome DevTools (вкладка Network) есть предустановленные профили (Online, Fast 3G, Slow 3G, Offline) и возможность кастомной настройки.

  • Активация: Открыть DevTools (F12), вкладка Network, выпадающий список рядом с кнопкой "No throttling".
  • Настройка кастомного профиля: "Add..." позволяет задать:
    *   **Throughput (пропускная способность):** Например, 500 Kbps download / 100 Kbps upload.
    *   **Latency (задержка):** Например, 2000 ms RTT.

```javascript
// Пример: Эмуляция очень медленного соединения через кастомный профиль
// Название: "Custom 2G"
// Download: 100 Kbps (12.5 KB/s)
// Upload: 50 Kbps (6.25 KB/s)
// Latency: 3000 ms
```
  • Применение: Throttling применяется ко всему трафику браузера, включая XHR/Fetch, загрузку статики (JS, CSS, изображения). Позволяет сразу видеть:
    *   Увеличение времени загрузки.
    *   Срабатывание лоадеров/скелетонов.
    *   Поведение при таймаутах запросов.

Использование Charles Proxy или Fiddler

Это более мощные инструменты для точечного контроля. Charles Proxy позволяет установить лимиты скорости для конкретных доменов или всех соединений.

  • Настройка в Charles:
    1.  `Proxy` -> `Throttle Settings`.
    2.  Включить `Enable Throttling` и задать профиль (например, "256 Kbps DSL").
    3.  Можно добавить конкретные домены в `Only for selected hosts`.

```text
Пример конфигурации Throttle в Charles:
- Bandwidth (Down): 256 kbps
- Bandwidth (Up): 128 kbps
- Round-trip latency: 500 ms
- MTU: 1500 bytes
```
  • Преимущество: Throttling работает на уровне ОС для всех приложений, использующих прокси (браузер, мобильное приложение в эмуляторе), что удобно для тестирования нативных мобильных и десктопных приложений.

Throttling на уровне сети (Windows, macOS, Linux)

  • Windows:
    *   **Clumsy:** Бесплатная утилита, которая может задерживать (lag), терять (drop) или троттлить пакеты.
    *   **Командная строка (Network Shell):** Использование `netsh` для ограничения трафика (требует административных прав и может быть сложным).

  • macOS & Linux:
    Можно использовать утилиту **`ipfw`** или более современную **`pfctl`** (macOS) и **`tc`** (Traffic Control в Linux). Например, для Linux:

```bash
# Пример использования `tc` для добавления задержки и ограничения скорости на интерфейс eth0
# Добавляем задержку 1000ms
sudo tc qdisc add dev eth0 root netem delay 1000ms
# Ограничиваем скорость до 1Mbit
sudo tc qdisc add dev eth0 handle 1: root htb default 11
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit
sudo tc class add dev eth0 parent 1:1 classid 1:11 htb rate 1mbit

# Чтобы удалить ограничения:
sudo tc qdisc del dev eth0 root
```
    **Важно:** Это сложный метод, влияющий на всю систему, и его следует применять с осторожностью, желательно в изолированных средах (виртуальные машины, Docker-контейнеры).

Тестирование на мобильных устройствах и в эмуляторах

  • Android Emulator (Android Studio): В настройках эмулятора (... -> Settings -> Cellular) можно установить параметры сети: тип сети (GSM, HSUPA, LTE), сигнал и скорость.
  • Xcode Simulator (iOS): Позволяет выбрать профиль скорости сети (Debug -> Network Link Conditioner -> [Профиль], например, "3G" или "Very Bad Network").
  • Реальные устройства:
    *   **Физическое ограничение:** Использование "раздатчиков" интернета с плохим сигналом или переход в зону слабого покрытия.
    *   **Программное:** Настройка троттлинга через Wi-Fi-роутер (если есть такая функция) или использование мобильного устройства в качестве точки доступа с ограничением в настройках разработчика (если доступно).

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

  1. Функциональность: Критические функции (логин, отправка данных) должны работать, хотя и медленнее. Обработка ошибок сети должна быть адекватной.
  2. Производительность: Время загрузки страниц/экранов, отрисовка контента. Падение FPS (кадров в секунду) при загрузке данных.
  3. Пользовательский интерфейс (UI/UX): Наличие и корректность индикаторов загрузки. Контент не должен "прыгать" при постепенной подгрузке. Кнопки должны блокироваться от повторных нажатий во время выполнения запроса.
  4. Обработка ошибок: При таймаутах должны показываться понятные сообщения пользователю, предлагаться варианты повтора.
  5. Кэширование: Проверить, правильно ли кэшируются статические ресурсы и данные, чтобы уменьшить объем передаваемой информации.
  6. Адаптивность контента: На медленных соединениях иногда логично загружать облегченные версии изображений или видео (например, через srcset для <img>).

Рекомендации по тестированию

  • Автоматизация: Для повторяющихся сценариев можно использовать Selenium или Playwright с заданными настройками сети. Playwright, например, позволяет эмулировать сеть прямо в скрипте.

    # Пример использования Playwright для эмуляции медленной сети
    from playwright.sync_api import sync_playwright
    
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        context = browser.new_context()
        # Включаем эмуляцию сети "Slow 3G"
        context.set_offline(False)
        # Альтернативно, можно задать точные параметры через route.fulfill или page.route
        page = context.new_page()
        page.goto('https://your-app.com')
        # ... выполнение тестовых действий при медленном соединении
        browser.close()
    
  • Сочетание методов: Для комплексной проверки стоит совмещать троттлинг с другими видами тестирования производительности (Load Testing, Stress Testing) и мониторингом метрик (LCP, FCP, TTI через Lighthouse или WebPageTest).

Использование троттлинга — неотъемлемая часть обеспечения качества, особенно для приложений, рассчитанных на глобальную аудиторию с разным качеством связи.