Что подменял в Charles
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Подмена данных в 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 для ручной подмены ответа:
- Устанавливаю брейкпоинт на нужный URL.
- Приложение отправляет запрос, и Charles приостанавливает его.
- В интерфейсе Charles я редактирую ответ (например, меняю
"status": "ok"на"status": "failed"). - Продолжаю выполнение, и приложение получает модифицированные данные.
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-инженера для работы с сетевым трафиком. Умение виртуозно подменять данные позволяет проводить глубокое, изолированное тестирование клиентской части приложения, эмулировать редкие и ошибочные сценарии работы сервера и значительно ускорять процесс отладки, не дожидаясь готовности или исправлений на бэкенде.