Мир сегодня с "Юрий Подоляка"
Мир сегодня с "Юрий Подоляка"
Труха⚡️Україна
Труха⚡️Україна
Николаевский Ванёк
Николаевский Ванёк
Мир сегодня с "Юрий Подоляка"
Мир сегодня с "Юрий Подоляка"
Труха⚡️Україна
Труха⚡️Україна
Николаевский Ванёк
Николаевский Ванёк
QA Простір avatar
QA Простір
QA Простір avatar
QA Простір
😑 HTTP OPTIONS: шо це і навіщо тестувати QA?


Коли ми тестуємо API, зазвичай працюємо з методами GET, POST, PUT, DELETE. Але є ще один метод, про який часто забувають — OPTIONS.

Давайте розберемось, що це та чому його варто перевіряти.

👇👇


1️⃣ Що таке HTTP OPTIONS?

Це спеціальний HTTP-метод, який клієнт (наприклад, браузер або Postman) використовує, щоб запитати в сервера:
“Які дії мені дозволено робити з цим ресурсом?”

Сервер у відповідь повертає список дозволених HTTP-методів, заголовків і політик доступу.


⬇️⬇️


2️⃣ Трохи історії

Метод був офіційно введений у HTTP/1.1 (RFC 2616), і від самого початку задумувався як спосіб перевірити дозволи перед тим, як надсилати реальний запит.

😑Особливо актуально для крос-доменних запитів (CORS).


⬇️⬇️


3️⃣ Де використовується OPTIONS на практиці?


1) Коли браузер виконує preflight-запит (CORS)
Якщо фронтенд працює з API на іншому домені — браузер перед POST, PUT або нестандартним GET надсилає OPTIONS, щоб перевірити, чи можна взагалі робити такий запит.


✏️Приклад:

➡️фронт з https://myapp.com, бек з https://api.partner.com
➡️браузер автоматично шле OPTIONS, щоб дізнатися:
*️⃣чи можна надсилати POST
*️⃣які заголовки допустимі
*️⃣чи дозволений цей Origin
➡️Це називається preflight-запит.


2) Щоб перевірити, які методи дозволені на endpoint
Ти можеш вручну зробити OPTIONS-запит до будь-якого API endpoint і подивитися, чи підтримує він DELETE, PATCH, HEAD тощо.

Це буває корисно:
*️⃣коли немає документації;
*️⃣щоб протестувати налаштування сервера;
*️⃣або щоб знайти помилки конфігурації (наприклад, метод заборонено, хоча має бути доступним).



3) Коли хочеш перевірити endpoint без побічних ефектів

Якщо ти не хочеш змінювати дані на сервері (як це було б із POST чи PUT), але хочеш переконатися, що ресурс існує і працює — OPTIONS ідеальний варіант. Він не створює і не змінює нічого.


⬇️⬇️


4️⃣ Приклад preflight CORS-запиту

OPTIONS /api/data HTTP/1.1 Host: api.example.com Origin: https://frontend.example.com Access-Control-Request-Method: POST Access-Control-Request-Headers: Content-Type

✏️Відповідь:

HTTP/1.1 204 No Content Access-Control-Allow-Origin: https://frontend.example.com Access-Control-Allow-Methods: GET, POST, OPTIONS Access-Control-Allow-Headers: Content-Type



5️⃣ Як перевірити OPTIONS під час тестування?

✔️У браузері: DevTools → Network → Фільтр по OPTIONS.
✔️У Postman: створи новий запит, обери метод OPTIONS.
✔️У терміналі:
curl -X OPTIONS https://api.example.com/resource -i

⬇️⬇️


6️⃣ Типові баги, які можна знайти
Сервер не відповідає на OPTIONS (хоча повинен).
Немає або неправильні заголовки Access-Control-Allow-*.
Неправильно вказані дозволені методи.


⬇️⬇️


7️⃣ Чи може OPTIONS розкрити чутливу інформацію?

😑Так, якщо сервер налаштовано неправильно:

😑Allow: GET, POST, PUT, DELETE може розкрити небезпечні методи, які не мали б бути доступними.

😑Заголовки типу Access-Control-Allow-Origin: * разом із Authorization — ризик CORS-уразливості.

😑Відповіді 405 або 500 на OPTIONS-запити до закритих endpoint-ів — натяк на їхнє існування.

😑Access-Control-Allow-Headers: X-Admin-Token — може викрити службові або внутрішні заголовки.


👁‍🗨
Тому варто перевіряти OPTIONS не лише з функціонального, а й з безпекового боку.



❗️
Postman tools для API-тестування


👇👇


▶️ Environment Variables
Щоб працювати з різними середовищами (dev/stage/prod), варто використовувати власні базові URL, токени, параметри у вигляді змінних.

✍️ Наприклад: {{base_url}}/users замість повної адреси вручну.



▶️ Pre-request Scripts / Tests
Postman підтримує JavaScript для автоматизації: можна обчислити токен, згенерувати дату, виконати перевірку.

