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

Как сделать mock в Charles

1.2 Junior🔥 121 комментариев
#Тестирование API

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

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

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

Как использовать Charles Proxy для создания Mock ответов

Charles Proxy — это мощный инструмент для анализа и модификации сетевого трафика, который широко используется QA-инженерами и разработчиками для тестирования клиент-серверных взаимодействий. Mock (или заглушка) в Charles позволяет имитировать ответы сервера без необходимости изменять реальный backend, что критически важно для тестирования различных сценариев, таких как ошибки сервера, специфичные данные или состояния приложения.

Основные методы создания Mock в Charles

Charles предоставляет несколько способов создания mock-ответов. Вот ключевые подходы:

1. Использование функции Map Local

Эта функция позволяет заменить ответ от удаленного сервера локальным файлом. Это идеально для mock-ответов с заранее подготовленными данными (JSON, XML, HTML).

Процесс создания Map Local Mock:

  • В дереве запросов Charles выберите нужный URL или endpoint.
  • Правая кнопка мыши → Map Local.
  • В диалоговом окне укажите путь к локальному файлу, который будет использоваться как ответ.
  • Настройте параметры, если необходимо (например, изменение Content-Type).
  • После применения все запросы к этому URL будут возвращать содержимое вашего локального файла.
// Пример локального файла mock_response.json для эндпоинта /api/user
{
  "id": 999,
  "name": "Mock User",
  "email": "mock@example.com",
  "status": "active"
}

2. Использование функции Rewrite

Функция Rewrite более динамична и позволяет изменять части ответа (заголовки, тело) по заданным правилам. Это полезно для модификации реальных ответов, например, для инъекции ошибок или изменения статус-кода.

Пример создания Rewrite правила для mock-ошибки:

  • Откройте меню Tools → Rewrite.
  • Создайте новый набор правил (Rule Set).
  • Добавьте правило типа Body, которое заменяет тело ответа на заданное значение при определенных условиях (Condition), например, совпадении URL.
<!-- Пример правила Rewrite для замены успешного ответа на ошибку 500 -->
<rewriteRuleSet>
  <location>*/api/order*</location>
  <rule>
    <type>Body</type>
    <from>{"status": "success"}</from>
    <to>{"error": "Internal Server Error", "code": 500}</to>
    <apply>Response</apply>
  </rule>
</rewriteRuleSet>

3. Использование функции Breakpoints (Точки останова)

Это наиболее мощный и интерактивный метод. Вы можете "перехватить" запрос или ответ перед его отправкой, вручную изменить любые данные и затем продолжить выполнение.

Шаги для создания Mock через Breakpoint:

  • Включите Breakpoints для конкретного URL (правая кнопка мыши на запросе → Breakpoints).
  • Когда запрос будет сделан, Charles остановит его в окне Breakpoint Edit.
  • Вы можете изменить метод, URL, заголовки, тело запроса.
  • Для mock-ответа чаще используется остановка Response. После получения ответа от сервера вы можете полностью заменить его тело, статус-код или заголовки перед отправкой клиенту.

Практические сценарии использования Mock в QA

  • Тестирование обработки ошибок: Mock-ответы с HTTP статусами 4xx и 5xx позволяют проверить, как клиентское приложение обрабатывает сетевые ошибки, без необходимости вызывать реальные сбои на сервере.
  • Тестирование граничных значений и специфичных данных: Например, mock-ответ с пустым списком товаров ({"items": []}) или с очень большим количеством элементов.
  • Тестирование в условиях отсутствия бэкенда: Когда backend еще не разработан или недоступен, mock позволяет продолжать разработку и тестирование фронтенда или мобильного приложения.
  • Изоляция компонентов: Для тестирования конкретного модуля, зависящего от API, без влияния других сервисов.

Рекомендации и лучшие практики

  1. Организация mock-файлов: Создайте структурированную папку в проекте для mock-ответов (например, mocks/api/responses/) с четкими именованиями (user_success.json, order_error_404.json).
  2. Соответствие спецификациям: Убедитесь, что ваши mock-данные соответствуют контракту API (Swagger/OpenAPI), включая структуру JSON, типы данных и обязательные поля.
  3. Временное использование: Charles-мапы и rewrite-правила активны только когда прокси запущен и настроен. Это идеально для временных тестов. Для постоянных mock в CI/CD часто используют специализированные mock-сервисы (WireMock, MockServer).
  4. Сочетание с автоматизацией: В автотестах можно программно управлять Charles через его REST API (начиная с версии 4.6) для динамического включения/выключения mock в ходе выполнения тестовых сценариев.
# Пример скрипта (Python) для взаимодействия с REST API Charles для управления Rewrite
import requests

# Включить правило Rewrite
def enable_mock_rule():
    response = requests.post(
        'http://localhost:8888/api/rewrite/ruleset/enable',
        json={'name': 'MockErrorRuleSet'}
    )
    return response.status_code == 200

Использование Charles для создания mock-ответов превращает его из простого инструмента мониторинга в центральный элемент стратегии тестирования клиент-серверного взаимодействия, обеспечивая контроль, гибкость и воспроизводимость сложных тестовых условий.