API testing: 9
9 заняття:
- JSON Schema
- Mock servers


JSON Schema - потужний інструмент для перевірки структури даних у форматі JSON.
- 
	JSON - це формат даних, який складається з пар ключ-значення. Дані організовані у вигляді об'єктів (обгорток з ключами та відповідними значеннями) та масивів (впорядкований список значень). 
- 
	Перед створенням JSON Schema важливо з'ясувати, яка структура даних повинна бути: ключі, їхні типи та можливі вкладені об'єкти або масиви. 
- 
	JSON Schema описує очікувану структуру даних у форматі JSON. Вибираючи ключі та типи даних, ви описуєте, як повинна виглядати структура об'єкта чи масиву. 
- 
	Використовуйте ключі, щоб назвати властивості об'єкту та вказати їхні типи даних. Наприклад, "name": "string"вказує, що властивість "name" має бути рядком.
- 
	Можна використовувати обмеження для визначення додаткових умов для даних. Наприклад, "age": {"type": "integer", "minimum": 0, "maximum": 120}вказує, що властивість "age" має бути цілим числом від 0 до 120.
- 
	Для опису масивів використовуйте ключ "items"та вказуйте JSON Schema для кожного елементу масиву. Наприклад,"items": {"type": "string"}означає, що кожен елемент масиву має бути рядком.
- 
	JSON Schema дозволяє використовувати зовнішні посилання для спільного використання та перевикористання схем. Ви можете використовувати посилання на інші схеми для більшої організації та підтримки коду. 
- 
	Використовуйте різні інструменти та бібліотеки, які підтримують 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
- 118