Как написать и протестировать HTTP-запрос?

«Как написать и протестировать HTTP-запрос?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Написание HTTP-запроса включает формирование метода, URL, заголовков и тела. Тестирование — проверку ответа на корректность и соответствие требованиям.

1. Создание запроса (на примере Python с библиотекой requests):

  • GET-запрос (получение данных):

    import requests
    
    # Запрос с параметрами в URL
    response = requests.get(
        'https://api.example.com/users',
        params={'id': 1, 'active': 'true'},  # Параметры запроса
        headers={'User-Agent': 'MyTestApp/1.0'}  # Заголовки
    )
  • POST-запрос (отправка данных):

    import requests
    
    # Отправка JSON-данных
    payload = {'name': 'John', 'age': 30}
    response = requests.post(
        'https://api.example.com/users',
        json=payload,  # Библиотека сама установит Content-Type: application/json
        headers={'Authorization': 'Bearer your_token_here'}
    )

2. Ключевые аспекты тестирования ответа:

  • Статус-код: assert response.status_code == 200
  • Заголовки: Проверка Content-Type, Cache-Control и др.
  • Тело ответа:
    data = response.json()
    assert data['name'] == 'John'  # Проверка значения поля
    assert 'id' in data            # Проверка наличия поля
    assert isinstance(data['items'], list)  # Проверка типа данных
  • Время отклика (Performance): assert response.elapsed.total_seconds() < 1.0
  • Обработка ошибок: Обязательно тестируются негативные сценарии (4xx, 5xx).
    # Проверка обработки неверных данных
    response = requests.post('https://api.example.com/users', json={})
    assert response.status_code == 400  # Ожидаем "Bad Request"
    error_data = response.json()
    assert 'error' in error_data