Тестирование GraphQL

Тестирование 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 выполняет три основные операции:

  1. Query – чтение данных (аналог GET запроса в REST),
  2. Mutation – изменение данных (аналог POST, PUT, DELETE в REST),
  3. 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 – один из основных инструментов для тестирования. Это интерактивная среда, благодаря которой можно выполнять запросы к серверу.

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 работает и возвращает нужные данные.
  • Структура запроса и ответа соответствует документации.
  • Во время тестирования ничего не ломается.


Обсудить статью, узнать больше можно в телеграм канале «Тестировщики нужны».

Report Page