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

Приведи пример тестирования GET

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

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

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

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

Пример тестирования GET-запроса

Тестирование GET-запроса — это фундаментальная часть проверки API, так как этот метод используется для получения данных. Я рассмотрю процесс на примере тестирования REST API эндпоинта, который возвращает список пользователей.

1. Понимание тестируемого эндпоинта

Предположим, у нас есть API с эндпоинтом:

GET /api/users

Ожидаемое поведение:

  • Возвращает список пользователей в формате JSON.
  • Может поддерживать параметры для пагинации (limit, offset).
  • Статус код успешного ответа: 200 OK.

2. Разработка тест-кейсов

Для комплексного тестирования я разрабатываю следующие категории тест-кейсов:

Позитивные тесты (валидные запросы):

  • Базовый запрос без параметров: Проверка, что эндпоинт возвращает полный список.
  • Запрос с параметрами пагинации: GET /api/users?limit=5&offset=10 — проверка корректного ограничения данных.
  • Запрос с допустимым фильтром: Например, GET /api/users?active=true — фильтр по статусу.

Негативные тесты (невалидные/граничные условия):

  • Запрос с некорректными параметрами: GET /api/users?limit=-5 — проверка обработки ошибки.
  • Запрос к несуществующему ресурсу: GET /api/users/invalid_id — проверка статуса 404 Not Found.
  • Запрос без авторизации: Если эндпоинт защищён — проверка 401 Unauthorized.

Тесты безопасности и производительности:

  • Инъекция параметров: Попытка SQL-инъекции через параметры.
  • Большие значения параметров: limit=10000 — проверка на нагрузку.
  • Повторяющиеся запросы: Проверка на кэширование.

3. Пример реализации теста в Python с использованием библиотеки requests

import requests
import pytest

BASE_URL = "https://api.example.com"

class TestUsersAPI:
    
    def test_get_all_users(self):
        """Позитивный тест: базовый GET запрос без параметров."""
        response = requests.get(f"{BASE_URL}/api/users")
        
        # Проверка статус кода
        assert response.status_code == 200
        
        # Проверка структуры ответа
        data = response.json()
        assert isinstance(data, list)
        
        # Проверка наличия обязательных полей в первом элементе (если есть)
        if len(data) > 0:
            user = data[0]
            assert "id" in user
            assert "name" in user
            assert "email" in user
        
        # Проверка заголовков
        assert response.headers["Content-Type"] == "application/json"
    
    def test_get_users_with_pagination(self):
        """Позитивный тест: GET запрос с параметрами пагинации."""
        params = {"limit": 2, "offset": 0}
        response = requests.get(f"{BASE_URL}/api/users", params=params)
        
        assert response.status_code == 200
        data = response.json()
        
        # Проверка, что количество элементов соответствует limit
        assert len(data) <= params["limit"]
    
    @pytest.mark.parametrize("invalid_limit", [-1, 0, "abc", 10000])
    def test_get_users_with_invalid_limit(self, invalid_limit):
        """Негативный тест: некорректные значения параметра limit."""
        response = requests.get(f"{BASE_URL}/api/users", params={"limit": invalid_limit})
        
        # Ожидаем ошибку: либо 400 Bad Request, либо обработку на стороне сервера
        # В зависимости от спецификации API
        assert response.status_code in [400, 422, 500]
    
    def test_get_users_unauthorized(self):
        """Негативный тест: запрос без токена авторизации."""
        # Если эндпоинт требует авторизации, но мы не предоставляем токен
        response = requests.get(f"{BASE_URL}/api/users")
        assert response.status_code == 401
        assert "error" in response.json()

4. Ключевые проверки в тестировании GET

При тестировании любого GETEmail запроса я обязательно проверяю:

  • Статус код ответа: Соответствие ожидаемому (200, 404, 400 и т.д.).
  • Структуру данных (JSON Schema): Формат и наличие обязательных полей.
  • Заголовки ответа: Content-Type, Cache-Control, X-Rate-Limit.
  • Бизнес-логику: Корректность фильтрации, сортировки, пагинации.
  • Граничные значения: Обработка минимальных/максимальных параметров.
  • Поведение при отсутствии данных: Пустой ответ ([]) или 404.
  • Временные характеристики: Скорость ответа для оценки производительности.

5. Инструменты и подходы

Для полноценного тестирования GET запросов я использую:

  • Ручное тестирование: Быстрая первоначальная проверка через браузер или curl.
  • Автоматизированные тесты: Скрипты на Python + requests/pytest, JavaScript + axios/jest.
  • Специализированные инструменты: Postman (для коллекций и мониторинга), Swagger (для валидации спецификации).
  • Мониторинг и нагрузочное тестирование: Gatling, k6 для проверки под нагрузкой.

Итог: Тестирование GET-запроса — это не просто проверка, что «сервер отвечает». Это комплексная валидация функциональности, безопасности, производительности и соответствия спецификации API. Метод GET часто является основным способом получения данных, поэтому его стабильность и корректность критически важны для работы всей системы.