Ответ
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) и безопасность (защита от слишком сложных запросов).