API testing: 9

9 заняття:

 

  1. JSON Schema
  2. Mock servers

JSON Schema - потужний інструмент для перевірки структури даних у форматі JSON.

 

 

  1. JSON - це формат даних, який складається з пар ключ-значення. Дані організовані у вигляді об'єктів (обгорток з ключами та відповідними значеннями) та масивів (впорядкований список значень).

  2. Перед створенням JSON Schema важливо з'ясувати, яка структура даних повинна бути: ключі, їхні типи та можливі вкладені об'єкти або масиви.

  3. JSON Schema описує очікувану структуру даних у форматі JSON. Вибираючи ключі та типи даних, ви описуєте, як повинна виглядати структура об'єкта чи масиву.

  4. Використовуйте ключі, щоб назвати властивості об'єкту та вказати їхні типи даних. Наприклад, "name": "string" вказує, що властивість "name" має бути рядком.

  5. Можна використовувати обмеження для визначення додаткових умов для даних. Наприклад, "age": {"type": "integer", "minimum": 0, "maximum": 120} вказує, що властивість "age" має бути цілим числом від 0 до 120.

  6. Для опису масивів використовуйте ключ "items" та вказуйте JSON Schema для кожного елементу масиву. Наприклад, "items": {"type": "string"} означає, що кожен елемент масиву має бути рядком.

  7. JSON Schema дозволяє використовувати зовнішні посилання для спільного використання та перевикористання схем. Ви можете використовувати посилання на інші схеми для більшої організації та підтримки коду.

  8. Використовуйте різні інструменти та бібліотеки, які підтримують JSON Schema, для валідації даних згідно зі схемою.

{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "name": { "type": "string" },
      "age": { "type": "integer" }
    },
    "required": ["name", "age"]
  }
}

Коли ми говоримо про ключі для валідації схеми в JSON Schema, ми маємо на увазі ключі, які дозволяють визначати правила та обмеження для перевірки структури та даних у форматі JSON. Ось найважливіші ключі:

type:
Вказує тип даних, який очікується. Може бути одним з наступних: "string", "number", "integer", "boolean", "object", "array", або масив типів.

{
  "type": "string"
}

properties:
Визначає властивості об'єкта та їхні схеми валідації. Кожен ключ у цьому об'єкті відповідає властивості об'єкта.

{
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer" }
  },
  "required": ["name"]
}

required:

Вказує обов'язкові властивості об'єкта. Це масив з назвами властивостей, які повинні бути присутніми у вхідних даних.

additionalProperties:

Вказує, чи дозволено включати додаткові властивості у вхідний об'єкт, які не були описані в схемі.

Приклад JSON Schema, який дозволяє тільки дві обов'язкові властивості ("name" та "age") та не дозволяє будь-яких додаткових властивостей:

{
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer" }
  },
  "required": ["name", "age"],
  "additionalProperties": false
}

items:

Визначає схему для елементів масиву, якщо тип даних є "array". Може бути об'єктом або масивом схем для кожного елементу.

{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "name": { "type": "string" },
      "age": { "type": "integer" }
    },
    "required": ["name", "age"]
  }
}

minimum та maximum:
Встановлюють мінімальне та максимальне значення для числових даних.

{
  "type": "string",
  "minLength": 3,
  "maxLength": 10
}

minLength та maxLength::

Встановлюють мінімальну та максимальну довжину рядка.

{
  "type": "number",
  "minimum": 1,
  "maximum": 10
}

enum:
Дозволяє вказати список можливих значень, які може приймати поле.

{
  "type": "string",
  "enum": ["red", "green", "blue"]
}

format:

Вказує формат даних, наприклад, "date", "email", "uri", тощо.

{
  "type": "string",
  "pattern": "^[a-zA-Z0-9]+[._-]?[a-zA-Z0-9]+[@][a-zA-Z0-9]+[.][a-zA-Z]{2,}$"
}

pattern:

Встановлює регулярний вираз для перевірки рядкових даних.

{
  "type": "string",
  "format": "email"
}
{
  "anyOf": [
    { "type": "string" },
    { "type": "number" }
  ]
}

anyOf, allOf, oneOf:

Дозволяють вказувати декілька схем, з яких хоча б одна повинна відповідати.

anyOf, allOf, oneOf:

Дозволяють вказувати декілька схем, з яких хоча б одна повинна відповідати.

const jsonResponseData = pm.response.json();

const schema = {
    "type": "object",
    "properties": {
        "name": {
            "type": "string"
        },
        "age": {
            "type": "number"
        }
    },
    "required": [
        "name",
        "age"
    ]
}
pm.test("Validation schema", () => {
    pm.response.to.have.jsonSchema(schema);
})

Приклад застосування схеми:

Mock servers

Mock-сервери в Postman - це інструмент, який дозволяє створювати тимчасові імітовані сервери для тестування API. Важливо зрозуміти, що це не справжні сервери, а швидко налаштовані, віртуальні середовища, які дозволяють емулювати реальний сервер та його відповіді.

🤖 Незалежність від реального сервера:
Mock-сервери дозволяють тестувальникам працювати над тестами незалежно від того, чи готовий реальний сервер. Це особливо корисно в розробці паралельних функцій або тестів на ранніх етапах розробки, коли фактичний сервер ще не готовий.

 

👽 Емуляція різних умов:
Надає змогу емулювати різні умови та відповіді від сервера для перевірки, як програма реагує на різні сценарії (наприклад, помилки, низька швидкість мережі, відмови тощо).

 

👨‍🎤 Швидка зміна відповідей:
Зміна відповідей на мокових серверах легка та швидка, що полегшує тестування та налагодження.

 

🥷Реалістичне тестування:
Забезпечуючи відповіді, схожі на реальний сервер, тестувальники можуть проводити більш реалістичне тестування та перевірку додатків.

JSON Schema. Mock servers

By iravol

JSON Schema. Mock servers

  • 25