GraphQL API

Практичний посібник для тестувальників

Відкрийте собі потужність GraphQL API і дізнайтеся, як ефективно його тестувати

Що таке GraphQL API та чим він відрізняється від REST API?

GraphQL API

— це мова запитів та середовище виконання для API, що дозволяє клієнтам вимагати лише необхідні дані. Він надає єдину точку доступу до даних, дозволяючи клієнтам отримувати саме те, що їм потрібно без надмірності.

REST API

- це архітектурний стиль для веб-сервісів, який використовує HTTP-методи (GET, POST, PUT, DELETE) для взаємодії з ресурсами. REST-API часто повертають фіксовані структури даних, які можуть містити непотрібну інформацію.

Основні поняття GraphQL

запити, мутації, типи даних

Запити

- це інструкції, що надсилаються клієнтом для отримання даних від GraphQL API. Вони визначають, які дані потрібно одержати, використовуючи мову GraphQL.

Мутації

- це операції, які змінюють дані GraphQL API. Вони використовуються для створення, оновлення або видалення даних.

Типи даних

Типи даних визначають структуру даних GraphQL API. Вони можуть бути скалярними (наприклад, рядок, число) чи складними (об'єкти, списки).

Встановлення та налаштування GraphQL-клієнта

Вибір інструменту

Існує безліч інструментів для роботи з GraphQL API, як GraphiQL, Insomnia, Postman.

Встановлення

Встановимо вибраний інструмент. Інструкції зі встановлення буде нижче.

Налаштування

Налаштуємо інструмент, вказавши URL-адресу GraphQL-сервера.

Тестування

Напишемо тестовий запит, щоб переконатися, що інструмент правильно налаштований і може успішно взаємодіяти з GraphQL API.

Робота з фрагментами та змінними у запитах

  • Фрагменти

    Фрагменти – це частини GraphQL-запитів, які можна повторно використати в інших запитах.

  • Змінні

    Змінні дозволяють динамічно передавати значення запити, що робить їх гнучкішими.

  • Переваги

    Використання фрагментів та змінних робить запити більш читаними, структурованими та зручними для повторного використання.

Виконання мутацій та керування станом

  • Визначення мутації

    Мутації - це операції, які змінюють дані GraphQL API. Їх можна використовувати для створення, оновлення або видалення даних.

  • Передача аргументів

    При виконанні мутації необхідно передати необхідні аргументи, які визначають, які дані мають бути змінені.

  • Обробка результату

    Після успішного виконання мутації GraphQL API повертає інформацію про зміну даних.

Тестування GraphQL API: інструменти та підходи

Інтеграційне тестування

Перевірте взаємодію між GraphQL API та іншими компонентами системи, такими як бази даних або зовнішні сервіси.

Функціональне тестування

Перевірка коректності роботи GraphQL API, його здатності виконувати запити та повертати очікувані результати.

Навантажувальне тестування

Перевірка здатності GraphQL API обробляти великі обсяги запитів та витримувати пікові навантаження.

Documentation- List of Posts

context

Scope under which the request is made; determines fields present in response.

Default: view

One of: view, embed, edit

page

Current page of the collection.

Default: 1

per_page

Maximum number of items to be returned in result set.

Default: 10

search

Limit results to those matching a string.

after

Limit response to posts published after a given ISO8601 compliant date.

modified_after

Limit response to posts modified after a given ISO8601 compliant date.

author

Limit result set to posts assigned to specific authors.

author_exclude

Ensure result set excludes posts assigned to specific authors.

before

Limit response to posts published before a given ISO8601 compliant date.

modified_before

Limit response to posts modified before a given ISO8601 compliant date.

exclude

Ensure result set excludes specific IDs.

include

Limit result set to specific IDs.

offset

Offset the result set by a specific number of items.

order

Order sort attribute ascending or descending.

Default: desc

One of: asc, desc

orderby

Sort collection by post attribute.

Default: date

One of: author, date, id, include, modified, parent, relevance, slug, include_slugs, title

search_columns

Array of column names to be searched.

slug

Limit result set to posts with one or more specific slugs.

status

Limit result set to posts assigned one or more statuses.

Default: publish

tax_relation

Limit result set based on relationship between multiple taxonomies.

One of: AND, OR

categories

Limit result set to items with specific terms assigned in the categories taxonomy.

categories_exclude

Limit result set to items except those with specific terms assigned in the categories taxonomy.

tags

Limit result set to items with specific terms assigned in the tags taxonomy.

tags_exclude

Limit result set to items except those with specific terms assigned in the tags taxonomy.

sticky

Limit result set to items that are sticky.

Робота з Apollo Client і GraphQL API

Цей посібник допоможе вам налаштувати проект для роботи з WordPress GraphQL API, використовуючи Apollo Client. Ви навчитеся надсилати запити до API та обробляти отримані дані.

Попередні вимоги

  • Базові знання JavaScript та Node.js
  • Встановлений Node.js та npm на вашому комп'ютері
  • Встановлений Visual Studio Code (VS Code)

Крок 1: Налаштування проект

Створіть нову директорію graphql-project   і перейдіть до неї

У VS Code відкрийте новий термінал (Terminal -> New Terminal) та виконайте:
npm init -y

З'явиться новий файл package.json в корені проекту та вставте наступний вміст:

{
«name»: «graphql-project»,
«version»: «1.0.0»,
«type»: «module»,
«main»: «index.js»,
«scripts»: {
«start»: «node index.js»
},
«dependencies»: {
«@apollo/client»: «^3.11.5»,
«cross-fetch»: «^3.1.8»,
«graphql»: «^16.9.0»
}
}

У терміналі VS Code встановіть залежності, виконавши команду:

npm install

Крок 2: Створення Apollo Client

  • У VS Code створіть новий файл index.js в корені проекту.
  • Вставте наступний код у index.js:

import pkg from ‘@apollo/client’;
const { ApolloClient, InMemoryCache, gql } = pkg;
import fetch from ‘cross-fetch’;

// Створюємо екземпляр Apollo Client
const client = new ApolloClient({
uri: ‘http://dev.emeli.in.ua/graphql’, // URL нашего GraphQL API
cache: new InMemoryCache(),
fetch: fetch
});

// Визначаємо GraphQL запит
const GET_POSTS = gql`
query GetPosts {
posts {
nodes {
id
title
date
}
}
}
`;

// Функція для виконання запиту
async function fetchPosts() {
try {
const { data } = await client.query({
query: GET_POSTS
});
console.log(‘Posts:’, data.posts.nodes);
} catch (error) {
console.error(‘Error fetching posts:’, error);
}
}

// Викликаємо функцію
fetchPosts();

Крок 3: Запуск проекту

У терміналі VS Code виконайте команду:

npm start

Результати запиту будуть виведені до терміналу VS Code.

 

Крок 4: Подальші кроки

  • Вивчіть структуру даних, що повертаються API.
  • Модифікуйте запити для отримання додаткових даних.
  • Спробуйте створити нові запити для інших типів даних.

Тестування GraphQL за допомогою Postman

Установка Postman

Якщо у тебе ще немає Postman, скачай та встанови його з офіційного сайту: https://www.postman.com/downloads/

Підготовка запиту в Postman

Створи новий запит:

  • Відкрий Postman і натисніть на кнопку "New" -> "HTTP Request".
  • У меню методу вибери POST, оскільки GraphQL запити зазвичай надсилаються через POST.

Укажи URL для API:

    • У полі URL введи: http://dev.emeli.in.ua/graphql

Перейди на вкладку GraphQL:

  • Перебуваючи у запиті, виберіть вкладку GraphQL поряд з опцією Body.

Встав запит::

  • У полі запиту просто напиши свій GraphQL-запит:

query GetPosts {
posts {
nodes {
id
title
date
}
}
}

 

 

Цей запит робить таке:

  • Тип запиту: query GetPosts

    • Це GraphQL запит, який запитує дані постів.
  • Структура відповіді:

    • Він запитує у API список постів.
    • У кожному пості (у вузлі nodes) повертаються три поля:
      • id: унікальний ідентифікатор посту
      • title: заголовок посту.
      • date: дата публікації.

Надсилання запиту:

  • Натисніть кнопку Send.
  • Результати запиту будуть показані в розділі Response.

Додаткові кроки

  • Перегляд відповіді: у розділі Response ти побачиш дані, які API повернув у відповідь на запит. Це мають бути пости з полями id, title и date.
  • Обробка помилок: якщо сервер поверне помилку, вона також буде показана в розділі Response. Переконайтеся, що URL-адреса правильна, і GraphQL API доступний.

Тестування та отримання даних

Отримання категорій постів

Цей запит повертає список категорій постів, якщо такі є.

query GetCategories { categories { nodes { id name slug } } }
 

Пояснення: Цей запит поверне категорії з їх ID, ім'ям та slug (Унікальний рядок для URL).

Отримання всіх коментарів до постів

query GetComments { comments { nodes { id content author { node { name } }

Отримання останніх опублікованих постів

query GetRecentPosts {

posts(first: 5, where: {orderby: {field: DATE, order: DESC}}) {
nodes {
id
title
date
}
}
}
Пояснення: Цей запит повертає останні 5 постів, відсортованих за датою публікації в порядку зменшення.

Самостійна робота

Завдання 1: Отримання постів за автором

Мета: Написати запит для отримання постів певного автора.

Інструкції:

  1. Використовуючи Postman, створіть новий запит до API.
  2. Встановіть метод на POST і введіть URL: http://dev.emeli.in.ua/graphql.
  3. На вкладці GraphQL напишіть запит, який поверне всі пости, написані автором з ID 1.
  4. Натисніть кнопку Send та перевірте, що запит виконано успішно.

Завдання 2: Виключення постів певного автора

Мета: Написати запит, який виключає пости, написані конкретним автором.

Інструкції:

  1. Створіть новий запит у Postman.
  2. Встановіть метод на POST і введіть URL: http://dev.emeli.in.ua/graphql.
  3. На вкладці GraphQL напишіть запит, який поверне всі пости, виключаючи пости автора з ID 2.
  4. Натисніть кнопку Send та перевірте, що в результатах немає постів від зазначеного автора.

Завдання 3: Фільтрація за датою публікації

Мета: Написати запит для отримання постів, опублікованих після певної дати.

Інструкції:

  1. Створіть новий запит у Postman.
  2. Встановіть метод на POST і введіть URL: http://dev.emeli.in.ua/graphql.
  3. На вкладці GraphQL напишіть запит, який повертає пости, опубліковані після 1 січня 2023 року.
  4. Натисніть кнопку Send та перевірте, що всі повернуті пости були опубліковані після вказаної дати.

Завдання 4: Обмеження результатів і пагінація

Мета: Написати запит з обмеженням кількості повернених постів.

Інструкції:

  1. Створіть новий запит у Postman.
  2. Встановіть метод на POST і введіть URL: http://dev.emeli.in.ua/graphql.
  3. На вкладці GraphQL напишіть запит, який повертає не більше 5 постів на другій сторінці результатів.
  4. Натисніть кнопку Send та перевірте, що повертається не більше 5 постів.

Завдання 5: Пошук за заголовками постів

Мета: Написати запит для пошуку постів за заголовками.

Інструкції:

  1. Створіть новий запит у Postman.
  2. Встановіть метод на POST і введіть URL: http://dev.emeli.in.ua/graphql.
  3. На вкладці GraphQL напишіть запит, який повертає пости, що містять певний текст у заголовку. Замість тексту введіть свій вибір.
  4. Натисніть кнопку Send та перевірте, що повертаються пости, які містять вказаний текст у заголовку.

Хочете дізнатися більше про GraphQL?

Пройдіть наш місячний практикум!

В рамках практикуму ви отримаєте:

  • Повне розуміння GraphQL та його можливостей.
  • Практичні навички написання запитів, мутацій та роботи зі змінними.
  • Досвід роботи з реальними API та інтеграції GraphQL у проекти.
  • Сертифікат

Формат занять:     
       ОнлайнВсі заняття проходять наживо через Skype

Рекомендовані курси

Basic

REST API TESTING

Переваги

  • Основи REST API Що таке REST (Representational State Transfer)? Ресурси, методи HTTP та статус-коди.
  • Інструменти для тестування REST API Популярні інструменти, такі як Postman, Swagger
  • Автоматизація тестування Розгляд автоматизації тестів REST API за допомогою сніпетів в Postman
  • Навчання на реальних проєктах Виконання практичних завдань і створення автоматизованих тестів для реальних REST API.
  • Індивідуальний підхід
  • Сертифікат та визнання
Термін навчання -> 1 місяць
Вечірнє навчання -> 2 рази на тиждень
Формат навчання -> наживо в Skype
Детальніше
Basic

Тестування баз даних

Переваги

  • Основи баз даних Розуміння термінів, таких як таблиця, рядок, стовпець, ключ, індекс, SQL і багато інших.
  • Мова запитів SQL Основи мови SQL для виконання запитів, вставки, оновлення і видалення даних.
  • Типи баз даних Реляційні, NoSQL та інші типи баз даних і їх особливості.
  • Навчання на реальних проєктах Виконання практичних завдань та проектів для набуття практичних навичок у тестуванні баз даних.
  • Індивідуальний підхід
  • Сертифікат та визнання
Термін навчання -> 1 місяць
Вечірнє навчання -> 1 раз на тиждень
Формат навчання -> наживо в Skype
Детальніше
SELENIUM WEBDRIVER

JAVA QA BASIC AUTOMATION

Переваги

  • Освоєння мови програмування Java Java - це одна з найпопулярніших мов програмування в індустрії програмного забезпечення. Вивчення Java дозволить вам працювати з великою кількістю інструментів і технологій в області розробки та автоматизованого тестування.
  • Вміння створювати автоматизовані тести Навички автоматизації тестування є надзвичайно важливими для підвищення ефективності та точності тестування програмного забезпечення.
  • Опанування jUnit, TestNG, Cucumber jUnit - це один з найпопулярніших фреймворків для юніт-тестування в Java. TestNG надає більше можливостей для налаштування тестових сценаріїв та групування тестів. Cucumber дозволяє писати тести у вигляді читабельних сценаріїв, які може розуміти навіть людина, не зайнята тестуванням.
  • Навчання на реальних проєктах
  • Індивідуальний підхід
  • Сертифікат та визнання
Термін навчання -> 2 місяці
Вечірнє навчання -> 2 рази на тиждень
Формат навчання -> наживо в Skype
Детальніше

JAVA QA ADVANCED AUTOMATION

Переваги

  • Поглиблені знання Java Курс надає можливість розширити і поглибити ваші знання в мові програмування Java, що є фундаментом для багатьох автоматизованих тестів і розробки програмного забезпечення.
  • Розширення автоматизаційних навичок Ви вивчите продвинуті техніки автоматизованого тестування, які допоможуть вам створювати більш складні тестові сценарії і забезпечити високу якість тестів.
  • Поглиблення в архітектурі ПЗ Курс може надати знання з архітектурних патернів та структур програмного забезпечення, що може бути корисним для створення більш розширюваних і підтримуваних автоматизованих тестових наборів.
  • Індивідуальний підхід
  • Підвищення кар'єрних можливостей Знання продвинутих технік автоматизації тестування може підвищити вашу конкурентоспроможність на ринку праці і призвести до покращення вашої заробітної плати.
  • Сертифікат та визнання
Термін навчання: від 1 місяця
Вечірнє навчання -> 2 рази на тиждень
Формат навчання -> наживо в Skype
Детальніше
CYPRESS (NODE.JS)

JAVASCRIPT QA BASIC AUTOMATION

Переваги

  • Використання JavaScript і Cypress JavaScript - одна з найпопулярніших мов програмування веб-розробників, а Cypress - потужний фреймворк для автоматизованого тестування веб-додатків.
  • Зосередженість на веб-автоматизації Курс спеціалізується на автоматизації тестування веб-додатків, що є важливою навичкою для якості QA інженера.
  • Практичні завдання і проєкти Важливою перевагою може бути можливість практичного застосування знань через виконання завдань та розробку автоматизованих тестових сценаріїв для реальних веб-додатків.
  • Індивідуальний підхід
  • Робота з GIT
  • Сертифікат та визнання
Термін навчання -> 2 місяці
Вечірнє навчання -> 2 рази на тиждень
Формат навчання -> наживо в Skype
Детальніше

Підтримка та питання

Якщо вам потрібна будь-яка підтримка або у вас виникли додаткові питання, не соромтеся зв'язатися з нами, ми готові швидко надати вам допомогу.

Через чат-бот