✍️ У вкладці Tests:
pm.test("Status code is 200", function () {




▶️ Collections
Запити можна об’єднувати у колекції — за функціональністю або мікросервісом.

✍️ Це зручно для пакетного запуску або спільного використання в команді.



▶️ Collection Runner
Допомагає запускати всі запити з колекції по черзі, з різними наборами даних (CSV/JSON).

✍️ Добре підходить для smoke або regression API-тестів.



▶️ Monitors
Забезпечують запуск запитів за розкладом — щогодини, щодня. Дають змогу виявити збої API після релізу.

✍️ Корисні для моніторингу у продакшн-середовищі.



▶️ Mock Servers
Дозволяють симулювати відповіді API, навіть якщо бекенд ще не реалізований.

✍️ Це значно полегшує роботу front-end розробникам.



▶️ Visualize Tab
Відповіді можуть відображатися у вигляді таблиць, графіків — за допомогою шаблонів (HTML + Handlebars).




▶️ Integration: Jenkins, GitHub, Newman
Інтеграція з CI/CD: запуск тестів через Newman у пайплайнах.

✍️ Це дає змогу включити API-тести до загального процесу розробки.



▶️ Автоматичні перевірки (Assertions)
Перевірки статус-кодів, значень у полях, структури JSON тощо.

✍️ pm.response.to.have.jsonBody('user.id');

😑




😮‍💨 Що ще варто знати тестувальнику:

😑 Як працюють типи авторизації (Bearer, Basic Auth, API Key)
😑 Як писати умовні конструкції у тестах (if-else на різні відповіді)
😑 Як використовувати глобальні, локальні та середовищні змінні
😑 Як зберігати динамічні значення між запитами (pm.environment.set)
😑 Як організовувати колекції для зручного користування і командної роботи



😑
ТЕСТУВАННЯ ГІПОТЕЗ : як QA може покращити продукт, а не лише знайти баги

Сьогодні роль тестувальника значно ширша: він може впливати на розвиток продукту, пропонувати зміни й експерименти, перевіряти припущення та сприяти бізнес-результатам.

Це і є тестування гіпотез — навичка, яка підносить QA на рівень продуктової команди.

Давайте розберемося, як саме це працює

👇👇



// ЩО ТАКЕ ГІПОТЕЗА В ЦИФРОВМУ ПРОДУКТІ? //


Продуктова гіпотеза — це припущення, що певна зміна (в UI, логіці, поведінці) призведе до покращення якогось результату:
конверсії, ретеншену, часу на сайті, кліків, доходу.


✏️ Формат гіпотези:
«Якщо ми зробимо ___, тоді ___ зросте / зменшиться».


😑 Приклади:

*️⃣Якщо змінити колір кнопки «Купити», CTR зросте.
*️⃣Якщо додати індикатор прогресу в анкеті, більше користувачів її завершать.
*️⃣Якщо замінити модальне вікно на інлайн-повідомлення, конверсія не впаде.


✍️


// ЯК ТЕСТУВАЛЬНИК МОЖЕ ВПЛИВАТИ НА ГІПОТЕЗИ? //



1️⃣ Спостерігає і формує гіпотези на основі фідбеку

QA працює на стику користувача, UI та бекенду. Він бачить слабкі місця.


📌 Приклад:
😑
Тестувальник помічає: форма реєстрації довга, і часто користувачі не доходять до останнього кроку.
😑Гіпотеза: якщо розбити форму на 2 екрани — більше користувачів завершать реєстрацію.



2️⃣ Бере участь у підготовці до A/B тестування

😑 QA перевіряє:

😑Чи коректно працюють варіанти А і B?
😑Чи зібрані події для аналітики?
😑Чи все видно в DevTools / Network / аналітичних подіях?


😑 Інструменти: Mixpanel, Amplitude, PostHog, Firebase Events



3️⃣ Валідує результати: дивиться не тільки на цифри, а й на баги

Іноді варіант B дає кращу метрику, але… зламаний на мобілці.
QA — той, хто допомагає виявити подібні нюанси.


😑

// ЯКІ ГІПОТЕЗИ МОЖЕ ЗАПРОПОНУВАТИ QA? //

Ось кілька категорій:

😮‍💨 UX-покращення:
*️⃣Кнопка «Підтвердити» виглядає неактивною → користувачі не тиснуть.
*️⃣ Після натискання немає анімації → здається, що нічого не відбулось.
*️⃣ Форма надто довга → додати індикатор прогресу.


😮‍💨 Технічні/перформанс гіпотези:
*️⃣ Фільтр вантажиться занадто повільно → винести частину логіки на клієнт.
*️⃣ Стартова сторінка важка → lazy-loading зображень покращить перформанс.


😮‍💨 Безпека та збереження даних:
*️⃣ Якщо запит надсилається ще до підтвердження → користувач може випадково втратити дані.



🧩🧩


// ЯК ВІДРІЗНИТИ БАГ ВІД ГІПОТЕЗИ? //

😮‍💨 Баг: явно неправильна поведінка (UI ламається, дані не зберігаються, сторінка не відкривається).

😮‍💨 Гіпотеза: все працює, але можна зробити краще. UX — не помилка, а шанс на покращення.


📌 Приклад:
*️⃣Кнопка на сайті помітна, клікабельна. Але: CTR низький. Користувачі її пропускають

*️⃣Тут немає бага. Але гіпотеза:
«Якщо змінити розмір і додати анімацію — більше людей натисне».


👇👇



// ІНСТРУМЕНТИ ДЛЯ ГІПОТЕЗ У QA-РОБОТІ //


🔸 Google Analytics / Mixpanel / PostHog – поведінка користувачів
🔸 Chrome DevTools – перевірка логіки на фронті
🔸 Charles / Proxyman – відстеження запитів
🔸 SQL / BigQuery – аналітика поведінки
🔸 A/B-тест платформи – Optimizely, LaunchDarkly, Firebase Remote Config


😑


Гіпотези допомагають:
✅ покращити UX
✅ виявити слабкі місця
✅ впливати на метрики
✅ зробити продукт зручнішим для людей
18.03.202513:41
// ЯК ТИП ЗАСТОСУНКУ ВПЛИВАЄ НА ТЕСТУВАННЯ? //


📌 Нативні:
✅ Фокус на продуктивності та доступі до системних ресурсів.
✅ Важливо перевіряти поведінку при обмеженнях ОС (фоновий режим, дозволи).

📌 Кросплатформні (React Native, Flutter):
✅ Додаткові тести на відповідність UI на різних платформах.
✅ Перевірка інтеграції з нативними модулями (наприклад, камера, push).

📌 Гібридні:
✅ Тестування роботи WebView та його інтеграції з нативними модулями.
✅ Перевірка швидкості та продуктивності (особливо на старих пристроях).
✅ Тестування доступу до файлової системи, камери, push-сповіщень.

📌 PWA:
✅ Перевірка поведінки в офлайн-режимі.
✅ Тести роботи в різних браузерах і на різних платформах.


👁‍🗨 Нативні додатки – найшвидші, але дорогі у розробці.
👁‍🗨 Кросплатформні рішення економлять час, але мають компроміси.
👁‍🗨 Гібридні застосунки та PWA – це баланс між зручністю та обмеженнями.




👉 У наступній статті розглянемо UI Patterns для різних типів мобільних застосунків!

✍️
🔐 ТЕСТУВАННЯ JWT: ЩО ПОТРІБНО ЗНАТИ?

JSON Web Token (JWT) – це відкритий стандарт для безпечного обміну інформацією між клієнтом і сервером. Його використовують для аутентифікації та авторизації, дозволяючи працювати без збереження сесій на сервері.

📌 Концепція JWT була створена у 2010-х у рамках стандартів JOSE (JSON Object Signing and Encryption) та офіційно описана у RFC 7519.



// ЯК ВИГЛЯДАЄ JWT? //

👇👇


JWT складається з трьох частин:

1️⃣ Header – інформація про токен і алгоритм підпису.
2️⃣ Payload – корисне навантаження (claims), що містить ID користувача, ролі тощо.
3️⃣ Signature – криптографічний підпис, що гарантує справжність токена.


📌 Приклад JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0Iiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNjkxMDE0NDAwfQ.V4yMjDkJwBQzjZm30sMSq2qQ2_8xX1E0Xv6PqQ5_UXU


👁Його можна розшифрувати через jwt.io.


👇👇


📌 Header (заголовок):

{



📌 Payload (корисне навантаження):

{



📌 Signature (підпис) – використовується для перевірки справжності токена.



🔣🔣 УВАГА! 🔣🔣


😑Дані в Payload не зашифровані, а лише закодовані! Це означає, що будь-хто може їх переглянути.
❗️
НЕ ПЕРЕДАВАЙТЕ КОНФІДЕНЦІЙНУ ІНФОРМАЦІЮ (паролі, токени доступу) у JWT!


⬇️⬇️



// ЯК ПРАЦЮЄ JWT У ЗАПИТАХ? //

👇👇

JWT передається у Authorization заголовку як Bearer Token.


📌 Що означає Bearer Token?
Bearer означає, що будь-яка особа або система, яка має токен, може його використовувати для доступу до ресурсу.


📌 Приклад у Postman:

1️⃣Відправляємо запит на аутентифікацію (логін):

POST /login



2️⃣ Сервер повертає JWT:

{



3️⃣ Використовуємо токен у наступних запитах:

GET /profile



4️⃣ Якщо токен валідний, сервер поверне дані користувача:

{



❌ Якщо токен недійсний, сервер відповість 401 Unauthorized.



😑



// ЧОМУ JWT СТАТИЧНИЙ І ЯК ЙОГО ПЕРЕВІРЯТИ? //


❗️JWT не зберігається на сервері після видачі.


Це означає:

✔️ Сервер не тримає інформацію про активні сесії.
✔️ Кожен запит несе свій токен, що економить ресурси.
✔️ Видалити JWT можна лише на клієнтському боці (сервер не має механізму "logout").


🔍Що перевіряти тестувальнику?

✅ Чи правильно сервер валідує токен?
✅ Чи передаються дані безпечно (не передавати чутливу інформацію в Payload)?
✅ Чи коректно реалізоване оновлення токена (refresh token)?



📝


// КОРИСНІ ІНСТРУМЕНТИ //

🔍 jwt.io – розбір і валідація JWT.
🔍 Postman – для тестування API з JWT.
🔍 Fiddler / Proxyman – для аналізу трафіку та заголовків HTTP.



// ДОДАТКОВІ РЕСУРСИ //

🔹 Документація JWT
🔹 JWT-туторіал у Postman
🔹 RFC 7519 (JWT)


💢 JWT зручний для API-автентифікації, але його безпеку треба перевіряти.


🔥
🔤🔤🔤🔤-заголовки: вичерпний ґайд з прикладами (частина 2)

Продовжуємо розбиратися із HTTP-заголовками!
Сьогодні — докладніше про Response Headers: від cookies до захисту від clickjacking.

👇👇

2️⃣ HTTP Response Headers (від сервера до клієнта)


2.1 Content-Type

⭕️
Історія: Клієнтам потрібно було розуміти, який тип даних вони отримують.

⭕️ Проблема: Без вказівки типу клієнти не могли правильно обробити відповідь.

✔️ Рішення: Заголовок Content-Type повідомляє клієнту тип отриманого контенту.


👁‍🗨Приклад використання:

Відповідь:
Content-Type: application/json — для API
Content-Type: text/html — для веб-сторінок


✏️Пояснення: Забезпечує правильне розпізнавання контенту на стороні клієнта.


⬇️⬇️

2.2 Set-Cookie

⭕️
Історія: Сервери потребували механізму для відстеження користувачів між запитами.

⭕️ Проблема: Безстанова природа HTTP ускладнювала управління сесіями.

✔️Рішення: Заголовок Set-Cookie дозволяє зберігати дані у браузері.


👁‍🗨Приклад використання:

Відповідь:
Set-Cookie: sessionId=abc123; Path=/; HttpOnly


✏️Пояснення: Зберігає дані на стороні клієнта для подальших запитів (сесії, налаштування, трекінг).


⬇️⬇️

2.3 Access-Control-Allow-Origin

⭕️
Історія: Фронтенд-додатки на JavaScript потребували доступу до зовнішніх API.

⭕️ Проблема: Політика одного джерела (Same-Origin Policy) блокувала міжсайтові запити.

✔️Рішення: Заголовок Access-Control-Allow-Origin повідомляє браузеру, яким джерелам дозволено доступ.


👁‍🗨Приклад використання:

Відповідь:
Access-Control-Allow-Origin: https://frontend.example.com


✏️Пояснення: Ключовий заголовок у CORS (Cross-Origin Resource Sharing).


➡️ Про CORS: Це механізм, що дозволяє безпечний доступ до ресурсів з інших доменів за допомогою заголовків на кшталт Origin та Access-Control-Allow-Origin.


⬇️⬇️

2.4 ETag

⭕️Історія: Потрібен був точніший механізм кешування змінених ресурсів.

⭕️ Проблема: Часові мітки були занадто грубими для визначення змін.

✔️Рішення: Заголовок ETag присвоює унікальний ідентифікатор версії ресурсу.



👁‍🗨Приклад використання:

Відповідь:
ETag: "abc123xyz"


Подальший запит:
If-None-Match: "abc123xyz"


✏️Пояснення: Дозволяє клієнтам робити умовні запити і отримувати тільки змінені дані.


⬇️⬇️

2.5 X-Frame-Options

⭕️Історія: Атаки типу clickjacking використовували приховані фрейми.

⭕️ Проблема: Зловмисники могли вбудовувати ваш сайт у свої сторінки та вводити користувачів в оману.

✔️Рішення: Заголовок X-Frame-Options забороняє або обмежує вбудовування сайту у iframe.



👁‍🗨Приклад використання:

Відповідь:
X-Frame-Options: DENY

або
X-Frame-Options: SAMEORIGIN


✏️Пояснення: Підвищує безпеку інтерфейсу користувача.

➡️ Про XSS: Cross-Site Scripting (XSS) дозволяє зловмисникам впроваджувати JavaScript у сторінки. Заголовки на кшталт X-Content-Type-Options, Content-Security-Policy та X-XSS-Protection допомагають захиститися від XSS-атак.


👇👇


3️⃣ Найкращі практики для HTTP-заголовків

🆘 Безпека
*️⃣Використовуйте Strict-Transport-Security, X-Content-Type-Options, X-Frame-Options.
*️⃣Завжди налаштовуйте Content-Security-Policy для захисту від XSS.
*️⃣Уникайте витоку зайвої інформації через заголовки на кшталт X-Powered-By, Server.



💖 Безпека API та CORS

💖Завжди перевіряйте Origin проти білого списку.
💖Не використовуйте * у Access-Control-Allow-Origin, якщо встановлено Access-Control-Allow-Credentials: true.
💖Правильно обробляйте preflight-запити (OPTIONS) і відповідайте відповідними CORS-заголовками.



🚀 Продуктивність та кешування

💖Поєднуйте Cache-Control, ETag, Expires для ефективного кешування.
💖Використовуйте заголовок Vary, щоб керувати варіаціями кешу (наприклад, за мовою або кодуванням).
💖Стискайте відповіді за допомогою Content-Encoding: gzip.



📉 Дебаг та аналітика

✔️Використовуйте User-Agent, Referer, власні заголовки типу X-Request-ID для трасування запитів.
✔️Додавайте Date, Server-Timing для збору аналітики та вимірювання продуктивності.


📝

Правильне налаштування HTTP-заголовків допомагає підвищити безпеку, оптимізувати продуктивність і зробити додатки більш надійними та зручними для користувачів!


🔥
ЗАПИТ ЧЕРЕЗ API GATEWAY — ЯК ПРОХОДИТЬ ТА ЯК ТЕСТУВАТИ?

Ми вже розібралися, що таке API Gateway, то саме час зазирнути усередину: як виглядає request flow і на чому QA має зосередитись.

👇👇


1️⃣ ВХІДНИЙ ЗАПИТ ВІД КЛІЄНТА

Користувач або система надсилає HTTP-запит (наприклад, GET/products) на домен, пов’язаний з gateway (наприклад, api.mysite.com).

▶️ Тут часто спрацьовує HTTPS-термінація — це момент, коли зашифрований запит (HTTPS) розшифровується (термінується) на стороні gateway або load balancer, і далі в системі йде як звичайний HTTP.



2️⃣ ПЕРЕВІРКА АВТЕНТИФІКАЦІЇ/АВТОРИЗАЦІЇ

Gateway аналізує заголовки, перевіряє токен (наприклад, JWT), роль користувача, можливі обмеження по IP або client_id. Якщо щось не так — повертається 401 або 403.



3️⃣ RATE LIMITING

Перед передачею запиту далі спрацьовує логіка обмежень — наприклад, не більше 10 запитів за хвилину. Якщо перевищено — миттєва відповідь 429 Too Many Requests.



4️⃣ТРАНСФОРМАЦІЯ ТА МАРШРУТИЗАЦІЯ

Gateway може змінити тіло запиту, заголовки або маршрут (/products перетворити на /api/v1/items) і передати далі в мікросервіс.



5️⃣ОТРИМАННЯ ВІДПОВІДІ І ЗВОРОТНА ТРАНСФОРМАЦІЯ

Відповідь із внутрішнього сервісу проходить зворотний шлях: фільтрація/трансформація, додавання заголовків (наприклад, CORS), кешування, логування — і лише потім відправка клієнту.

▶️CORS (Cross-Origin Resource Sharing) — це механізм, який дозволяє браузеру вирішити, чи може front з одного домену отримувати відповіді від backend на іншому.

Якщо CORS налаштовано неправильно, frontend не отримає відповідь навіть при правильному запиті.


😑



ЩО ПЕРЕВІРЯТИ QA (з прикладами):

👇

😮‍💨 Rate Limiting
😑 Надішли більше запитів, ніж дозволено (наприклад, 11 при ліміті 10/хв)
😑 Перевір 429 статус та повідомлення
😑 Зачекай хвилину — чи обнуляється ліміт?
😑 Різні ролі — різні обмеження?



➡️ ПРИКЛАДИ:

😑Надіслати 11 GET /products запитів протягом хвилини
😑Перевірити, що роль "admin" має інший ліміт, ніж "user"
😑Створити тест, який чекає 60 сек і перевіряє скидання лічильника

😠



😮‍💨 Аутентифікація/Авторизація
😑 Без токена, з битим або простроченим токеном
😑 401 чи 403 — чи відповідає статус очікуванню?
😑 Перевір дозволи для кожної ролі



➡️ ПРИКЛАДИ:

😑Запит GET /orders без токена — очікуємо 401
😑Запит із токеном звичайного користувача на /admin — очікуємо 403
😑Тест на роль “manager” — доступ лише до /reports, але не до /users

😠



😮‍💨 Маршрутизація
😑 Валідні та невалідні URl
😑 Заборонені шляхи для звичайного користувача



➡️ ПРИКЛАДИ:

😑Запит до GET /api/v1/products → має потрапити до відповідного сервісу
😑Запит до GET /api/v1/nonexistent404 Not Found
😑Звичайний юзер запитує /admin/settings 403

😑



😮‍💨 Заголовки (включно з CORS)
😑 Чи зберігається Authorization при редиректах
😑 Чи правильні CORS-заголовки для фронтенду



➡️ ПРИКЛАДИ:

😑Перевірити, що запит з домену app.example.com має правильні CORS-заголовки
😑Тест, де Authorization заголовок не зникає після 302 редиректа
😑Запит з Origin: evil.com → перевірити, що CORS блокує

😑



😮‍💨 Edge-кейси
😑 Великі тіла запитів
😑 Довгі URI
😑 Повторний запит з тим самим токеном



➡️ ПРИКЛАДИ:

😑POST із тілом 1 МБ JSON → чи обробляється без помилки?
😑GET-запит з 250 символами в URI — чи не обрізається?
😑Повторний POST /checkout з однаковим токеном — чи не створює дубль?

😑
ЛОГИ У ТЕСТУВАННІ: ЩО ПЕРЕВІРЯТИ І ЯК НЕ ВТРАТИТИ СУТЬ?


“Подивись у логи”
— фраза, яку тестувальник чує не рідше, ніж “Почисть кеш”.

Але що саме дивитись?
І як логи можуть допомогти у пошуку бага?

Розберемося разом.

👇👇



// ЩО ТАКЕ ЛОГ? //


📝 ЛОГ — це журнал подій, у якому фіксуються дії користувача, запити до сервера, відповіді, помилки та технічні деталі, які “не видно з UI”.


📎Залежно від платформи, є:

✏️
Frontend-логи (консоль браузера, помилки у UI).
✏️Backend-логи (на сервері — що саме пішло не так).
✏️Мобільні логи (Logcat — Android, Console — iOS).
✏️Логи з інструментів (Postman, DevTools, Sentry, Firebase Crashlytics).

✍️


// ЩО САМЕ ШУКАТИ У ЛОГАХ? //



Помилки (Errors)
500 Internal Server Error, Timeout, NullPointerException, TypeError, 404 – усе це треба помічати.


Запити та відповіді API
😑Подивитись, що саме пішло в запиті (Request) і що повернулося у відповіді (Response).
😑Іноді проблема не в UI, а в бекенді.


Таймінги
😑Чи немає затримок у запитах?
😑Занадто довга відповідь = проблеми з продуктивністю.

Фільтрування по ключових словах
😑Використовувати пошук по ERROR, WARN, EXCEPTION, FAILURE.


User ID / Session ID / Device ID
😑Ці параметри допоможуть знайти потрібну сесію серед сотень логів.


😑


// ЯКІ ІНСТРУМЕНТИ ДОПОМОЖУТЬ? //


😑
Browser DevTools – для перегляду мережевих запитів у вебі.
😑Postman + Console – показує запит/відповідь і час.
😑ADB Logcat – стандартний логер Android.
😑Charles / Proxyman – перехоплення трафіку.
😑Firebase Crashlytics, Sentry – для логування крашів у продакшені.


😑


// ЩО ПЕРЕВІРЯТИ QA ПЕРЕД БАГ- РЕПОРТОМ? //


☑️ Чи справді був запит і яка була відповідь?
☑️ Чи є error/exception у логах?
☑️ Чи повторюється проблема на іншому пристрої або обліковці?
☑️ Чи є залежність від дій користувача?
☑️ Чи є stacktrace, який допоможе розробнику?



😑 Логи — це не тільки для девелоперів.

Тестувальник, який вміє читати логи, завжди буде на крок попереду.

Це допомагає точніше описати баг, зрозуміти, на якому рівні виникла проблема, і навіть… зекономити час усій команді.
📱 ТИПИ МОБІЛЬНИХ ЗАСТОСУНКІВ: ЩО ПОТРІБНО ЗНАТИ ТЕСТУВАЛЬНИКУ?


😮‍💨 Поширене питання на співбесідах у QA: "Які типи мобільних застосунків ви знаєте?"

Давайте розберемося докладно!

👇👇



// ОСНОВНІ ТИПИ МОБІЛЬНИХ ЗАСТОСУНКІВ //

😑 Нативні (Native) – написані для конкретної платформи (iOS/Android) мовами Swift/Kotlin.
😑 Кросплатформні (React Native, Flutter) – один код працює на обох платформах, але є обмеження.
😑 PWA (Progressive Web App) – фактично веб-сайт, який можна відкрити в браузері без встановлення.
😑 Гібридні (Cordova, Ionic) – поєднання веб-технологій та оболонки для запуску як мобільного застосунку.

✍️


Що це означає на практиці?

⬇️⬇️



// НАТИВНІ ЗАСТОСУНКИ: МАКСИМАЛЬНА ПРОДУКТИВНІСТЬ //



Нативний застосунок розроблений спеціально для певної ОС і напряму взаємодіє з її API.


😮‍💨 Що дає нативний код?
✔️ Високу продуктивність – напряму використовує процесор і графіку пристрою.
✔️ Доступ до всіх системних можливостей (Bluetooth, камери, датчиків, push-сповіщень тощо).
✔️ Найкращий UX, бо елементи інтерфейсу відповідають стандартам платформи.



😑 Основні мови програмування:
📌 iOS – Swift, Objective-C
📌 Android – Kotlin, Java



❗️ Тестувальнику важливо знати:
✔️ Як працює управління пам’яттю (наприклад, iOS може "вбивати" застосунок у фоновому режимі).
✔️ Як реагують push-сповіщення у різних станах застосунку.
✔️ Чи є специфічні особливості ОС (наприклад, різні дозволи в Android 13+).


✍️


// КРОСПЛАТФОРМНІ ЗАСТОСУНКИ: ШВИДКА РОЗРОБКА ПЛЮС КОМПРОМІСИ //

😑 React Native – написаний на JavaScript, використовує Bridge для спілкування з нативними модулями.
😑 Flutter – використовує мову Dart і має власний графічний рушій для відображення UI.



Як це працює?
🫠 React Native викликає нативні API через JS Bridge, що трохи уповільнює виконання.
🚀 Flutter рендерить UI власними засобами, тому працює швидше, але займає більше місця.



❗️Що врахувати у тестуванні?
☑️ Перевірка продуктивності (анімації можуть лагати через міст React Native).
☑️ UI може виглядати інакше на різних платформах (особливо у Flutter).
☑️ Перевіряти інтеграцію з нативними модулями (камера, геолокація, push).


✍️


// ГІБРИДНІ ЗАСТОСУНКИ: БАЛАНС МІЖ ВЕБОМ І НАТИВОМ //


😑 Гібридні застосунки – це мобільні додатки, які використовують веб-технології (HTML, CSS, JavaScript) всередині нативної оболонки.

✏️
Основні фреймворки: Cordova, Ionic, Capacitor.


Як це працює?
✔️Веб-контент рендериться всередині WebView.
✔️ Можливий доступ до нативних функцій через плагіни (камера, push, GPS).
✔️ Виглядає як мобільний застосунок, але працює як веб-сторінка.



✏️ Що перевіряти в тестуванні?
☑️ Чи правильно працює WebView на різних версіях ОС.
☑️ Чи працюють нативні плагіни (GPS, push, файловий доступ).
☑️ Продуктивність і швидкість завантаження (можливі затримки при переходах між екранами).
☑️ Відмінності в UI/UX між платформами.


⬇️⬇️


// PWA: МОБІЛЬНИЙ САЙТ, ЩО ПРАЦЮЄ ЯК ЗАСТОСУНОК //


📲 Progressive Web App – це фактично веб-сайт, який можна "додати на головний екран".

✔️ Не потребує встановлення, відкривається в браузері.
✔️ Підтримує push-сповіщення, офлайн-режим (через Service Workers).
✔️ Але має обмежений доступ до системних ресурсів (немає Bluetooth, обмеження на GPS).



Що перевіряти в PWA?
☑️ Чи коректно працює кешування офлайн.
☑️ Як реагує застосунок на втрату мережі.
☑️ Чи є відмінності у роботі на iOS та Android (наприклад, Safari має жорсткіші обмеження).



✍️
11.03.202515:09
📱ЯКИЙ У ТЕБЕ СКРІН РЕЗОЛЮШЕН?
Це типовий запит від розробника.

Але що це означає насправді, як її виміряти, і чому це важливо для мобільного тестування?

👇👇


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

На це впливають три ключові параметри:
Скрін резолюшен – роздільна здатність екрана, тобто скільки пікселів розміщується на дисплеї.
Розмір екрана – фізична діагональ дисплея у дюймах.
Щільність пікселів (DPI/PPI) – скільки точок припадає на один дюйм екрана.


Розглянемо їх детальніше.

⬇️⬇️



// СКРІН РЕЗОЛЮШЕН: КІЛЬКІСТЬ ПІКСЕЛІВ НА ДІСПЛЕЇ //


👁‍🗨 Що це таке?
Це параметр, що визначає, скільки пікселів вміщується у ширину та висоту дисплея, наприклад, 1080×1920 px.

👍Чим більше пікселів, тим чіткіше зображення, але це також впливає на продуктивність пристрою.


✔️Чому це важливо в тестуванні?
❗️UI-елементи можуть виглядати по-різному на пристроях із різною кількістю пікселів.
❗️Деякі елементи можуть зміщуватися, накладатися або обрізатися.
❗️Висока роздільна здатність потребує більше ресурсів, що може впливати на швидкість роботи додатка.



☑️ Як дізнатися роздільну здатність пристрою?

На Android: adb shell wm size
На iOS: Перевірити в Xcode Simulator або у характеристиках пристрою.
Через емулятори: Використовувати різні моделі в Android Studio або Xcode.
Онлайн-сервіси: WhatIsMyScreenResolution.com, ScreenResolutionTest.com.




// РОЗМІР ЕКРАНА: ФІЗИЧНІ ГАБАРИТИ ДИСПЛЕЯ //



👁‍🗨 Що це таке?
Це довжина діагоналі екрана в дюймах, наприклад, 6.1” для iPhone 14.



✔️ Чому це важливо в тестуванні?
↔️Впливає на комфортність роботи з додатком.
↔️Визначає розмір та розташування елементів UI.
↔️Менші екрани можуть вимагати іншого підходу до розміщення контенту.


☑️ Як виміряти розмір екрана?

Подивитися характеристики пристрою.
Використати лінійку (якщо немає доступу до документації).
😠

// ЩІЛЬНІСТЬ ПІКСЕЛІВ (DPI/PPI): ЧІТКІСТЬ
ВІДОБРАЖЕННЯ //


👁‍🗨 Що це таке?
Щільність пікселів визначає, наскільки дрібними або великими виглядають елементи на дисплеї. Вимірюється у DPI (dots per inch) або PPI (pixels per inch).

⬆️Чим вищий показник, тим чіткіший текст і графіка.



✔️Чому це важливо в тестуванні?
⭕️UI-елементи можуть виглядати по-різному на екранах з різною щільністю.
⭕️Низька щільність може робити текст розмитим, а висока – занадто дрібним.
⭕️На пристроях з високою щільністю пікселів потрібно тестувати іконки та зображення у відповідних розмірах.



☑️ Як перевірити DPI?

На Android: adb shell wm density

DPI-калькулятори:
Використовуй онлайн-інструменти, наприклад, dpi.lv або calculatorsoup.com, щоб розрахувати DPI на основі розміру екрана та його роздільності.

👁Android Studio показує щільність для різних емуляторів.



😑 Де вища щільність пікселів: на Android чи iOS?

😮‍💨
Apple використовує дисплеї Retina, де щільність завжди висока, щоб пікселі були непомітні на звичайній відстані перегляду.

🤖Android має більший розбіг: бюджетні моделі часто мають нижчий DPI, а флагмани, як-от Samsung Galaxy S23 Ultra, можуть мати дуже високу щільність.

⬇️⬇️


// ЧИ МОЖНА ЗМІНИТИ ЦІ ПАРАМЕТРИ У DEVELOPER OPTIONS?
//

🤖 😑Так, деякі з них можна налаштовувати на Android:

😮‍💨 Роздільність екрана:
В Налаштуваннях → Дисплей → Роздільна здатність (на деяких моделях).
Через adb: adb shell wm size 1080x1920

😮‍💨 DPI (щільність пікселів):
В Developer Options є параметр Smallest Width (Мінімальна ширина).
Через adb: adb shell wm density 320


😮‍💨❌ На iOS DPI і роздільність змінити не можна, але можна тестувати різні екрани через Xcode Simulator.


🧿🧿


// ЧОМУ ВАЖЛИВО ТЕСТУВАТИ НА РІЗНИХ ПРИСТРОЯХ? //


🔹 UI може виглядати інакше на різних екранах.
🔹 Кнопки та текст можуть виявитися надто маленькими або великими.
🔹 Графіка може бути розмитою на дисплеях з високою щільністю.



🔍Здатність тестувальника вимірювати розмір екрану, його роздільну здатність і змінювати щільність пікселів допоможе краще налаштувати UI та виявити потенційні проблеми ще до релізу.

🔥
28.04.202514:29
1.9 Cache-Control

⭕️
Історія: Браузери раніше самостійно вирішували, що і як довго кешувати.

⭕️Проблема: Користувачі бачили застарілі версії сторінок.

✔️Рішення: Заголовок Cache-Control дозволяє контролювати кешування.


👁‍🗨 Приклад використання:

Запит або відповідь:

Cache-Control: no-cache, max-age=3600


✏️ Пояснення: Дозволяє гнучко керувати терміном життя кешованого контенту.

Коротко про кешування

Це зберігання копій відповідей (у браузері або проміжних серверах), щоб зменшити навантаження на сервер і пришвидшити доступ. Кешування контролюється через Cache-Control, ETag, Expires.


⬇️⬇️


У наступній статті розглянемо основні заголовки HTTP-відповідей.

☕️
➡️ ЩО ТАКЕ GATEWAY І НАВІЩО ВІН ПОТРІБЕН?

У світі мікросервісної архітектури все починається з точки входу — і саме її роль виконує API Gateway.

😑 Під капотом Gateway — це сервер або сервіс, який приймає всі зовнішні запити, обробляє їх згідно з заданими правилами (авторизація, ліміти, трансформації) і пересилає далі до внутрішніх сервісів.

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


😀😀😀


// НАВІЩО ПОТРІБЕН GATEWAY? //

Коли сервіси були монолітними, вистачало одного API-ендпоінту.
Але із приходом мікросервісів система розділилася на десятки дрібних компонентів — і тут виникли запитання:

❓ Як реалізувати єдину точку входу?
❓ Як захистити внутрішню архітектуру?
❓ Як керувати доступом, логуванням і навантаженням?


Відповіддю став API Gateway — точка, де замикаються всі зовнішні запити.

👇👇


// ЩО ВМІЄ СУЧАСНИЙ GATEWAY? //

🎥 Маршрутизація — розподіл запитів на відповідні сервіси
🎥 Аутентифікація та авторизація — перевірка токенів і прав
🎥 Rate limiting — захист від DDoS і перевищення лімітів
🎥 Кешування — зменшення навантаження на бекенд
🎥 Трансформація даних — зміна формату запитів/відповідей
🎥 Логування і моніторинг — фіксація всієї активності



😑 Приклади застосування:
😑 Один запит на api.mysite.com може всередині бути розподілений між /auth, /products, /orders
😑 Gateway обмежує зовнішні інтеграції лише дозволеними методами
😑 Уся автентифікація зосереджена в одному місці
😑 Внутрішні сервіси ізольовані від зовнішнього світу



⚡️ Популярні рішення:
💖 Kong — open-source з розвинутим ком’юніті
💖 NGINX — легкий, швидкий, зручний для кастомізації
💖 Amazon API Gateway — хмарне рішення для AWS
💖 Spring Cloud Gateway / Zuul — частина екосистеми Java



👁‍🗨 Що важливо для QA:

😑 Gateway може змінювати поведінку API — це слід враховувати під час тестування
😑 Статуси 403, 429, 502 — часто приходять не від самого API, а від gateway
😑 Rate limiting варто перевіряти з кількома запитами поспіль
😑 Приклад edge-case: зламаний токен, перевищення розміру запиту, повторне надсилання
😑 У проєктах, де авторизація “на gateway”, логіка токенів і ролей тестується саме тут


😑

⚠️ Ризики використання Gateway

💢 Одна точка відмови — якщо gateway падає, недоступні всі сервіси.
💢 Помилки в налаштуваннях — можуть заблокувати легальні запити або відкрити доступ тим, кому не слід.
💢 Мішень для атак — gateway першим приймає запити ззовні, тому часто стає ціллю.
💢 Вразливість через застаріле ПЗ — без оновлень можуть з’явитися діри в безпеці.
💢 Відсутність резерву — без запасного плану збій gateway = збій системи.


😑

▶️ У наступних статтях — як виглядає request flow через Gateway та як правильно перевіряти rate limiting.

😑
🧠 ROOT CAUSE ANALYSIS (RCA): Як знайти справжню причину проблеми у тестуванні?

Симптоми усунули — а баг повернувся після релізу. Знайоме? Таке трапляється, якщо усунути лише симптом, а не саму першопричину.

🤓Щоб уникнути повторень, у тестуванні використовують Root Cause Analysis (RCA) — системний підхід до виявлення джерела помилки. Він дозволяє розібратись у глибині проблеми замість того, щоб боротися з наслідками.


// ЩО ТАКЕ RCA? //

👇👇

🔍 Root Cause Analysis (RCA) — це методика, яка дозволяє системно дослідити, чому виникла помилка, і знайти саме ту причину, яка спричинила ланцюгову реакцію.

📝 RCA використовується у QA, розробці, DevOps, продуктовому менеджменті, бізнес-аналізі — скрізь, де важливо розуміти джерело проблеми, а не лише її поверхню.


✏️

// ТРОХИ ІСТОРІЇ //

RCA виник ще у середині XX століття, коли на виробництві стали впроваджувати системи контролю якості.

Наприклад, заводи Toyota використовували RCA у рамках Lean Manufacturing та Total Quality Management (TQM).


💻 У сфері IT RCA прижився як спосіб уникати повторення критичних багів, втрат користувачів і збою в процесах.



✍️

// НАВІЩО RCA ТЕСТУВАЛЬНИКУ? //


✅ Щоб не латати одне й те саме після кожного релізу
✅ Щоб покращити тест-кейси та процеси в команді
✅ Щоб зрозуміти — чому бага не вловили на ранньому етапі?
✅ Щоб працювати не реактивно, а проактивно


👇👇


// ЕТАПИ ROOT CAUSE ANALYSIS //


1️⃣ Ідентифікація проблеми
– Що сталося? Де саме? Які наслідки?
– Збираємо логі, дані користувача, дії перед багом.

2️⃣ Аналіз симптомів
– UI? API? інтеграція?
– Чи повторюється? Які ознаки?

3️⃣ Пошук першопричини
Використовуються популярні RCA-методи:

🔹 5 Whys – запитуємо “чому?” 5 разів поспіль

🔹 Fishbone Diagram – візуально розкладаємо фактори за категоріями

🔹 Pareto Analysis (80/20) – виявляємо топ-причини, що викликають більшість помилок


4️⃣ Розробка рішення
Після того як знайдена коренева причина, розробляється стратегія усунення, а не просто фікс.

5️⃣ Впровадження + перевірка
Чи не повторюється баг? Чи змінився процес? Чи покращилась якість?

✍️

🐟 Приклад з практики: Fishbone Diagram

🔎 Ситуація: при натисканні кнопки Search у мобільному додатку додаток "падає".

😑 Розбираємо через Fishbone Diagram:

        Падіння додатку
⬇️
--------------------------
| | | |
Код Процес Інфра Вимоги
⬇️ ⬇️ ⬇️ ⬇️
- пропущена перевірка null
- немає рев’ю-коду
- CI/CD дав збій
- нечітко описана UX-логіка


👁‍🗨 ВИСНОВОК

✔️Причина — неперевірене null-значення у відповіді від API. Тест-кейси цього не врахували.

☑️ Рішення:
– Додати null-check
– Розширити тестування
– Додати рев’ю перед релізами


📝


🔣 Інший приклад: метод 5 Whys

🔎Ситуація: пошук не працює при введенні спецсимволів.
1. Чому? — API повертає помилку
2. Чому? — не враховані спецсимволи
3. Чому? — не було валідації
4. Чому? — QA не залучили до написання вимог
5. Чому? — процес вимог не включає тестувальників


☑️ Рішення: Впровадити процес узгодження вимог із QA.


✍️


// ПЕРЕВАГИ RCA У QA //



✅ Запобігання повторним дефектам
✅ Оптимізація процесів (виявляються слабкі місця)
✅ Зниження витрат (менше часу на фікси у проді)
✅ Покращення документації, вимог, тест-кейсів
✅ Загальне зростання якості продукту



🔥Root Cause Analysis — це не просто інструмент, а спосіб мислення. Він вчить бачити за багами системні прогалини: у процесах, комунікаціях чи вимогах.
17.03.202511:11
Чекліст та приклад CV, які допоможуть тим, хто планує подаватися на позицію Trainee QA.

Ключові елементи, які можна включити, щоб ваше резюме працювало на вас!

1️⃣ Фото у професійно-діловому стилі
Не обов’язковий пункт, але якщо додаєте – оберіть якісне фото на нейтральному фоні, без селфі чи кадрів з відпочинку.

2️⃣ Ім'я, прізвище та бажана посада

3️⃣ Короткий опис про себе
2–3 речення, які підсумовують ваш досвід та цілі, бо рекрутери витрачають лише кілька секунд на перегляд резюме.

4️⃣ Контакти: телефон, email, LinkedIn, Telegram
Обов’язково вказуйте актуальні контактні дані та додавайте LinkedIn – багато рекрутерів шукають кандидатів саме там.

5️⃣ Вища освіта
Навіть якщо вона не пов’язана з IT, все одно варто вказати. Профільна освіта – це плюс.

6️⃣ Пройдені курси
Перелічіть усі курси, які ви пройшли.
Якщо це курс з YouTube – його теж варто вказати.

7️⃣ Мови, якими володієте
В IT англійська важлива, і рекрутери оцінять вашу готовність її покращувати.

8️⃣ Pet-проєкти
Якщо немає комерційного досвіду, покажіть реальні практичні навички. Що тестували: веб, мобільний застосунок тощо. Ваші задачі: складали тест-кейси, тестували API, працювали в баг-трекінговій системі, взаємодіяли з командою.

9️⃣ Перелік хард-скілів
Будьте уважні: детально проаналізуйте все, що пишете.
❌ Не вказуйте технології, з якими не працювали, адже на інтерв’ю можуть поставити питання щодо них.

🔟 Посилання на вашу тестову документацію
🔹 Це суперважливий пункт для тих, хто ще не має комерційного досвіду!
У розробників є GitHub, а у тестувальника має бути Google Drive або Notion із прикладами тестової документації.
Це можуть бути документи, створені на курсах або під час роботи над pet-проєктом. Це покаже ваші вміння, самостійність і практичний досвід.

🚫 Типові помилки, яких краще уникати:

❌ Довге та перевантажене CV – рекрутери не читають 2–3 сторінки тексту.
✅ Оптимальний обсяг для початківця – 1 сторінка.
❌ Неструктуроване резюме – гарне CV має бути читабельним!
✅ Використовуйте заголовки, списки, виділення, щоб інформація легко сприймалася.
❌ Загальні фрази типу "стресостійкий, відповідальний".
❌ Граматичні помилки – уважно перевіряйте текст, особливо назви інструментів і технологій.
❌ Відсутність посилань на приклади тестової документації – навіть якщо досвіду немає, потрібно показати, що ви тестували самостійно та як оформлюєте тестову документацію.
Якщо плануєте аплаїтись на вакансії у великі та/або міжнародні компанії - краще без фото, графічних деталей, малюнків, бо ATS системи можуть це не сприйняти.
(By Anastasia Dyka)
10.03.202509:18
КАР'ЄРА QA: Як рости у тестуванні та не застрягнути на Junior рівні

😑 Тестування – це не просто "клікати по кнопках".

Це аналітика, автоматизація, бізнес-логіка, безпека та робота з даними. Проте багато тестувальників після перших двох років роботи відчувають застій.


☑️ 🔝 Як вирости з Junior до Middle і далі?


Давайте розберемося!

👇👇


1️⃣🔤 ОБРАТИ СВІЙ ВЕКТОР РОЗВИТКУ

QA
– це широке поле. Ось кілька можливих напрямків:

*️⃣Automation QA – автоматизація тестування (Selenium, Cypress, Appium).
*️⃣Performance QA – тестування продуктивності (JMeter, Gatling, k6).
*️⃣Security QA – тестування безпеки (Burp Suite, OWASP ZAP).
*️⃣Data & API Testing – тестування баз даних і API (Postman, SQL, GraphQL).
*️⃣QA Lead / Test Manager – менеджмент процесів тестування.


☝️Чим швидше визначишся із напрямком, тим швидше почнеш отримувати релевантний досвід.



2️⃣🔤ОПАНУВАТИ HARD SKILLS

🔔Рівень Middle → Senior неможливий без технічних навичок.

Що потрібно?

✔️ SQL – запити до баз даних, перевірка бекенду.
✔️ API – Postman, REST, GraphQL, тестування інтеграцій.
✔️ Git – робота з кодом і тестовими скриптами.
✔️ CI/CD – Jenkins, GitHub Actions для автоматизації тестування у пайплайнах.
✔️ Мови програмування – Python, JavaScript або Java (особливо для автоматизаторів).


⬇️⬇️


// РЕКОМЕНДОВАНІ КУРСИ //

Безоплатні:

🔹 Основи тестування програмного забезпечення від Logos IT Academy
🔹 Курс "Основи аналітики даних" на Prometheus
🔹 Безоплатні курси тестувальника від AVADA MEDIA



Платні:

💰QA Engineer з нуля до роботи в IT від Mate Academy
💰 Онлайн-курси тестувальника (QA) від SkillUp
💰 Курси тестувальників онлайн від GoIT Global




3️⃣🔤БУТИ ПРОАКТИВНИМ У КОМАНДІ

⁉️ Не чекати на завдання – а шукати проблеми, які можна вирішити!

Як саме?

✔️ Вести тестову документацію – тест-кейси, баг-репорти, чеклісти.
✔️ Піднімати питання ризиків – які проблеми можуть виникнути після релізу?
✔️ Автоматизувати рутину – якщо перевіряєш одне й те саме вручну, оптимізувати процес.
✔️ Пропонувати покращення – наприклад, запровадити тестування API, якщо його ще немає.




4️⃣🔤ВЧИТИСЯ ПОСТІЙНО

*️⃣Читати книги: "Lessons Learned in Software Testing", "Agile Testing".
*️⃣ Проходити курси: Udemy, Coursera, Test Automation University.
*️⃣ Відвідувати конференції: TestCon, QA Fest, SeleniumConf.
*️⃣ Спілкуватися в QA-спільнотах та Telegram-каналах: QA_Prostir 😉



📈🔝Кар’єра в QA – це постійний розвиток, аналіз і вдосконалення процесів тестування.



🔥
PERFORMANCE TESTING З ПРИКЛАДАМИ JMETER


😑Обов’язково варто робити, якщо ваш проєкт:
✅️Онлайн-магазин або портал з великою аудиторією
✅️API, яке викликають інші системи
✅️Мобільний або PWA додаток з інтерактивним бекендом
✅️Великий обсяг даних (CRM, аналітика)
✅️Рекламні кампанії чи розпродажі


Сьогодні розглянемо один з найпопулярніших інструментів — Apache JMeter


👇👇



🛠 APACHE JMETER — безкоштовний інструмент для симуляції трафіку:

✔️Має GUI і CLI
✔️Працює з HTTP, WebSocket, FTP, БД, SOAP
✔️Підходить для навантажувального тестування в UI або автоматично




// ОСНОВНІ ПАРАМЕТРИ СЦЕНАРІЮ В JMETER
//

Щоб задати сценарій навантаження використовують Thread Group.

❗️Це основа кожного тесту в JMeter. Саме тут ви визначаєте, скільки користувачів, як швидко вони запускаються, що саме вони роблять, і як довго це триває.

Усі ваші запити (HTTP, JDBC тощо) “живуть” всередині Thread Group.

Ось параметри, які треба знати:
Threads (Users): скільки одночасних юзерів (напр. 100)
Ramp-Up (сек): час, за який всі юзери запускаються (напр. 60 = 1.7 юзер/сек)
Loop Count: скільки разів кожен юзер повторює сценарій (можна Forever)
Sampler: тип запиту, який виконує користувач.
Scheduler: дозволяє обмежити час виконання
Start Delay / Duration: коли почати і як довго запускати
Timers: додають паузи між запитами (Constant Timer, Random Timer)
Assertions: перевірки статусу, тексту у відповіді
Listeners: звіти, графіки, метрики


⬇️⬇️⬇️



// ТИПИ PERFORMANCE TESTING З ПРИКЛАДАМИ JMETER
//


1️⃣ LOAD TESTING — базова перевірка під навантаженням

🎯 Ціль: Чи витримає сайт 100 одночасних юзерів?


JMeter:
✅️Threads: 100
✅️Ramp-Up: 60
✅️Loop Count: 10
✅️HTTP Request: GET /api/data
✅️Constant Timer: 100 мс
✅️Assertion: Response code = 200



⬇️⬇️⬇️



2️⃣ STRESS TESTING — коли система перестане витримувати


JMeter (Stepping Thread Group):
✅️Start: 50 Threads
✅️Add: 50 кожні 30 сек
✅️Досягти: 1000 Threads
✅️Спостерігайте: Error %, тривалість відповіді, CPU, RAM



⬇️⬇️⬇️



3️⃣ SPIKE TESTING — раптовий пік трафіку

🎯 Ціль: Як система поводиться при різкому стрибку трафіку


JMeter:
✅️Thread Group 1: 100 Threads, Ramp-Up: 60
✅️Thread Group 2: 1000 Threads, Ramp-Up: 5, Start Delay: 120 сек



⬇️⬇️⬇️


4️⃣ SOAK (ENDURANCE) TESTING — стабільність за часом

🎯 Ціль: Виявити витоки пам’яті, деградацію швидкодії


JMeter:
✅️Threads: 100
✅️Ramp-Up: 60
✅️Loop: Forever
✅️Scheduler: ON → Duration: 28800 сек (8 годин)



⬇️⬇️⬇️



5️⃣ SCALABILITY TESTING— чи масштабується система

🎯 Ціль: Чи зростає продуктивність із додаванням ресурсів


JMeter:
✅️Той самий сценарій з Threads: 100, 200, 400
✅️Loop Count: 10



⬇️⬇️⬇️



6️⃣ VOLUME TESTING — тестування великих обсягів даних


JMeter (JDBC Sampler):
✅️Threads: 10
✅️Ramp-Up: 10
✅️Loop Count: 100
✅️Sampler: JDBC Request або HTTP POST до API
✅️Якщо API — надсилаємо великі payload'и
✅️Якщо БД — запити типу SELECT * FROM orders WHERE date BETWEEN ...
✅️CSV Data Set Config: файл з параметрами для підстановки (напр. айдішники, дати)
✅️Assertion: перевіряємо, що відповідь не порожня / статус = 200



☕️
NEGATIVE TESTING: НАВІЩО ТЕСТУВАТИ ТЕ, ЩО НЕ МАЄ ПРАЦЮВАТИ?

Основа Negative Testing — пошук сценаріїв, у яких система має відмовити, відреагувати помилкою або не виконати дію.

😑Negative Testing — це не просто “ламати систему”.

Це професійний підхід до стабільності, безпеки та якості продукту.
Саме тут народжуються найцінніші баги.

✍️

// ЩО ТАКЕ NEGATIVE TESTING? //

Negative Testing (негативне тестування) — це підхід, за якого ми навмисно вводимо неправильні, неочікувані або граничні дані, аби перевірити, як система поводиться в “аномальних” умовах.

😮‍💨Це протилежність positive testing, коли ми перевіряємо, що все працює за планом.

Більшість критичних багів виявляються саме під час негативного тестування — тому його важливість не можна недооцінювати.

👇👇


👁‍🗨 Навіщо це потрібно?

😑 Виявити нестійкість у коді
😑 Перевірити обробку помилок (error handling)
😑 Запобігти крашам і втраті даних
😑 Підвищити довіру до продукту: баги часто ховаються саме в edge-case’ах


✍️


// ПРИКЛАДИ НЕГАТИВНОГО ТЕСТУВАННЯ //


1️⃣ UI
🔸 Ввести в поле “Телефон” — текст: abcdef
🔸 Вставити у форму emoji або спецсимволи
🔸 Натиснути “Зберегти”, не заповнивши обов’язкові поля
🔸 Ввести занадто довгий текст (500+ символів у полі “Ім’я”)

Що перевіряємо:
Валідацію, повідомлення про помилки, стабільність форми

😀

2️⃣ API
🔸 Відправити запит без токена авторизації
🔸 Передати userId: null або email: "123"
🔸 Викликати PUT замість POST

🔤Очікуємо: 403 / 401 / 422 — чи правильно реагує бекенд?

😀

3️⃣ Мобільний додаток
🔸 Вимкнути інтернет і натиснути “Оновити”
🔸 Повернути екран під час завантаження
🔸 Кілька разів швидко натиснути на кнопку
🔸 Надати доступ до камери, а потім заборонити

Що перевіряємо:
Обробку переривань, доступів, таймаутів, станів


⬇️⬇️


// ЯК ПОБУДУВАТИ НЕГАТИВНИЙ СЦЕНАРІЙ? //


✔️ Подумати: що піде не так?
✔️ Визначити точку входу (UI/API/дія користувача)
✔️ Ввести дані або умову, яка порушує норму
✔️ Передбачити очікувану негативну реакцію
✔️ Перевірити, чи не зламалась система




// ДОДАТКОВІ ПОРАДИ //
🔹 Повідомлення про помилки мають бути чіткі й зрозумілі
🔹 Логувати результати — негативне тестування допомагає писати хороші тест-кейси
🔹 Враховувати edge-case’и: null, пусті поля, нестандартні мови, неочікувані типи даних
🔹 Не обмежуватись UI — тестувати також API, базу, мережу
19.03.202512:21
🎛 UI-ПАТЕРНИ У ТЕСТУВАННІ: ЯК ВЗАЄМОДІЯТИ З РІЗНИМИ ТИПАМИ ЗАСТОСУНКІВ?

Не всі UI-патерни працюють однаково, і деякі взаємодії можуть мати обмеження залежно від типу застосунка.

Що можна тестувати в нативних, кросплатформних, веб- і гібридних застосунках?

Давайте розберемося докладно!

👇👇



// НАТИВНІ ЗАСТОСУНКИ (iOS/ANDROID) //


Що підтримується:
✔️ Pull-to-refresh – оновлення списків свайпом вниз.
✔️ Жести свайпу – видалення, навігація, відкриття меню.
✔️ Довге натискання – виклик контекстного меню, drag-and-drop.
✔️ Нативні перемикачі, чекбокси – елементи, що відповідають платформі.
✔️ Тактильний відгук (Haptic feedback) – вібрації та системні ефекти.
✔️ Нативні анімації та переходи – плавні та оптимізовані для ОС.



🚫 Обмеження:
Платформозалежні жестиiOS: свайп від краю для навігації, Android: кнопка «Назад».
Системні дії – наприклад, iOS не дозволяє змінювати жести управління (Control Center).


✍️



// КРОСПЛАТФОРМНІ ЗАСТОСУНКИ //


Що підтримується:

✔️ Більшість нативних UI-патернів (pull-to-refresh, свайпи, довге натискання).
✔️ Кастомні анімації – але в React Native можуть бути повільнішими через JS Bridge.
✔️ Гнучка обробка жестівFlutter має точніше розпізнавання жестів.
✔️ Тактильний відгук (Haptic feedback) – наприклад, через react-native-haptic-feedback або HapticFeedback.mediumImpact() у Flutter.

🚫 Обмеження:
UI-компоненти можуть виглядати менш нативно – наприклад, прокрутка в React Native може бути менш плавною.
Деякі платформозалежні функції вимагають нативних модулів – складні жести, специфічні віджети.


✍️



// PWA: PROGRESSIVE WEB APP //


Що підтримується:
✔️ Базові UI-взаємодії – натискання, кнопки, прокрутка.
✔️ Довге натискання – але часто викликає дії браузера.
✔️ Деякі жести свайпу – якщо реалізовані через JavaScript.


🚫 Обмеження:
Немає справжнього pull-to-refresh – контрольований браузером.
Обмежені свайпи – навігація назад/вперед контролюється браузером.


📝


👁‍🗨 ВИСНОВКИ ДЛЯ ТЕСТУВАННЯ
🔹 Pull-to-refresh варто тестувати тільки в нативних і кросплатформних додатках, а не в PWA.
🔹 Свайпи можуть працювати нестабільно у гібридних та веб-застосунках.
🔹 Довге натискання в PWA може викликати системні меню браузера.
🔹 Haptic feedback доступний тільки в нативних та кросплатформних застосунках.
🔹 Перемикачі, date pickers та інші UI-компоненти відрізняються залежно від типу застосунка.




🔥 Знання UI-патернів допоможе тестувальникам виявляти потенційні проблеми ще до релізу.
17.03.202511:11
Корисно для початківців.
📲 ТЕСТУВАННЯ PUSH-НОТИФІКАЦІЙ: ЧЕКЛІСТ ДЛЯ QA

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

Але що з ними може піти не так?

❌Повідомлення не приходять вчасно.
❌ Вони можуть дублюватися.
❌ Або зникати без сліду.


🆗Щоб уникнути подібних проблем, тестувальник повинен перевірити всі можливі сценарії.


Давайте розглянемо основні аспекти тестування push-нотифікацій.

👇👇



// ЩО ВАЖЛИВО ПЕРЕВІРИТИ? //


1️⃣ Доставка повідомлення

✔️ Чи приходить пуш після тригерної дії? (наприклад, нове повідомлення або зміна статусу замовлення)
✔️ Чи відображається пуш на заблокованому екрані, у статус-барі та в центрі повідомлень?
✔️ Чи з’являється пуш, коли застосунок відкритий, у фоні чи закритий?
✔️ Чи працює пуш після перезавантаження пристрою?



2️⃣ Контент пуша

☑️ Текст, іконки, зображення – чи все відображається правильно?
☑️ Чи немає обрізаних символів? (Особливо на iOS, де є жорсткі ліміти)
☑️ Локалізація – пуш має бути на правильній мові, залежно від налаштувань пристрою.



3️⃣ Дії на пуші

✔️ Чи відкривається потрібний екран застосунку після натискання?
✔️ Чи працюють "Swipe to dismiss" і кнопки дій? (Наприклад, "Відповісти", "Переглянути")
✔️ Що буде, якщо натиснути пуш кілька разів? (Відкриється один екран чи створиться купа дублів?)



4️⃣ Push vs батарея та мережа

☑️ Що буде, якщо інтернет зник під час надсилання пуша? Чи прийде він пізніше?
☑️ Чи працюють пуші в режимі енергозбереження або low-power mode?
☑️ Чи не надходить забагато пушів одночасно? (Щоб не спричинити блокування зі сторони Android/iOS)



5️⃣ Поведінка при отриманні кількох пушів

✔️ Чи групуються пуші в стек, якщо їх багато? (Наприклад, повідомлення у месенджері)
✔️ Чи кожен пуш відображається окремо, займаючи весь екран? (Деякі пуші, наприклад, на iOS можуть показувати великі банери)
✔️ Чи є логіка оновлення повідомлення замість створення нового? (Наприклад, "Очікуйте кур’єра через 10 хвилин" → "Кур’єр уже на місці")
✔️ Що буде, якщо видалити один пуш зі стека? Чи зникнуть всі, чи лише конкретний?



6️⃣ Permission & блокування

☑️ Що буде, якщо користувач заборонив пуші? Чи працює fallback (email або інші сповіщення)?
☑️ Чи є правильний запит на дозвіл (особливо на iOS, де не можна спамити запитами)?
☑️ Як працюють пуші на різних версіях Android та iOS?



✅✅✅


// КОРИСНІ ІНСТРУМЕНТИ //

😑 Firebase Cloud Messaging (FCM) – найпопулярніший сервіс для тестування пушів на Android/iOS.
😑 Proxyman/Charles – для аналізу мережевих запитів push-нотифікацій.
😑 ADB (Android Debug Bridge) – дозволяє вручну емуляти пуші та перевіряти логи.



😑Тестування push-нотифікацій – це не просто перевірити, чи вони приходять.

Важливо протестувати всі сценарії: доставку, контент, взаємодію користувача, вплив на батарею та permission’и.

Особливо це критично для застосунків, де пуші безпосередньо впливають на користувацький досвід – банки, e-commerce, соцмережі.


🔥
Shown 1 - 20 of 20
Log in to unlock more functionality.