Что такое GraphQL с точки зрения тестирования API?

«Что такое GraphQL с точки зрения тестирования API?» — вопрос из категории API тестирование, который задают на 28% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

GraphQL — это язык запросов и среда выполнения для API, который кардинально меняет подход к тестированию по сравнению с REST. Основная фишка — клиент сам определяет структуру требуемых данных в одном запросе.

С точки зрения QA инженера, это означает:

  • Тестирование одной конечной точки (/graphql), вместо множества RESTful эндпоинтов.
  • Фокус на валидации схемы (Schema). Мы проверяем типы данных, обязательные поля (non-nullable) и отношения.
  • Тестирование запросов (Queries), изменений (Mutations) и подписок (Subscriptions).
  • Важность тестирования обработки ошибок, так как некорректный запрос может частично выполниться.

Пример теста запроса с использованием библиотеки pytest и requests:

import pytest
import requests

GRAPHQL_ENDPOINT = "https://api.example.com/graphql"

def test_graphql_query_returns_requested_fields_only():
    """Проверяем, что ответ содержит только запрошенные поля."""
    query = """
    query {
      project(id: "123") {
        name
        status
        # Поле 'description' намеренно не запрашиваем
      }
    }
    """

    response = requests.post(GRAPHQL_ENDPOINT, json={'query': query})
    data = response.json()

    assert response.status_code == 200
    assert 'errors' not in data

    project_data = data['data']['project']
    # Проверяем наличие ожидаемых полей
    assert 'name' in project_data
    assert 'status' in project_data
    # Убеждаемся, что лишние поля не "просочились"
    assert 'description' not in project_data

Ключевые аспекты для тестирования: валидация схемы, тестирование резолверов, проверка производительности при вложенных запросах (проблема N+1) и безопасность (защита от слишком сложных запросов).