Как с помощью снифера трафика (Fiddler/Charles) имитировать ситуацию, когда сервер не отвечает?

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

Ответ

Сниферы трафика позволяют перехватывать и модифицировать HTTP/HTTPS запросы и ответы, что можно использовать для эмуляции различных проблем с сервером.

Сценарии и методы имитации:

1. Полный таймаут (отсутствие ответа):

  • Fiddler: Использовать функцию AutoResponder с правилом, которое задерживает ответ на очень долгое время (вызывая таймаут на стороне клиента) или использует опцию *DROP.
  • Charles: В меню Proxy > Throttle Settings можно установить очень низкую скорость (например, 1 байт/с) или 100% потерю пакетов для конкретного домена.

2. Возврат ошибок 5xx:

  • Fiddler (Custom Rules): Отредактируйте файл CustomRules.js, добавив код в секцию OnBeforeResponse:
    if (oSession.HostnameIs("api.example.com")) {
    // Вернуть ошибку 504 Gateway Timeout
    oSession.responseCode = 504;
    oSession.oResponse.headers.HTTPResponseStatus = "504 Gateway Timeout";
    // Или полностью оборвать соединение
    // oSession["x-breakresponse"] = "drop";
    }
  • Charles (Map Local/Remote): Создайте локальный файл с содержимым HTTP-ответа, содержащим статус 503, и настройте подмену удаленного URL на этот файл.

3. Обрыв соединения во время передачи данных:

  • В Fiddler можно использовать скрипт для принудительного закрытия соединения (oSession.oRequest.FailSession()).

4. Альтернативный метод (уровень ОС): Для более низкоуровневой имитации можно использовать iptables (Linux) или pfctl (macOS) для блокировки трафика на определенный порт:

# Блокировать исходящие HTTPS-запросы к example.com
sudo iptables -A OUTPUT -p tcp -d example.com --dport 443 -j DROP

Важно: После тестирования не забудьте отключить правила или удалить блокировку в iptables (sudo iptables -D OUTPUT ...).