Как тестировать GraphQL API? Гайд для начинающих

Как тестировать GraphQL API с помощью Postman

GraphQL — язык запросов к API, разработанный в Facebook. Появился в открытом доступе в 2015 году. Удобный подход к построению запросов в GraphQL позволяет значительно упрощать сложные API-интерфейсы.

Изначально GraphQL использовался командой iOS-разработчиков в Facebook и затем захватил мир мобильной разработки. На сегодняшний день технология доступна и в веб-разработке.

GraphQL позволяет пользователям API определять, какие данные им нужны в ответе. GraphQL API, в отличие от традиционного REST API, организуется по принципу полей и типов, а не эндпоинтов (запросов).

Как тестировщики, мы сконцентрируемся на том, как писать запросы и проверять ответы.

GraphQL vs REST

В этой статье мы не будем сравнивать GraphQL и REST по производительности, безопасности (пусть этим займутся разработчики). Мы проанализируем отличия с точки зрения тестирования.

GraphQL API очень популярны среди разработчиков. Тем не менее, с 2020 года наблюдается паритет между GraphQL и REST.

Источник: https://graphql.org

Одним из самых больших преимуществ GraphQL является его гибкость — он позволяет делать более точные запросы, определяя поля, которые вы хотите получить в ответе. Это особенно полезно, когда вы работаете с массивными API, которые содержат много данных. RETSful API часто возвращают больше данных, чем нужно клиенту. Бывают и обратные ситуации, когда нужно делать несколько запросов, чтобы получить все данные, которые нужны. GraphQL лишен этих недостатков.

Например, если вам нужно получить список всех названий всех треков всех альбомов какого-нибудь исполнителя с помощью REST API Spotify, вам нужно будет написать три запроса. Первым запросом вы получите ID исполнителя, вторым — все его альбомы, третьим — все треки в каждом альбоме. С помощью GraphQL API все эти данные можно получить с помощью одного запроса:

Создание GraphQL API Schema для автодополнения при написании запросов

Зайдите во вкладку APIs в Postman и импортируйте схему или создайте новый API. Мы рассмотрим импорт схемы (похожие шаги вы должны будете сделать, если создаете новый API).

Нажимаем на кнопку «Import»

Выбираем GraphQL и кликаем на кнопку «Upload Files»

В результате вы должны будете увидеть что-то похожее на изображении ниже. Нажмите на кнопку «Import»

Теперь выбираем схему.

В результате вы получите возможность пользоваться автодополнением — оно очень полезно при написании Query/Mutation в GraphQL

Как тестировать GraphQL API с помощью Postman

Мы будем тестировать CRUD API. CRUD — сокращение для Create, Read, Update и Delete. Т.е. CRUD API позволяет читать, изменять, создавать и удалять ресурсы с помощью соответствующих запросов. В GraphQL тип Query используются для чтения (получения) данных с сервера. Все остальные CRUD-операции (создание, изменение, удаление) выполняются с помощью типа Mutation.

Для того, чтобы отправить запрос с помощью Postman, выберите «GraphQL» во вкладке Body (показывает, что в теле запроса будет использоваться graphql-синтаксис).

Вот еще 2 вещи, которые нужно сделать:

  1. Нужно указать bearer token
  2. Нужно выставить Content/Type значение application/json

Пишем Query

Теперь мы готовы написать первый запрос. Мы будем использовать тестовый graphql сервер Spotify для практики:

https://spotify-graphql-server.herokuapp.com/graphql

Пример запроса типа Query (запрашиваем поля name, ID, image и albums

При написании graphql-запросов типа Query, можно использовать параметры. Параметры — значения со знаком $ перед ними — мы можем заменить их на какие-либо значения. В секции справа мы можем определить значения для параметров. Можно даже использовать переменные окружения Postman, как на изображении ниже:

Используем переменную окружения Postman

После получения ответа, мы должны его проверить. С точки зрения написания тестов, нет большой разницы между тестированием ответов graphql или REST — в обоих случаях нам вернется JSON. Пример простого теста вы можете увидеть на изображении ниже:

Простой пример теста для проверки ответа в Postman

Пишем Mutation

В отличие от Query, Mutation в GraphQL используются для операций создания, изменения или удаления ресурсов. Для обучения будем пользоваться open-source api:

https://hasura.io/learn/graphql/graphiql

На изображениях ниже вы можете видеть простые примеры Mutation (на изменение и удаление ресурсов):

Пример Mutation на изменение ресурса (Update)
Пример Mutation на удаление ресурса (Delete)

На последнем изображении мы написали Mutation, который удаляет запись c todo, которая создается на первом изображении (ID: 48440). Поле affected_rows показывает, сколько записей в таблице было затронуто запросом. В дополнение, в ответе содержится сам объект, который был удален.

Директивы

Директивы в GraphQL могут влиять на выполнение запросов. Директивы можно добавлять к запросу (или к фрагменту), чтобы включать/исключать поля из ответа.

  • @include (if: Boolean) — включать поле/фрагмент только если аргумент равен true
  • @skip (if: Boolean) — исключать поле/фрагмент только если аргумент равен true
Пример использования директивы @include

Директивы добавляют запросам гибкость и позволяют не писать отдельные запросы для каждого случая, когда нужно добавить/удалить какие-то поля из запроса. Директивы позволяют динамически менять структуру и форму запросов с помощью параметров. В примере ниже, передавая false в качестве значения параметра withAlbums, мы не запрашиваем массив альбомов:

Здесь параметр withAlbumns снова выставлен в true

В зависимости от реализации graphql сервера, могут использоваться и другие директивы. Более того, можно создавать и свои собственные директивы.

Заключение

И GraphQL и REST — отличные способы организации API. Каждый из этих подходов имеет свои преимущества и свои недостатки, но оба широко распространены и очень важно знать основы тестирования обоих подходов.

В этой короткой статье мы постарались помочь новичкам в GraphQL сделать первые шаги к тестированию GraphQL API с помощью Postman. Не останавливайтесь только на повторении того, что есть в этой статье — после прочтения попробуйте выполнить все CRUD операции, используйте параметры и директивы. Если хотите узнать о GraphQL больше, рекомендуем документацию — она очень подробная и понятная.

Какой была ваша первая зарплата в QA и как вы искали первую работу?

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

3 КОММЕНТАРИИ

Подписаться
Уведомить о
guest

3 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Tusk
Tusk
2 лет назад

Недавно мигрировали с REST-а на GraphQL — стало гораздо больше геморроя, чем удобства. И с точки зрения разработки и с точки зрения тестирования. Не понимаю, почему его так превозносят.

andy
andy
2 лет назад
Ответить на  Tusk

Аналогично и у нас. GraphQL — хайповая тема, но он далеко не везде подходит. Он классно вписывается в стандартные шаблонные несложные проекты. Но в проектах со сложным нетривиальным бэкендом не приносит толком никакого удобства, а наоборот усложняет жизнь и разработчикам и QA.

murr
murr
2 лет назад

Спасибо, полезная статья, единственное, у скриншотов качество не очень, не все можно разобрать.

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

? Популярное

? Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать
$1100*
медианная зарплата в QA в июне 2023

*по результатам опроса QA-инженеров в нашем телеграм-канале

Собеседование

19%*
IT-специалистов переехало или приняло решение о переезде из России по состоянию на конец марта 2022

*по результатам опроса в нашем телеграм-канале

live

Обсуждают сейчас