Тестирование GraphQL
t.me/qa_chilloutПрежде чем говорить про тестирование GraphQL, давайте мы сначала разберемся с теоретической частью. GraphQL — графовый язык запросов для API и среда выполнения этих запросов на стороне сервера. Он предоставляет полное и понятное описание для API, а также позволяет клиентам получать только необходимые данные и производить с ними манипуляции.
В компании Facebook в 2012 году стали использовать GraphQL для мобильных приложений, чтобы уменьшить использование сети. А появился он в открытом доступе только в 2015 году.
Основное отличие GraphQL от традиционного REST API в том, что первый позволяет пользователям API определять, какие данные им нужны в ответе. REST API же организуется по принципу эндпоинтов к определенным ресурсам. Например, чтобы в приложении Юла пользователю показать в ленте и истории и подборки, а еще и товары, приходилось в REST API выполнять аж три запроса на /stories
, /bundles
, /products
, но в GraphQL это делается всего лишь одним запросом.
На схеме ниже, GraphQL является языком запросов между клиентом и сервером, служащим для получения данных по http от клиента, соответственно, к серверу и от сервера клиенту. Иными словами, GraphQL определяет, как получить доступ к данным.
GraphQL, в отличие от REST всегда использует только POST запросы. GraphQL выполняет три основные операции:
Query
– чтение данных (аналог GET запроса в REST),Mutation
– изменение данных (аналог POST, PUT, DELETE в REST),Subscription
– подписки, позволяют подписаться на уведомления от бэка (получение данных в режиме реального времени).
GraphQL-схема – описание того, как выглядит ваш API, какие может иметь типы. Например базовая сущность для Юлы – продукт, может иметь следующий набор полей:
type Product { name: String images: [Image!] price: String city: String dateCreated: Timestamp dealBadge: boolean }
Например, клиенту нужно получить по товару только данные: название товара, стоимость, url картинки, город, имя пользователя, дату регистрации пользователя, рейтинг, соответственно это он и запросит, тем самым сэкономив время и ресурсы:
query { product { name price images { url } city user { name dateRegister rating } } }
где:
query
– тип операции,
name, price ...
– поля.
Тестирование GraphQL
GraphQL playground
GraphQL playground – один из основных инструментов для тестирования. Это интерактивная среда, благодаря которой можно выполнять запросы к серверу.
Где:
- Тело запроса (#1)
- Query variables (#2)
- HTTP Headers (#3)
- Документация (#4)
Для выполнения запроса достаточно указать тело запроса и Query параметры. Затем нажать play. Подробнее почитать про playground можно тут.
Postman
Также можно тестировать GraphQL с помощью всем знакомого инструмента Postman. Например, давайте попробуем запросить магазин на Юле. Для этого в теле POST запроса https://api-gw.youla.io/graphql
передадим:
query{ store(filter:{id:"5f869f2307eabac46809952a"}){id info{id}} }
В ответе мы получили "message": "STORE_NOT_FOUND"
, это и логично, мы запросили несуществующий магазин. Но если бы мы передали верный id, то в ответ на пришел бы магазин. В реквесте у нас query
параметр, который указывает на чтение данных.
Ниже пример запроса на mutation
, те обновление данных по магазину:
Что важно помнить при тестировании
При выполнении любых запросов к GraphQL вы всегда будете получать статус код 200, так как спецификация не привязана к какому-то конкретному протоколу.
Так как же тогда тестировать? Справедливый вопрос, но ответ весьма прост! Нужно смотреть в тело ответа и подробно изучать что содержится в том или ином параметре.
Основные пункты при тестировании GraphQL API:
- API работает и возвращает нужные данные.
- Структура запроса и ответа соответствует документации.
- Во время тестирования ничего не ломается.
Обсудить статью, узнать больше можно в телеграм канале «Тестировщики нужны».