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
- 44