Как вы тестируете HTTP GET-запросы?

Ответ

Тестирование GET-запросов фокусируется на корректности данных, параметрах запроса, кодах ответа и заголовках.

Основные аспекты проверки:

  1. Позитивные сценарии: Валидация структуры и данных ответа при корректных параметрах.
  2. Негативные сценарии: Проверка обработки невалидных или отсутствующих параметров, несуществующих ресурсов.
  3. Параметры запроса: Тестирование фильтрации, пагинации, сортировки через query-параметры.
  4. Заголовки (Headers): Проверка Content-Type, Cache-Control, CORS-заголовков.
  5. Производительность: Проверка времени ответа и соблюдения лимитов (rate limiting).

Пример теста на Python с библиотекой requests:

import requests
import pytest

def test_get_user_with_valid_id():
    # GET-запрос с параметром
    response = requests.get(
        'https://api.example.com/users',
        params={'id': 1, 'fields': 'name,email'}
    )

    # Проверки
    assert response.status_code == 200
    assert response.headers['Content-Type'] == 'application/json'

    user_data = response.json()
    assert user_data['id'] == 1
    assert 'name' in user_data
    assert 'email' in user_data

def test_get_user_with_invalid_id():
    # Проверка обработки ошибки
    response = requests.get('https://api.example.com/users', params={'id': 99999})
    assert response.status_code == 404

Инструменты: Postman (для ручного тестирования и коллекций), curl для быстрых проверок, автотесты на Python/pytest для регрессии.

Ответ 18+ 🔞

А, ну вот, опять про эти ваши GET-запросы, блядь. Сидишь, значит, как дурак, и проверяешь, чтобы сервер не накосячил. А он, сука, всегда накосячит, ядрёна вошь! Ну ладно, давай по порядку, чтобы ты не пиздел потом, что не понял.

Тестирование этих самых GET-запросов — это не просто ткнуть и посмотреть. Это, блядь, целое искусство, где надо проверить всё: что он тебе отдаёт, как отдаёт и не послал ли он тебя нахуй по ошибке.

На что смотрим, как ястреб, блядь:

  1. Когда всё хорошо (позитив): Получил запрос — отдал правильные данные, структура не разъебалась, всё на месте. Красота.
  2. Когда всё пиздец (негатив): А вот это самое интересное! Подсовываешь ему левые параметры, несуществующий айдишник — и смотришь, не словил ли он ахуй и не отдал ли тебе вместо ошибки какую-нибудь хуйню. Или просто не лег лицом в клавиатуру.
  3. Параметры в запросе (query-params): Это когда ты ему говоришь: «Дай мне пользователей, но только на второй странице, отсортированных по имени, и покажи мне только десять штук». И смотришь, не перепутал ли он страницы и не отсортировал ли по размеру обуви, ебушки-воробушки.
  4. Заголовки (Headers): Ага, а тут проверяем, не врёт ли он нам. Сказал, что отдаёт JSON (Content-Type: application/json), а сам тебе HTML-страничку с котиками подсунул. Или забыл сказать браузеру, что можно кэшировать ответ (Cache-Control). Или на CORS-заголовки забил болт, и фронтенд не может к нему достучаться. Пидарас шерстяной!
  5. Скорость (Производительность): Тут просто: делаешь запрос и смотришь на часы. Если ответа ждёшь дольше, чем бабка в очереди за пенсией, — это пиздец. Или если он тебе больше N запросов в минуту не позволяет — тоже надо проверить, не начнёт ли он тебя посылать после десятого раза.

Вот, смотри, как это на Python с requests выглядит, чтоб ты не думал, что я пизжу:

import requests
import pytest

def test_get_user_with_valid_id():
    # Нормальный, адекватный запрос за пользователем
    response = requests.get(
        'https://api.example.com/users',
        params={'id': 1, 'fields': 'name,email'}  # Просим конкретные поля, а не всю его подноготную
    )

    # А теперь начинается проверка, блядь
    assert response.status_code == 200  # Во-первых, чтоб не 404 и не 500, а нормальный статус
    assert response.headers['Content-Type'] == 'application/json'  # Во-вторых, чтоб JSON, а не XML какой-нибудь

    user_data = response.json()  # Распарсили ответ
    assert user_data['id'] == 1  # Айдишник тот же, что просили?
    assert 'name' in user_data   # Имя есть?
    assert 'email' in user_data  # Почта есть? Всё, чувак прошёл проверку.

def test_get_user_with_invalid_id():
    # А теперь давай нахулим! Запросим пользователя, которого нет и не было
    response = requests.get('https://api.example.com/users', params={'id': 99999})
    # И что мы хотим увидеть? Правильно, ошибку 404 — «Не найдено, иди нахуй».
    assert response.status_code == 404

Чем всё это дело делать? Ручками — в Postman или просто curl в терминале дёргать, чтобы быстро понять, жив ли сервер вообще. А чтобы каждый раз не бегать и не проверять одно и то же — пишешь автотесты, как выше, на Python/pytest. Запустил раз — и спишь спокойно, пока какой-нибудь дебил не сломает продакшен, подозрение ебать чувствую.