Тестування REST API
Введення в API: Ознайомлення з поняттям API, його роллю у розробці програмного забезпечення та важливістю тестування.
Основи тестування API: Розуміння методів тестування API, створення HTTP-запитів, перевірка відповідей, обробка статусу кодів.
Автоматизація API-тестів: Введення в автоматизацію тестування API з використанням популярних інструментів, таких як Postman та Swagger.
Тестування безпеки API: Вивчення базових принципів тестування безпеки API та перевірка на вразливості.
Вступление до основ тестирования ПО
Введення в API
Ознайомлення з поняттям API, його роллю у розробці програмного забезпечення та важливістю тестування.
– це набір правил та інструкцій, які дозволяють різним програмним компонентам взаємодіяти між собою. API визначає, як програми можуть комунікувати, обмінюватися даними та викликати функції одна з одної.
Інтерфейс комунікації: API визначає набір методів, функцій та даних, які можна використовувати для взаємодії з іншими програмами або компонентами. Ці методи та функції можуть включати запити на дані, створення, збереження та оновлення даних, а також інші операції.
Абстракція комплексності: API надає спрощений спосіб взаємодії з складними системами або бібліотеками. Вміння використовувати API дозволяє програмістам взаємодіяти з функціональністю, не розуміючи всіх внутрішніх деталей.
Стандартизація: API допомагає стандартизувати спосіб взаємодії між програмами. Це дозволяє різним розробникам створювати програми, які можуть спілкуватися між собою, незалежно від того, на якій мові програмування чи платформі вони розроблені.
Розділення відповідальностей: API дозволяє розділити відповідальність між різними компонентами програми чи різними програмами. Наприклад, серверний API може надавати можливість веб-додаткам звертатися до бази даних, не розкриваючи деталей підключення до неї.
Розширення функціональності: За допомогою зовнішніх API можна розширювати функціональність своєї програми, використовуючи функціональність, надану іншими розробниками чи компаніями.
Інтеграція: API дозволяє різним компонентам програми або різним програмам взаємодіяти між собою. Це особливо важливо у розробці розподілених систем, де різні сервіси можуть обмінюватися даними та функціональністю.
Модульність: Використання API допомагає створювати програмне забезпечення відокремленими модулями. Кожен модуль може мати свою функціональність та інтерфейс, і це дозволяє зробити код більш читабельним та підтримуваним.
Реюзабельність: API дозволяє створювати різні програми, які можуть використовувати однаковий набір функцій. Це сприяє реюзабельності коду та швидкому розгортанню нових програм.
Партнерство: Відкриті API дозволяють розробникам створювати додатки, які розширюють функціональність певного програмного продукту. Це важливо для партнерства та розвитку екосистеми навколо продукту.
Функціональне тестування: Тестування API допомагає перевірити, чи працюють методи та функції згідно специфікації. Це важливо для забезпечення правильної роботи програми на рівні API.
Інтеграційне тестування: Тестування взаємодії між різними компонентами програмного забезпечення може виявити проблеми, пов’язані з передачею даних або некоректною взаємодією.
Перформанс-тестування: Тестування API допомагає виявити можливі проблеми з продуктивністю, які можуть виникнути під час великого навантаження на API.
Безпека: Тестування API може допомогти виявити можливі уразливості, такі як недостатні контролі при передачі даних або доступ до конфіденційної інформації через API.
Автоматизоване тестування: Тестування API може бути автоматизовано, що дозволяє швидко та ефективно перевірити функціональність та стабільність API.
або відкрити у новій вкладці Google Презентація
Для отримання додаткового матеріалу потрібно перейти за посиланням
Google Drive
Чому програміст не може знайти свою дівчину?
Тому що він використовує REST API.
Як програмісти вітають один одного?
Вони кажуть: "Привіт, World API".
Як називається API, яке допомагає людям заснути?
Sleepy API.
Як називається API, яке допомагає вам знайти роботу?
LinkedIn API.
Функціональне тестування API: Тут перевіряється, чи повертають методи та функції очікувані результати. Для цього ви передаєте вхідні параметри через HTTP-запит та перевіряєте, чи повертає відповідь очікуваний результат.
Інтеграційне тестування API: У цьому випадку ви перевіряєте взаємодію між різними компонентами чи сервісами. Ви створюєте сценарії, де одна частина викликає методи іншої частини та перевіряєте, чи відбувається взаємодія належним чином.
Тестування безпеки API: Тут перевіряється, чи існують можливі уразливості у методах API, такі як вразливості ін’єкції, недостатні права доступу тощо.
Тестування продуктивності API: Під час такого тестування перевіряється, як добре API працює під великим навантаженням. Ви вимірюєте час відповіді, швидкість обробки запитів тощо.
HTTP-методи: Ви використовуєте методи HTTP, такі як GET, POST, PUT, DELETE, для взаємодії з різними ресурсами.
URI: Ви вказуєте URI (Uniform Resource Identifier) для вказання ресурсу, з яким ви хочете взаємодіяти.
Параметри: Ви передаєте параметри через запити, які можуть включати дані для пошуку, сортування, фільтрації тощо.
Парсинг відповіді: Ви отримуєте відповідь у форматі JSON, XML або іншому форматі, та парсите її, щоб отримати значущі дані.
Перевірка даних: Ви перевіряєте, чи повернуті дані відповідають очікуванням, та перевіряєте правильність значень.
Статус-коди HTTP: При кожному HTTP-запиті сервер повертає статус-код, який вказує на результат операції. Наприклад, 200 означає успішний запит, 404 – ресурс не знайдено, 500 – внутрішня помилка сервера.
Перевірка статус-кодів: Ви перевіряєте статус-код, щоб зрозуміти, чи вдалося виконати запит належним чином.
Обробка помилок: Ви також обробляєте можливі помилки або некоректні статус-коди та реагуєте на них відповідним чином.
Для отримання додаткового матеріалу потрібно перейти за посиланням
Google Drive
Більше практики, тестів та інформації на нашому практикуму https://iqaengineer.com/ua/api_testing/
або відкрити у новій вкладці Google Презентація
Життя QA інженера: Якщо у вас немає статус-коду для власного життя, можливо, ви маєте оновити свій API.
Одруження як HTTP-запит: Я візьму POST-запит з обіцянкою любові та відправлю на адресу "/вінішуючий/шлюб". Очікуйте статус-код 201 Created!
Якщо тестер взаємодіє зі своїм кофе: GET /кава/збадьорити. Відповідь: 418 I'm a teapot.
Життя без тестування API: Як ви будете знати, чи вам сьогодні довезуть піцу? 404 Pizza Not Found!
Тестери та статус-коди: 200 OK знайти помилки і внести зміни. 500 Internal Server Error відкрито допомагати розібратися.
Спеціалізований інтернет для QA: Якщо ви відкриєте нову вкладку, у вас буде GET-запит. Якщо закриєте, DELETE-запит!
Перш за все, тестування безпеки API передбачає огляд потенційних загроз та вразливостей, таких як ін’єкції, перехоплення сесій, витік конфіденційної інформації тощо.
Важливо перевірити, як виконується аутентифікація та авторизація користувачів у системі. Чи використовується безпечний механізм передачі облікових даних? Чи мають користувачі доступ лише до тих ресурсів, до яких вони мають права?
Це одна з найпоширеніших вразливостей. Під час тестування слід перевірити, чи валідуються та екрануються дані, які надходять від користувача, щоб уникнути SQL-, HTML- та інших ін’єкцій.
Переконайтеся, що дані, передані між клієнтом та сервером, шифруються та захищені від перехоплення, таким чином унеможливлюючи зловмисникам здійснити атаку MITM (Man-In-The-Middle).3
Перевірте, чи здійснюється коректне валідування вхідних даних. Це допоможе запобігти введенню некоректних даних, які можуть спричинити вразливості або атаки.
Для отримання додаткового матеріалу потрібно перейти за посиланням
Google Drive
Більше практики, тестів та інформації на нашому практикуму https://iqaengineer.com/ua/api_testing/
або відкрити у новій вкладці Google Презентація
Крадіжка даних через недостатньо захищені API: У 2017 році компанія Equifax стала жертвою атаки через вразливість в їх API. Зловмисники використали “Broken Authentication” для доступу до конфіденційної інформації понад 143 мільйонів клієнтів, включаючи соціальні номери.
Криза безпеки з Facebook API: У 2018 році було виявлено, що компанія Cambridge Analytica використовувала API Facebook для збору даних мільйонів користувачів без їхньої згоди. Цей інцидент підкреслив важливість правильної аутентифікації та авторизації у великих системах.
Злам Tesla API через перебір паролів: У 2020 році дослідникам вдалося отримати доступ до системи Tesla, використовуючи брутфорс атаку на API, через яке автомобіль керується додатком.
Вразливість OAuth в Reddit API: У 2018 році було виявлено, що Reddit API дозволяв зловмисникам використовувати аутентифікаційний токен для доступу до чужого облікового запису без пароля.
Смарт-годинники та виток даних через API: У 2019 році було виявлено, що деякі смарт-годинники мали вразливості в API, через які зловмисники могли отримати доступ до особистих даних користувачів, таких як геолокація та здоров’я.
Підзарядка електромобілів через API: У 2018 році дослідники виявили вразливість в API для підзарядки електромобілів, яка дозволяла атакувачам переключати зарядку на інші автомобілі або вимикати її взагалі.
Міжнародний аеропорт та недостатня авторизація: У 2014 році дослідники змогли використати API міжнародного аеропорту, щоб отримати доступ до пасажирських даних, включаючи номери бортових квитків.
Злам API для діагностики автомобілів: У 2021 році було виявлено вразливість в API, яке використовується для діагностики та програмування автомобілів. Зловмисники могли отримувати доступ до найсекретніших функцій автомобіля.
Атака на Twitter API: У 2020 році зловмисники використали вразливість в API Twitter для злому облікових записів відомих осіб та компаній, щоб поширити шахрайські повідомлення.
Скарги через недостатню безпеку API фінансових служб: Системи API фінансових служб часто використовуються для передачі грошових коштів. Недостатня безпека API може призвести до втрати грошей та порушення довіри користувачів.
включає створення скриптів або тестових сценаріїв, які взаємодіють з програмним інтерфейсом замість людського користувача. Це дозволяє виконувати тести швидше, частіше та більш точно. Автоматизація сприяє виявленню помилок на ранніх стадіях розробки, що робить процес тестування більш ефективним та економічно обгрунтованим.
це один з найпопулярніших інструментів для автоматизації тестування API. Він надає зручний графічний інтерфейс для створення, відправки та аналізу HTTP-запитів до API. За допомогою Postman можна легко створювати та налаштовувати тестові набори, які автоматично перевіряють правильність відповідей сервера.
це бібліотека для тестування REST API на мові Java. Вона надає можливість писати тестові сценарії в коді, що дозволяє інтегрувати автоматизовані тести безпосередньо в ваш проект. RestAssured спрощує створення запитів, перевірку відповідей та обробку статусу кодів.
Для отримання додаткового матеріалу потрібно перейти за посиланням
Postman
RestAssured
Сніпети
Більше практики, тестів та інформації на нашому практикуму https://iqaengineer.com/ua/api_testing/
Практичні завдання
Summary: User can view list of post without using arguments
Precondition:
User is not logged
Steps:
GET /wp-json/wp/v2/posts
Expected result:
Status code 200 OK
Priority:
Medium
Перший тест – “Status code is 200 OK”:
Цей тест перевіряє, чи відповідь сервера має статус 200 (OK).
Важливо переконатися, що сервер повертає коректний HTTP статус.
pm.test(“Status code is 200 OK”, function () {
pm.response.to.have.status(200);
});
Другий тест – “Content-Type header is application/json”:
Цей тест перевіряє, чи заголовок “Content-Type” відповіді вказує на формат JSON з правильною кодуванням (UTF-8).
Важливо переконатися, що сервер правильно повідомляє про формат вмісту.
pm.test(“Content-Type header is application/json”, function () {
pm.response.to.have.header(“Content-Type”, “application/json; charset=UTF-8”);
});
Третій тест – “At least one post is present in the response”:
Цей тест перевіряє, чи відповідь містить принаймні один пост.
Важливо переконатися, що API повертає дані.
pm.test(“At least one post is present in the response”, function () { pm.expect(pm.response.json().length).to.be.above(0);
});
Четвертий тест – “Each post contains required fields”:
Цей тест перевіряє, чи кожний пост містить обов’язкові поля, такі як id, date, slug, title, content, excerpt, author, link.
Важливо переконатися, що API повертає очікувані дані.
pm.test(“Each post contains required fields”, function () {
pm.response.json().forEach(function (post) {
pm.expect(post.id).to.exist;
pm.expect(post.date).to.exist;
pm.expect(post.slug).to.exist;
pm.expect(post.title).to.exist;
pm.expect(post.content).to.exist;
pm.expect(post.excerpt).to.exist;
pm.expect(post.author).to.exist;
pm.expect(post.link).to.exist;
});
});
П’ятий тест – “Check data type of ‘id’ field”:
Цей тест перевіряє, чи поле ‘id’ в кожному пості є числовим типом.
Важливо переконатися, що типи даних відповідають очікуванням.
pm.test(“Check data type of ‘id’ field”, function () {
pm.response.json().forEach(function (post) {
pm.expect(post.id).to.be.a(‘number’);
});
});
Шостий тест – “Check format of ‘date’ field”:
Цей тест перевіряє, чи поле ‘date’ відповідає вказаному формату дати і часу.
Важливо переконатися, що дані відповідають вказаному формату.
pm.test(“Check format of ‘date’ field”, function () {
pm.response.json().forEach(function (post) {
pm.expect(post.date).to.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/);
});
});
Сьомий тест – “Check ‘title’ and ‘content’ fields have text”:
Цей тест перевіряє, чи поля ‘title’ і ‘content’ кожного посту містять текстові дані (рядки) і не є пустими.
Важливо переконатися, що тексти наявні.
pm.test(“Check ‘title’ and ‘content’ fields have text”, function () {
pm.response.json().forEach(function (post) { pm.expect(post.title.rendered).to.be.a(‘string’).and.not.empty; pm.expect(post.content.rendered).to.be.a(‘string’).and.not.empty;
});
});
Восьмий тест – “Check ‘author’ field contains an object”:
Цей тест перевіряє, чи поле ‘author’ в кожному посту є об’єктом.
Важливо переконатися, що дані мають очікуваний формат.
pm.test(“Check ‘author’ field contains an object”, function () {
pm.response.json().forEach(function (post) { pm.expect(post.author).to.be.a(‘object’);
});
});
Дев’ятий тест – “Check ‘link’ field contains a URL”:
Цей тест перевіряє, чи поле ‘link’ в кожному посту є рядком, який відповідає формату URL.
Важливо переконатися, що дані відповідають формату посилання.
pm.test(“Check ‘link’ field contains a URL”, function () {
pm.response.json().forEach(function (post) { pm.expect(post.link).to.be.a(‘string’).and.to.match(/^https?:\/\/\S+/);
});
});
1. Написати тест-кейси як позитивні так і негативні, які б покривали вимоги.
2. Створити колекцію в Postman та покрити сніпитами.
Можливості для зв'язку з нами
🎓 Что вас ждет:
🔍 Глубокий обзор REST-архитектуры
🛠️ Практические упражнения и реальные кейсы
💻 Обучение от опытных экспертов в области разработки API
🚀 Развитие навыков создания мощных и эффективных API
Мы также присутствуем в социальных сетях! Подписывайтесь на нас и получайте последние новости, акции, скидки, бесплатные тренинги и участие в марафонах.
Будем рады видеть вас в нашем сообществе!
Публичная оферта. Авторское право © 2024 Школа подготовки тестировщиков