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

Что подменял в Charles

2.0 Middle🔥 241 комментариев
#Soft skills и карьера#Автоматизация тестирования

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

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

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

Подмена данных в Charles Proxy

Как опытный QA-инженер, я активно использую Charles Proxy для тестирования, отладки и подмены данных в клиент-серверном взаимодействии. Подмена (или маппинг) — одна из ключевых функций Charles, позволяющая изменять запросы и ответы "на лету". Вот основные сценарии подмены, которые я применяю на практике:

1. Подмена запросов (Request)

Используется для эмуляции различных входных данных, которые отправляются на сервер.

  • Изменение параметров запроса: например, подмена user_id для тестирования прав доступа.
  • Модификация тела запроса (для POST/PUT): изменение JSON/XML данных, например, подстановка некорректных или граничных значений в поля формы.
  • Подмена заголовков (Headers): добавление, удаление или изменение заголовков (например, Authorization, User-Agent).

Пример настройки Map Local для подмены тела запроса на статический JSON-файл:

// Файл: test_error_response.json
{
  "status": "error",
  "code": 500,
  "message": "Internal Server Error - Injected via Charles"
}

2. Подмена ответов (Response)

Наиболее часто используемая мною функция. Позволяет "подсунуть" приложению заранее подготовленный ответ от сервера.

  • Эмуляция различных ответов сервера: успешных (200), ошибок (4xx, 5xx), редиректов (3xx).
  • Тестирование на разных данных: подмена ответа API, чтобы приложение отображало, например, пустой список товаров, очень длинный текст или специфичные данные (акции, промокоды).
  • Имитация медленного ответа (Throttling): установка задержки для тестирования таймаутов и поведения UI при медленной сети.
  • Подмена целых файлов: например, загрузка другой версии JS/CSS файла, изображения или конфигурации.

Пример использования Breakpoints для ручной подмены ответа:

  1. Устанавливаю брейкпоинт на нужный URL.
  2. Приложение отправляет запрос, и Charles приостанавливает его.
  3. В интерфейсе Charles я редактирую ответ (например, меняю "status": "ok" на "status": "failed").
  4. Продолжаю выполнение, и приложение получает модифицированные данные.

3. Подмена хостов (Map Remote / Map Local)

Эти функции позволяют перенаправлять запросы с одного адреса на другой.

  • Map Remote: Перенаправление запросов с api.prod.example.com на api.stage.example.com. Полезно для тестирования нового бэкенда без пересборки клиента.
  • Map Local (чаще всего): Замена ответа с удаленного сервера на файл с локального диска. Это идеально для:
    *   Тестирования новых функций API, которых еще нет на бэкенде.
    *   Изоляции фронтенд-тестирования от нестабильного бэкенда.
    *   Воспроизведения конкретных сценариев (например, ответ с ошибкой валидации).

4. Rewrite и Breakpoints

  • Rewrite Rules: Автоматизированная подмена по заданным правилам (паттернам). Например, глобальная замена всех вхождений "currency": "USD" на "currency": "EUR" во всех ответах.
  • Breakpoints: Точечная, интерактивная подмена, как описано выше. Дает максимальный контроль.

Практические примеры из моей работы:

  • Тестирование обработки ошибок платежа: С помощью Map Local я подменяю успешный ответ платежного гейта ({"result": "success"}) на ответ об ошибке ({"result": "insufficient_funds"}) и проверяю, правильно ли приложение показывает сообщение пользователю.
  • Тестирование локализации: Подменяю в ответе API код валюты и языковые строки, чтобы проверить отображение интерфейса без переключения языка в настройках.
  • Воспроизведение бага: Когда на боевом сервере возникает специфичный ответ, вызывающий падение приложения, я сохраняю этот ответ в файл и настраиваю Map Local для его воспроизведения на тестовом стенде для отладки.
  • Тестирование производительности: Использую Throttling для эмуляции сетей 3G/Edge и наблюдаю за поведением лоадеров, таймаутов и отображения контента.

Заключение: Charles Proxy — это "швейцарский нож" QA-инженера для работы с сетевым трафиком. Умение виртуозно подменять данные позволяет проводить глубокое, изолированное тестирование клиентской части приложения, эмулировать редкие и ошибочные сценарии работы сервера и значительно ускорять процесс отладки, не дожидаясь готовности или исправлений на бэкенде.