Ответ
Заголовок Accept (иногда ошибочно называемый Accept-Type) — это HTTP-заголовок запроса, в котором клиент сообщает серверу, какие типы медиаданных (MIME-типы) он может обработать и предпочитает получить в ответе. Сервер использует эту информацию для согласования содержимого (Content Negotiation).
Синтаксис и параметр качества (q):
Accept: <тип>/<подтип>; q=<вес>, <тип>/<подтип>
q(quality factor) — значение от 0 до 1, определяющее предпочтение. По умолчаниюq=1.- Сервер выбирает тип с наивысшим весом, который он может предоставить.
Практические примеры для тестирования:
1. Проверка, что API корректно возвращает JSON при соответствующем заголовке:
import requests
def test_api_returns_json_when_accept_header_is_set():
headers = {'Accept': 'application/json'}
response = requests.get('https://api.example.com/data', headers=headers)
assert response.status_code == 200
# Критически важная проверка
assert response.headers['Content-Type'] == 'application/json'
# Убеждаемся, что тело можно распарсить как JSON
data = response.json()
assert data is not None
2. Тестирование согласования содержимого (сервер выбирает предпочтительный тип):
def test_content_negotiation():
# Клиент предпочитает JSON, но согласен на XML с меньшим приоритетом
headers = {'Accept': 'application/json; q=1.0, application/xml; q=0.5'}
response = requests.get('https://api.example.com/config', headers=headers)
# Ожидаем, что сервер, поддерживающий оба формата, вернет JSON
assert 'application/json' in response.headers['Content-Type']
3. Негативный тест: запрос неподдерживаемого формата (должен вернуть 406):
def test_406_not_acceptable():
# Запрашиваем формат, который сервер не поддерживает
headers = {'Accept': 'text/plain'}
response = requests.get('https://api.example.com/users', headers=headers)
# Ожидаем код 406 Not Acceptable
assert response.status_code == 406
Зачем это QA-инженеру: Понимание и тестирование заголовка Accept критично для:
- Валидации RESTful API, где формат ответа определяется клиентом.
- Тестирования совместимости разных клиентов (веб-приложение, мобильное приложение) с одним API.
- Проверки обработки ошибок (код 406) при запросе неподдерживаемого формата.