Как при тестировании затроттлить интернет
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Основные подходы к тестированию с ограничением интернета (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-роутер (если есть такая функция) или использование мобильного устройства в качестве точки доступа с ограничением в настройках разработчика (если доступно).
Что важно проверять при тестировании с троттлингом
- Функциональность: Критические функции (логин, отправка данных) должны работать, хотя и медленнее. Обработка ошибок сети должна быть адекватной.
- Производительность: Время загрузки страниц/экранов, отрисовка контента. Падение FPS (кадров в секунду) при загрузке данных.
- Пользовательский интерфейс (UI/UX): Наличие и корректность индикаторов загрузки. Контент не должен "прыгать" при постепенной подгрузке. Кнопки должны блокироваться от повторных нажатий во время выполнения запроса.
- Обработка ошибок: При таймаутах должны показываться понятные сообщения пользователю, предлагаться варианты повтора.
- Кэширование: Проверить, правильно ли кэшируются статические ресурсы и данные, чтобы уменьшить объем передаваемой информации.
- Адаптивность контента: На медленных соединениях иногда логично загружать облегченные версии изображений или видео (например, через
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).
Использование троттлинга — неотъемлемая часть обеспечения качества, особенно для приложений, рассчитанных на глобальную аудиторию с разным качеством связи.