👀 У AI з'явилися "очі": Як тестувати UI, просто скинувши скріншот
Привіт, екіпаж!
Ми звикли писати промпти текстом. Але QA — це часто робота очима. "Тут кнопка з'їхала", "тут контраст поганий", "тут текст не читається".
Раніше, щоб автоматизувати це, потрібні були дорогі інструменти візуальної регресії. Сьогодні ваш Co-pilot (
Практичний кейс: Розробник віддав нову версію мобільного екрану. Виглядає наче ок, але "щось не те".
Що робимо:
✨ Готовий промпт "UI-інспектор":|
✅ Що знаходить AI: Він дивовижно точний!
Висновок: Це "свіжа пара очей", яка ніколи не втомлюється. Використовуйте це перед тим, як показувати UI дизайнеру або менеджеру.
А ви вже пробували показувати AI картинки? Як результати? 👇
Привіт, екіпаж!
Ми звикли писати промпти текстом. Але QA — це часто робота очима. "Тут кнопка з'їхала", "тут контраст поганий", "тут текст не читається".
Раніше, щоб автоматизувати це, потрібні були дорогі інструменти візуальної регресії. Сьогодні ваш Co-pilot (
ChatGPT-4o, Gemini, Claude) може зробити візуальний аудит за секунди.Практичний кейс: Розробник віддав нову версію мобільного екрану. Виглядає наче ок, але "щось не те".
Що робимо:
1️⃣ Робимо скріншот екрану (або макета у Figma).2️⃣ Завантажуємо його в чат з AI.
✨ Готовий промпт "UI-інспектор":|
(Прикріпіть скріншот)
Виступи в ролі суворого UI/UX Дизайнера та QA. Проведи візуальний аудит цього екрану мобільного додатку.
**Зверни увагу на:**
1. **Вирівнювання (Alignment):** Чи є елементи, які "пляшуть" і не вирівняні по сітці?
2. **Типографіку:** Чи читабельний текст? Чи достатній контраст (згідно WCAG)?
3. **Відступи (Padding/Margin):** Чи не виглядають елементи занадто скупченими або розкиданими?
4. **Consistency:** Чи не виглядає якась кнопка "чужою" за стилем?
Дай список із 3-5 конкретних візуальних багів або покращень.
✅ Що знаходить AI: Він дивовижно точний!
🔹"Кнопка 'Скасувати' має менший відступ знизу, ніж кнопка 'Зберегти'."
🔹"Сірий текст на білому фоні має занизький контраст, це проблема доступності."
🔹"Іконка 'Налаштування' не вирівняна по центру з текстом заголовка."
Висновок: Це "свіжа пара очей", яка ніколи не втомлюється. Використовуйте це перед тим, як показувати UI дизайнеру або менеджеру.
А ви вже пробували показувати AI картинки? Як результати? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
🛠 Кнопка "Зробити магію": Створюємо власні інструменти тестування за 1 хвилину
Привіт, екіпаж!
Ми звикли качати розширення для Chrome: одне для перевірки посилань, інше для очищення кешу, третє для заповнення форм. А що, як я скажу вам, що ви можете створити власний інструмент під конкретну задачу за хвилину, не будучи програмістом?
Це називається Bookmarklet (Букмарклет) — шматок JavaScript-коду, збережений як звичайна закладка в браузері.
Давайте створимо "рентген", який миттєво покаже всі картинки без опису (alt), що є грубою помилкою доступності та SEO.
Практичний кейс:
✨ Промпт "Tool Maker":
✅ Результат від AI (копіюйте це):
Як це встановити:
Як це працює: Зайдіть на будь-який сайт. Натисніть на цю закладку. Бум! Усі проблемні картинки обведені червоним.
Що ще можна створити?
Ви більше не залежите від чужих плагінів. Ви створюєте свої.
А яку "чарівну кнопку" ви б хотіли мати в браузері? Пишіть ідеї в коментарях, згенеруємо код разом! 👇
Привіт, екіпаж!
Ми звикли качати розширення для Chrome: одне для перевірки посилань, інше для очищення кешу, третє для заповнення форм. А що, як я скажу вам, що ви можете створити власний інструмент під конкретну задачу за хвилину, не будучи програмістом?
Це називається Bookmarklet (Букмарклет) — шматок JavaScript-коду, збережений як звичайна закладка в браузері.
Давайте створимо "рентген", який миттєво покаже всі картинки без опису (alt), що є грубою помилкою доступності та SEO.
Практичний кейс:
1️⃣ Відкриваємо AI.2️⃣ Пишемо промпт.
✨ Промпт "Tool Maker":
Виступи в ролі JavaScript-розробника.
Напиши мені код для **Bookmarklet** (скрипт, що починається з `javascript:`), який робить наступне на будь-якій відкритій сторінці:
1. Знаходить усі зображення (`img`), у яких немає атрибута `alt` або він порожній.
2. Обводить ці зображення товстою червоною рамкою (5px solid red).
3. Виводить повідомлення (alert) з кількістю знайдених помилок.
Код має бути в один рядок (minified), готовий для вставки в закладку.
✅ Результат від AI (копіюйте це):
javascript:(function(){var imgs=document.querySelectorAll('img:not([alt]),img[alt=""]');imgs.forEach(img=>img.style.border='5px solid red');alert('Знайдено зображень без Alt: '+imgs.length);})();Як це встановити:
1️⃣ У Chrome натисніть правою кнопкою на панель закладок -> "Додати сторінку".2️⃣ Ім'я: 🔴 Find No-Alt3️⃣ URL: вставте код, який дав AI.4️⃣ Зберегти.
Як це працює: Зайдіть на будь-який сайт. Натисніть на цю закладку. Бум! Усі проблемні картинки обведені червоним.
Що ще можна створити?
🔹"Заповнити всі поля форми тестовими даними".
🔹"Підсвітити всі посилання, які ведуть на http замість https".
🔹"Показати приховані паролі".
Ви більше не залежите від чужих плагінів. Ви створюєте свої.
А яку "чарівну кнопку" ви б хотіли мати в браузері? Пишіть ідеї в коментарях, згенеруємо код разом! 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
🥒 BDD без болю: Пишемо ідеальні Gherkin-сценарії за 1 хвилину
Привіт, екіпаж!
Ви працюєте з
❌ Погано: When I click button "#submit-btn"
✅ Добре: When I submit the registration form
Але навіщо мучитися з формулюваннями, якщо AI розуміє
Практичний кейс: У нас є фіча "Відновлення пароля". Нам потрібно покрити її BDD-сценаріями.
✨ Готовий промпт "BDD-Майстер":
✅ Приклад результату, який видасть AI:
Висновок: Ви отримуєте чисті, зрозумілі сценарії, які можна одразу вставляти у
А ви використовуєте BDD/Gherkin на своєму проєкті? 👇
Привіт, екіпаж!
Ви працюєте з
Cucumber або SpecFlow? Тоді ви знаєте, як важко буває правильно сформулювати сценарії Given/When/Then. Часта помилка — писати про кліки, а не про поведінку.❌ Погано: When I click button "#submit-btn"
✅ Добре: When I submit the registration form
Але навіщо мучитися з формулюваннями, якщо AI розуміє
Gherkin краще за нас?Практичний кейс: У нас є фіча "Відновлення пароля". Нам потрібно покрити її BDD-сценаріями.
✨ Готовий промпт "BDD-Майстер":
Виступи в ролі досвідченого QA Automation Engineer, який спеціалізується на BDD.
**Фіча:** Відновлення пароля (Forgot Password).
**Логіка:** Користувач вводить імейл. Якщо імейл існує, йому відправляється посилання. Якщо ні — показується загальне повідомлення (security measure).
**Завдання:**
Напиши 3 сценарії на мові Gherkin (Given/When/Then).
1. Успішне відновлення.
2. Імейл не зареєстрований.
3. Невалідний формат імейлу.
**Важливо:** Пиши в "декларативному" стилі (описуй дії бізнесу, а не кліки по UI).
✅ Приклад результату, який видасть AI:
Feature: Password Recovery
Scenario: User successfully requests a password reset link
Given the user is on the Forgot Password page
When they submit a registered email address "user@example.com"
Then they should see a confirmation message "Check your email"
And they should receive a password reset email
Scenario: User tries to reset password for non-existent account
Given the user is on the Forgot Password page
When they submit an unregistered email address "ghost@example.com"
Then they should see a generic confirmation message "If this email exists, we sent a link"
# (Security best practice: don't reveal if user exists)
Scenario: User enters invalid email format
Given the user is on the Forgot Password page
When they submit an invalid email "user.example.com"
Then they should see a validation error "Please enter a valid email address"
Висновок: Ви отримуєте чисті, зрозумілі сценарії, які можна одразу вставляти у
.feature файл. Це економить час на "вигадування слів" і гарантує, що ваші тести будуть зрозумілі навіть не-технічним колегам.А ви використовуєте BDD/Gherkin на своєму проєкті? 👇
❤1
🧠 Тестування без "сліпих зон": Як AI застосовує професійні евристики (SFDIPOT)
Привіт, екіпаж!
Буває так: ви протестували фічу, все наче працює, віддали в реліз... а там виліз баг. Не тому, що ви погано шукали, а тому, що ви просто не подумали подивитися в той бік.
Досвідчені тестувальники використовують тестові евристики (моделі), щоб нічого не пропустити. Одна з найпотужніших —
Звучить як складна абревіатура з підручника? Так і є. Але вам не треба її зубрити. Ваш Co-pilot знає її ідеально!
Практичний кейс: Ви тестуєте функціонал "Завантаження файлів".
✨ Готовий промпт "Генератор ідей за SFDIPOT":
✅ Приклад інсайтів від AI:
Висновок: Цей метод перетворює ваше мислення з "лінійного" (перевірив — працює) на "об'ємне" (перевірив з усіх боків). AI допомагає вам побачити ті аспекти продукту, про які ви навіть не здогадувалися.
А ви користуєтесь мнемоніками в роботі? Чи покладаєтесь на чек-листи? 👇
Привіт, екіпаж!
Буває так: ви протестували фічу, все наче працює, віддали в реліз... а там виліз баг. Не тому, що ви погано шукали, а тому, що ви просто не подумали подивитися в той бік.
Досвідчені тестувальники використовують тестові евристики (моделі), щоб нічого не пропустити. Одна з найпотужніших —
SFDIPOT (Structure, Function, Data, Interfaces, Platform, Operations, Time).Звучить як складна абревіатура з підручника? Так і є. Але вам не треба її зубрити. Ваш Co-pilot знає її ідеально!
Практичний кейс: Ви тестуєте функціонал "Завантаження файлів".
✨ Готовий промпт "Генератор ідей за SFDIPOT":
Виступи в ролі Test Architect. Я тестую функціонал "Завантаження файлів" у веб-додатку.
**Завдання:**
Згенеруй ідеї для тестування, використовуючи евристику **SFDIPOT**. Розпиши по 2-3 неочевидні перевірки для кожної категорії:
1. **Structure** (Що це? З чого складається код?)
2. **Function** (Що воно робить?)
3. **Data** (Які дані приймає/виводить?)
4. **Interfaces** (З чим з'єднується?)
5. **Platform** (Де запускається?)
6. **Operations** (Як використовується?)
7. **Time** (Часові обмеження, конкурентність)
✅ Приклад інсайтів від AI:
🔹Data: А що, як файл порожній (0 байт)? А якщо в назві файлу є емодзі або китайські ієрогліфи?
🔹Platform: Чи працює завантаження, якщо у браузера немає прав на доступ до файлової системи (наприклад, на мобільному)?
🔹Time (Timeouts): Що буде, якщо почати завантаження і розірвати з'єднання на 99%? Чи видалить сервер "сміття"?
🔹Operations: Що буде, якщо 100 користувачів одночасно завантажать файл в одну й ту ж секунду?
Висновок: Цей метод перетворює ваше мислення з "лінійного" (перевірив — працює) на "об'ємне" (перевірив з усіх боків). AI допомагає вам побачити ті аспекти продукту, про які ви навіть не здогадувалися.
А ви користуєтесь мнемоніками в роботі? Чи покладаєтесь на чек-листи? 👇
🎯 "Я змінив тільки один рядок": Як AI допомагає робити Impact Analysis і не поламати прод
Привіт, екіпаж!
Класика: розробник каже "фікс дрібний, не бійся", ви робите швидкий смоук, а на проді відвалюється половина функціоналу. Чому? Бо "дрібний фікс" зачепив спільну бібліотеку.
Робити повну регресію на кожен чмих — немає часу. Не робити — страшно. Рішення: Impact Analysis (Аналіз впливу).
Замість того, щоб гадати, що зачепило зміни, запитайте у
Практичний кейс: Розробник змінив логіку валідації номера телефону в модулі реєстрації.
✨ Готовий промпт "Детектор зв'язків":
✅ Що підсвітить AI:
Висновок: За 30 секунд ви перетворюєте "сліпе" тестування на точковий снайперський вогонь. Ви тестуєте менше, але знаходите більше багів саме там, де вони ховаються.
А ви вірите розробникам на слово, коли вони кажуть "там нічого не зачепило"? 😉 👇
Привіт, екіпаж!
Класика: розробник каже "фікс дрібний, не бійся", ви робите швидкий смоук, а на проді відвалюється половина функціоналу. Чому? Бо "дрібний фікс" зачепив спільну бібліотеку.
Робити повну регресію на кожен чмих — немає часу. Не робити — страшно. Рішення: Impact Analysis (Аналіз впливу).
Замість того, щоб гадати, що зачепило зміни, запитайте у
Co-pilot'а. Він чудово будує логічні зв'язки.Практичний кейс: Розробник змінив логіку валідації номера телефону в модулі реєстрації.
✨ Готовий промпт "Детектор зв'язків":
Виступи в ролі Software Architect.
**Зміна:** Розробники оновили бібліотеку валідації телефонних номерів у модулі "Реєстрація".
**Архітектура системи:**
1. Реєстрація/Логін.
2. Особистий кабінет (редагування профілю).
3. Оформлення замовлення (ввід контактів).
4. Відновлення пароля через SMS.
5. Адмін-панель (пошук користувачів).
**Завдання:**
Проведи Impact Analysis. Назви 4 неочевидні місця в системі (крім самої реєстрації), які могли зламатися через цю зміну і які я обов'язково маю перевірити. Поясни ризик для кожного пункту.
✅ Що підсвітить AI:
Зона ризику1️⃣ : Оформлення замовлення.
🔹Ризик: Якщо там використовується та сама функція валідації, клієнти не зможуть купити товар.
Зона ризику2️⃣ : Відновлення пароля.
🔹Ризик: Якщо формат номера в базі змінився або валідація стала суворішою, старі користувачі не зможуть отримати SMS.
Зона ризику3️⃣ : Імпорт існуючих користувачів (Міграція).
🔹Ризик: Чи відповідають старі номери в базі новим правилам валідації?
Зона ризику4️⃣ : API інтеграції (напр., CRM).
🔹Ризик: Якщо ми передаємо телефон у зовнішню систему, чи не змінився формат даних?
Висновок: За 30 секунд ви перетворюєте "сліпе" тестування на точковий снайперський вогонь. Ви тестуєте менше, але знаходите більше багів саме там, де вони ховаються.
А ви вірите розробникам на слово, коли вони кажуть "там нічого не зачепило"? 😉 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
💾 SQL-магія: Як перевіряти Базу Даних рівня Senior, знаючи лише "SELECT"
Привіт, екіпаж!
Інтерфейс може брехати. API може кешувати старі дані. І тільки База Даних (БД) завжди каже правду. Але щоб дізнатися цю правду, часто треба зв'язати три таблиці, відфільтрувати за датою і згрупувати за статусом. 🤯
Якщо написання
Практичний кейс: Нам треба знайти користувачів, які зареєструвалися минулого тижня, зробили замовлення, але платіж так і не пройшов (status = 'failed').
Це задача на три таблиці:
✨ Готовий промпт "SQL-Гуру":
✅ Результат від AI:
Що ви отримали:
Висновок: Вам не треба бути експертом з SQL, щоб робити глибокі перевірки даних. Використовуйте AI як "перекладача" з людської мови на мову баз даних. Це супер-сила на будь-якій співбесіді і в роботі.
А ви пишете складні запити самі чи просите розробників? 👇
Привіт, екіпаж!
Інтерфейс може брехати. API може кешувати старі дані. І тільки База Даних (БД) завжди каже правду. Але щоб дізнатися цю правду, часто треба зв'язати три таблиці, відфільтрувати за датою і згрупувати за статусом. 🤯
Якщо написання
JOIN викликає у вас головний біль — делегуйте це AI. Ви описуєте задачу словами — він пише ідеальний SQL.Практичний кейс: Нам треба знайти користувачів, які зареєструвалися минулого тижня, зробили замовлення, але платіж так і не пройшов (status = 'failed').
Це задача на три таблиці:
Users, Orders, Payments.✨ Готовий промпт "SQL-Гуру":
Виступи в ролі Database Administrator (PostgreSQL).
У мене є така структура бази даних (схема):
1. **Users** (`id`, `email`, `created_at`)
2. **Orders** (`id`, `user_id`, `amount`, `order_date`)
3. **Payments** (`id`, `order_id`, `status` ['success', 'failed'])
**Завдання:**
Напиши мені SQL-запит, який знайде email-адреси користувачів, які:
1. Зареєструвалися за останні 7 днів.
2. Мають хоча б одне замовлення.
3. Але у цього замовлення статус платежу 'failed'.
Поясни, який тип JOIN ти використав і чому.
✅ Результат від AI:
SELECT u.email, o.id as order_id, p.status
FROM Users u
JOIN Orders o ON u.id = o.user_id
JOIN Payments p ON o.id = p.order_id
WHERE u.created_at >= NOW() - INTERVAL '7 days'
AND p.status = 'failed';
Що ви отримали:
1️⃣ Готовий робочий запит.2️⃣ Розуміння логіки (AI пояснить, що JOIN з'єднує таблиці за спільними ID).
Висновок: Вам не треба бути експертом з SQL, щоб робити глибокі перевірки даних. Використовуйте AI як "перекладача" з людської мови на мову баз даних. Це супер-сила на будь-якій співбесіді і в роботі.
А ви пишете складні запити самі чи просите розробників? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👏1
🔮 QA 2026: Кінець епохи "Клікателів"? Мій прогноз на майбутній рік
Привіт, екіпаж!
На календарі грудень 2025-го. Ми стоїмо на порозі нового року, і я відчуваю, що 2026 стане переломним. Якщо у 2024-25 ми просто "гралися" з AI-помічниками, то наступного року правила гри зміняться кардинально.
Ось мій прогноз на QA-тренди 2026 року:
Висновок: QA не помирає, він еволюціонує. Ми переходимо від ролі "тих, хто шукає помилки" до ролі "архітекторів якості", які керують армією ботів.
А які ваші ставки на 2026? Що помре, а що злетить? 👇
Привіт, екіпаж!
На календарі грудень 2025-го. Ми стоїмо на порозі нового року, і я відчуваю, що 2026 стане переломним. Якщо у 2024-25 ми просто "гралися" з AI-помічниками, то наступного року правила гри зміняться кардинально.
Ось мій прогноз на QA-тренди 2026 року:
1️⃣ Від Copilot до Autopilot (Agentic Testing) 🤖 Ми перестанемо писати кожен крок у коді автотестів.
🔹Зараз: Ми пишемо: driver.findElement(By.id("login")).click().
🔹У 2026: Ми даватимемо задачу AI-агенту: "Протестуй флоу покупки для нового юзера" — і агент сам визначить локатори, сам згенерує дані і сам пройде сценарій. 👉 Скіл: Вміння налаштовувати та контролювати AI-агентів.2️⃣ "Prompt Engineering" стає частиною QA 🗣 Кожен другий додаток тепер має вбудований LLM (чат-боти, генератори). Тестувати їх класичними методами ("очікуваний результат = фактичний") неможливо, бо вони кожен раз відповідають по-різному. 👉 Скіл: LLM Red Teaming (вміння змусити модель галюцинувати або видати токсичний контент) стане окремою професією.3️⃣ Смерть "Документації заради Документації" 📄 Писати довгі тест-плани вручну стане моветоном. Відео-запис екрану + голосовий коментар тестувальника будуть миттєво перетворюватися AI на баг-репорт, документацію та тест-кейс одночасно. 👉 Тренд: Більше часу на дослідження, менше — на оформлення папірців.4️⃣ Observability замість Regression 📊 Швидкість релізів така, що проганяти повну регресію перед кожним деплоєм — це розкіш. Фокус зміщується на Testing in Production. Головне питання не "чи є баги?", а "як швидко ми їх знайдемо на проді і відкотимося?". 👉 Скіл: Робота з Datadog, Grafana, Sentry, аналіз логів.5️⃣ QA перетворюється на QE (Quality Engineering) ⚙️ Кордон між SDET і Manual стирається остаточно. "Мануальщик", який не вміє запустити скрипт чи проаналізувати JSON, залишиться без роботи. Всі стають інженерами, озброєними AI-інструментами.
Висновок: QA не помирає, він еволюціонує. Ми переходимо від ролі "тих, хто шукає помилки" до ролі "архітекторів якості", які керують армією ботів.
А які ваші ставки на 2026? Що помре, а що злетить? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Як "покласти" власний сервер: Навантажувальне тестування для тих, хто боїться JMeter
Привіт, екіпаж!
Ми всі вміємо перевіряти, чи працює логін для одного користувача. А що станеться, якщо 1000 користувачів натиснуть "Увійти" одночасно в "Чорну п'ятницю"? 🤔
Зазвичай мануальні QA кажуть: "Ну, це робота перформанс-інженерів". Але бути тим, хто може сказати: "Хлопці, наш API вмирає при 50 запитах на секунду, я перевірив" — це зовсім інший рівень авторитету.
Вам не треба вчити монструозний
Практичний кейс: Треба перевірити API-ендпоінт
✨ Готовий промпт "DDOS-атака на мінімалках":
✅ Результат від AI (готовий файл script.js):
Як це використати?
Висновок: Ви не просто "клікаєте". Ви перевіряєте надійність системи. Це навичка, за яку платять найбільші гроші в QA.
А ви коли-небудь проводили навантажувальне тестування? Чи вірите, що "сервер витримає"? 👇
Привіт, екіпаж!
Ми всі вміємо перевіряти, чи працює логін для одного користувача. А що станеться, якщо 1000 користувачів натиснуть "Увійти" одночасно в "Чорну п'ятницю"? 🤔
Зазвичай мануальні QA кажуть: "Ну, це робота перформанс-інженерів". Але бути тим, хто може сказати: "Хлопці, наш API вмирає при 50 запитах на секунду, я перевірив" — це зовсім інший рівень авторитету.
Вам не треба вчити монструозний
JMeter. Використовуйте K6. Це сучасний інструмент, де тести — це просто JS-код. А код за вас напише AI.Практичний кейс: Треба перевірити API-ендпоінт
POST /api/login. Ми хочемо зімітувати 50 користувачів, які логіняться одночасно протягом 30 секунд.✨ Готовий промпт "DDOS-атака на мінімалках":
Виступи в ролі Performance QA Engineer.
Мені потрібен скрипт для навантажувального тестування інструментом **K6 (k6.io)**.
**Сценарій:**
1. Ендпоінт: `POST https://my-test-api.com/login`
2. Тіло запиту (JSON): `{ "email": "test@test.com", "password": "123" }`
3. Перевірка (Check): Статус відповіді має бути 200.
**Навантаження (Load Config):**
- Кількість віртуальних користувачів (VUs): 50
- Тривалість тесту: 30 секунд.
Напиши готовий JS-скрипт і поясни, як його запустити.
✅ Результат від AI (готовий файл script.js):
import http from 'k6/http';
import { check, sleep } from 'k6';
export let options = {
vus: 50, // 50 юзерів
duration: '30s', // протягом 30 секунд
};
export default function () {
let url = 'https://my-test-api.com/login';
let payload = JSON.stringify({
email: 'test@test.com',
password: '123',
});
let params = {
headers: { 'Content-Type': 'application/json' },
};
let res = http.post(url, payload, params);
// Перевіряємо, чи сервер вижив (200 OK)
check(res, {
'is status 200': (r) => r.status === 200,
});
sleep(1);
}
Як це використати?
1️⃣ Встановіть K6 (одна команда в терміналі).2️⃣ Запустіть: k6 run script.js.3️⃣ Дивіться в консоль: якщо ви побачите купу червоних хрестиків і час відповіді 5000ms — вітаю, ви знайшли "вузьке місце" (bottleneck)!
Висновок: Ви не просто "клікаєте". Ви перевіряєте надійність системи. Це навичка, за яку платять найбільші гроші в QA.
А ви коли-небудь проводили навантажувальне тестування? Чи вірите, що "сервер витримає"? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🔎 Ти — бог Jira: Як знаходити будь-які тікети без мук з фільтрами
Привіт, екіпаж!
Jira — це монстр. Знайти там потрібний тікет іноді важче, ніж знайти сам баг у коді. Звичайні фільтри ("My Open Issues") дуже обмежені. А щоб робити круті вибірки, треба знати JQL (Jira Query Language).
Хто з вас пам'ятає, як написати: "Покажи всі баги, де статус змінювався на 'Reopened' за останній тиждень"? Я теж не пам'ятаю. І не треба.
Делегуйте написання запитів AI, щоб створювати потужні дешборди та звіти.
Практичний кейс: Ви хочете знайти "загублені" баги: тікети з високим пріоритетом, які були створені понад 2 тижні тому, але досі не призначені на жодного розробника (Unassigned).
✨ Готовий промпт "Jira-хакер":
✅ Результат від AI:
Як це використати?
Висновок: З AI ви можете створювати будь-які вибірки: "баги, які поверталися з QA більше 3 разів", "задачі без опису", "тікети, оновлені мною вчора". Це робить вас людиною, яка контролює хаос у беклозі.
А ви користуєтесь Advanced Search в Jira? 👇
Привіт, екіпаж!
Jira — це монстр. Знайти там потрібний тікет іноді важче, ніж знайти сам баг у коді. Звичайні фільтри ("My Open Issues") дуже обмежені. А щоб робити круті вибірки, треба знати JQL (Jira Query Language).
Хто з вас пам'ятає, як написати: "Покажи всі баги, де статус змінювався на 'Reopened' за останній тиждень"? Я теж не пам'ятаю. І не треба.
Делегуйте написання запитів AI, щоб створювати потужні дешборди та звіти.
Практичний кейс: Ви хочете знайти "загублені" баги: тікети з високим пріоритетом, які були створені понад 2 тижні тому, але досі не призначені на жодного розробника (Unassigned).
✨ Готовий промпт "Jira-хакер":
Виступи в ролі Jira Administrator.
Напиши мені **JQL-запит** (Jira Query Language) для фільтрації задач.
**Критерії пошуку:**
1. Тип задачі: Bug.
2. Пріоритет: High або Critical.
3. Статус: НЕ "Done" і НЕ "Closed" (тобто відкриті).
4. Виконавець (Assignee): Unassigned (порожньо).
5. Дата створення: Більше ніж 14 днів тому.
Напиши тільки сам код запиту.
✅ Результат від AI:
issuetype = Bug AND priority in (High, Critical) AND status not in (Done, Closed) AND assignee is EMPTY AND created < -14d
Як це використати?
1️⃣ В Jira натисніть Filters -> Advanced Issue Search.2️⃣ Переключіться на режим JQL (справа кнопочка "Switch to JQL").3️⃣ Вставте цей рядок.4️⃣ Готово! Ви бачите список "проблемних" задач, про які всі забули.
Висновок: З AI ви можете створювати будь-які вибірки: "баги, які поверталися з QA більше 3 разів", "задачі без опису", "тікети, оновлені мною вчора". Це робить вас людиною, яка контролює хаос у беклозі.
А ви користуєтесь Advanced Search в Jira? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝1
🎭 Бекенд ще не готовий? Не біда! Піднімаємо Mock-сервер за хвилину
Привіт, екіпаж!
Класична ситуація: — "Ти протестував нову форму реєстрації?" — "Ні, чекаю на бекенд, API ще не працює". 😴
Раніше треба було ставити складні тули типу
Практичний кейс: Вам треба, щоб за адресою
✨ Готовий промпт "Fake Backend":
✅ Результат від AI (код server.py):
Як це використати?
Висновок: Ви можете симулювати будь-які помилки (500, 503), затримки мережі та дивні дані, не чекаючи, поки бекенд-розробник звільниться. Ви самі керуєте реальністю.
А ви використовуєте моки чи чекаєте на справжнє API? 👇
Привіт, екіпаж!
Класична ситуація: — "Ти протестував нову форму реєстрації?" — "Ні, чекаю на бекенд, API ще не працює". 😴
Стоп. Це позиція жертви обставин. Професійний QA може протестувати фронтенд, навіть якщо бекенду взагалі не існує. Для цього ми використовуємо Моки (Mocks).Раніше треба було ставити складні тули типу
WireMock. Сьогодні ваш Co-pilot напише вам "фейковий сервер" на Python за 30 секунд.Практичний кейс: Вам треба, щоб за адресою
http://localhost:5000/api/user повертався JSON з даними юзера.✨ Готовий промпт "Fake Backend":
Виступи в ролі Python-розробника.
Мені потрібен простий **Mock-сервер** на бібліотеці **Flask**.
Він має слухати порт 5000 і мати один ендпоінт:
`GET /api/user`
**Логіка:**
1. Якщо я передаю в хедері `Authorization: valid_token` — повертай 200 OK і JSON:
`{"id": 1, "name": "QA Ninja", "role": "admin"}`
2. Якщо токена немає або він інший — повертай 401 Unauthorized.
Напиши повний код скрипта, який я можу запустити одною командою.
✅ Результат від AI (код server.py):
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/api/user', methods=['GET'])
def get_user():
token = request.headers.get('Authorization')
if token == 'valid_token':
return jsonify({"id": 1, "name": "QA Ninja", "role": "admin"}), 200
else:
return jsonify({"error": "Unauthorized"}), 401
if __name__ == '__main__':
app.run(port=5000)
Як це використати?
1️⃣ Встановіть Flask (pip install flask).2️⃣ Запустіть файл (python server.py).3️⃣ Вкажіть своєму фронтенду (або в Postman) стукати на localhost:5000.
Висновок: Ви можете симулювати будь-які помилки (500, 503), затримки мережі та дивні дані, не чекаючи, поки бекенд-розробник звільниться. Ви самі керуєте реальністю.
А ви використовуєте моки чи чекаєте на справжнє API? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
📱 Android-магія: Керуємо телефоном з комп'ютера (ADB без болю)
Привіт, екіпаж!
Якщо ви тестуєте мобільні додатки, ви знаєте цей біль: треба ввести довгий тестовий імейл
Або треба зняти відео багу і скинути його на комп'ютер.
Профі використовують ADB (Android Debug Bridge). Це спосіб "наказувати" телефону через USB-кабель. Команди там специфічні, але вам не треба їх вчити. Ваш Co-pilot знає їх усі.
Практичний кейс №1: Введення тексту з клавіатури ПК Ви на екрані логіну. Треба ввести довгий текст.
✨ Промпт:
✅ Результат:
Практичний кейс №2: Запис відео екрану Треба записати баг. Кнопками телефону це незручно.
✨ Промпт:
✅ Результат від AI:
Що ще можна?
Висновок: ADB перетворює вас із "користувача телефону" на його "адміністратора". Ви робите рутинні речі в 10 разів швидше.
А ви використовуєте ADB чи все робите "пальчиками"? 👇
Привіт, екіпаж!
Якщо ви тестуєте мобільні додатки, ви знаєте цей біль: треба ввести довгий тестовий імейл
test_user_very_long_email@domain.com на віртуальній клавіатурі телефону. Ви помиляєтесь, стираєте, знову вводите... 😤Або треба зняти відео багу і скинути його на комп'ютер.
Профі використовують ADB (Android Debug Bridge). Це спосіб "наказувати" телефону через USB-кабель. Команди там специфічні, але вам не треба їх вчити. Ваш Co-pilot знає їх усі.
Практичний кейс №1: Введення тексту з клавіатури ПК Ви на екрані логіну. Треба ввести довгий текст.
✨ Промпт:
Напиши мені команду ADB, щоб ввести текст "my_complex_password_123!" у активне поле на підключеному Android-пристрої.
✅ Результат:
adb shell input text "my_complex_password_123!" (Вставляєте в термінал, тиснете Enter — і текст миттєво з'являється на телефоні!)Практичний кейс №2: Запис відео екрану Треба записати баг. Кнопками телефону це незручно.
✨ Промпт:
Мені треба записати відео з екрану телефону через ADB.
1. Запис має тривати, поки я його не зупиню (або фіксований час).
2. Зберегти файл як `bug.mp4` на телефоні.
3. Потім одразу перетягнути (pull) цей файл на мій комп'ютер у поточну папку.
Напиши послідовність команд.
✅ Результат від AI:
adb shell screenrecord /sdcard/bug.mp4
# (Тиснете Ctrl+C, щоб зупинити запис)
adb pull /sdcard/bug.mp4 .
Що ще можна?
🔹adb install app.apk (встановити білд за секунду).
🔹adb shell monkey ... (запустити "скажену мавпу", яка буде хаотично тицяти по екрану, шукаючи краші).
🔹adb logcat (витягнути логи помилки).
Висновок: ADB перетворює вас із "користувача телефону" на його "адміністратора". Ви робите рутинні речі в 10 разів швидше.
А ви використовуєте ADB чи все робите "пальчиками"? 👇
👍1
⏳ Машина часу для QA: Як протестувати "Новий Рік" посеред літа
Привіт, екіпаж!
Уявіть задачу: розробник зробив акцію "Чорна п'ятниця", яка активується автоматично 29 листопада. Надворі — грудень (або липень). Як перевірити, що банер зникне, коли акція закінчиться?
❌ Поганий спосіб: Просити адмінів перевести годинник на сервері (це покладе базу даних і токени).
❌ Довгий спосіб: Чекати реальної дати.
✅ Спосіб "QA Co-pilot": Підмінити час тільки у вашому браузері за допомогою простого скрипта.
Браузер бере час з вашої системи. Але ми можемо "обдурити" сайт, перевизначивши об'єкт
Практичний кейс: Я хочу, щоб сайт думав, що зараз 1 січня 2026 року, 00:00:01.
✨ Готовий промпт "Time Traveler":
✅ Результат від AI (копіюємо і вставляємо в Console):
Як це працює:
Висновок: Ви можете перевіряти прострочені сесії, майбутні акції та таймери зворотного відліку, не чіпаючи налаштування Windows/macOS. Ви керуєте часом!
А вам доводилося тестувати логіку, залежну від часу? Як викручувались? 👇
Привіт, екіпаж!
Уявіть задачу: розробник зробив акцію "Чорна п'ятниця", яка активується автоматично 29 листопада. Надворі — грудень (або липень). Як перевірити, що банер зникне, коли акція закінчиться?
❌ Поганий спосіб: Просити адмінів перевести годинник на сервері (це покладе базу даних і токени).
❌ Довгий спосіб: Чекати реальної дати.
✅ Спосіб "QA Co-pilot": Підмінити час тільки у вашому браузері за допомогою простого скрипта.
Браузер бере час з вашої системи. Але ми можемо "обдурити" сайт, перевизначивши об'єкт
Date. Писати цей код вручну складно, але AI робить це за секунду.Практичний кейс: Я хочу, щоб сайт думав, що зараз 1 січня 2026 року, 00:00:01.
✨ Готовий промпт "Time Traveler":
Виступи в ролі JavaScript Expert.
Напиши мені сніпет коду (script), який я можу вставити в консоль браузера (DevTools).
**Завдання:**
Перевизначити глобальний об'єкт `Date` так, щоб для сайту поточний час завжди був: **2026-01-01 00:00:01**.
При цьому скрипт має зберігати працездатність методів `Date` (щоб сайт не впав).
✅ Результат від AI (копіюємо і вставляємо в Console):
(function() {
var originalDate = Date;
var mockDate = new originalDate('2026-01-01T00:00:01');
Date = function(dt) {
if (dt) return new originalDate(dt);
return new originalDate(mockDate);
};
Date.now = function() { return mockDate.getTime(); };
Date.prototype = originalDate.prototype;
Date.parse = originalDate.parse;
Date.UTC = originalDate.UTC;
console.log("⏰ Час успішно підмінено на: " + mockDate);
})();Як це працює:
1️⃣ Відкриваєте сайт.2️⃣ Тиснете F12 -> Console.3️⃣ Вставляєте код -> Enter.4️⃣ Оновлюєте контент на сторінці (без перезавантаження всієї сторінки, якщо це SPA) або натискаєте на кнопки. Сайт "думає", що вже майбутнє.
Висновок: Ви можете перевіряти прострочені сесії, майбутні акції та таймери зворотного відліку, не чіпаючи налаштування Windows/macOS. Ви керуєте часом!
А вам доводилося тестувати логіку, залежну від часу? Як викручувались? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
🔗 "Copy XPath" — це зло. Генеруємо "безсмертні" локатори з AI
Привіт, екіпаж!
Ви вирішили написати свій перший автотест (або просто шукаєте елемент у консолі). Ви тиснете Copy selector у Chrome і отримуєте:
Це працює... до першого оновлення сайту. Як тільки розробник загорне кнопку в ще один div — ваш локатор зламається, а тест впаде.
Професіонали пишуть локатори, прив'язані до суті елемента, а не до його місця. Але вигадувати складні XPath/CSS буває ліньки.
Нехай це робить ваш Co-pilot.
Практичний кейс: У нас є кнопка "Купити", яка захована глибоко в DOM-дереві.
✨ Готовий промпт "Selector Architect":
✅ Що видасть AI:
Висновок: Замість того, щоб копіювати "сміття" з браузера, ви отримуєте елегантний код. Ваші тести стають стабільними, а ви витрачаєте менше часу на їх підтримку (
А ви пишете локатори самі чи довіряєте Chrome DevTools? 👇
Привіт, екіпаж!
Ви вирішили написати свій перший автотест (або просто шукаєте елемент у консолі). Ви тиснете Copy selector у Chrome і отримуєте:
#app > div:nth-child(2) > main > div.container > form > buttonЦе працює... до першого оновлення сайту. Як тільки розробник загорне кнопку в ще один div — ваш локатор зламається, а тест впаде.
Професіонали пишуть локатори, прив'язані до суті елемента, а не до його місця. Але вигадувати складні XPath/CSS буває ліньки.
Нехай це робить ваш Co-pilot.
Практичний кейс: У нас є кнопка "Купити", яка захована глибоко в DOM-дереві.
✨ Готовий промпт "Selector Architect":
Виступи в ролі Automation QA Engineer.
Ось HTML-код кнопки:
`<button class="btn btn-primary btn-lg" id="x-123-random" onclick="...">Buy Now</button>`
**Завдання:**
Напиши мені 3 варіанти **надійних (robust)** локаторів для цього елемента (CSS або XPath), які НЕ зламаються, якщо зміниться верстка навколо або динамічний ID.
Поясни, чому твої варіанти кращі за автозгенеровані.
✅ Що видасть AI:
Варіант1️⃣ (За текстом - XPath):
//button[contains(text(), 'Buy Now')] Чому краще: Працює, де б кнопка не знаходилась, доки на ній написано "Buy Now".
Варіант2️⃣ (За атрибутами - CSS): button[class*='btn-primary'] Чому краще: Ігнорує динамічний ID (x-123-random), фокусується на стилі.
Варіант3️⃣ (Комбінований - XPath):
//button[normalize-space()='Buy Now' and not(@disabled)] Чому краще: Знаходить тільки активну кнопку.
Висновок: Замість того, щоб копіювати "сміття" з браузера, ви отримуєте елегантний код. Ваші тести стають стабільними, а ви витрачаєте менше часу на їх підтримку (
maintenance).А ви пишете локатори самі чи довіряєте Chrome DevTools? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
🆘 "Що це за пекло в логах?": Читаємо Stack Trace як відкриту книгу
Привіт, екіпаж!
Ситуація: ви натискаєте кнопку, отримуєте
Звичайна реакція: "Ой, це для програмістів". Скріншот -> Jira -> "Сервер впав". Реакція профі: Скопіювати текст -> AI -> Отримати діагноз.
Ваш Co-pilot вміє читати стек-трейси будь-якою мовою (
Практичний кейс: Ви отримали помилку при оплаті товару. В логах помилка Java.
✨ Готовий промпт "Log Analyzer":
✅ Що відповість AI:
Висновок: Замість "У вас все зламалося", ви пишете в тікеті: "При оплаті падає NPE, якщо не передати номер карти. Схоже, немає валідації на рівні API". Розробники будуть носити вас на руках за таку конкретику.
А ви заглядаєте в логи чи одразу створюєте тікет? 👇
Привіт, екіпаж!
Ситуація: ви натискаєте кнопку, отримуєте
500 Internal Server Error. Ви йдете в логи (Kibana, Graylog або просто консоль), а там... матриця. Сотні рядків незрозумілого тексту: NullPointerException, at com.company.service..., Traceback (most recent call last)....Звичайна реакція: "Ой, це для програмістів". Скріншот -> Jira -> "Сервер впав". Реакція профі: Скопіювати текст -> AI -> Отримати діагноз.
Ваш Co-pilot вміє читати стек-трейси будь-якою мовою (
Java, Python, JS, C#) і перекладати їх на людську.Практичний кейс: Ви отримали помилку при оплаті товару. В логах помилка Java.
✨ Готовий промпт "Log Analyzer":
Виступи в ролі Senior Backend Developer.
Я QA, тестував оплату і отримав 500 помилку. Ось Stack Trace з логів.
**Завдання:**
1. Поясни простою мовою, що саме зламалося (NullPointer? TimeOut? TypeMismatch?).
2. Вкажи, в якому файлі і на якому рядку сталася біда.
3. Припусти, що могло стати причиною (наприклад, я передав порожнє поле, чи це помилка в коді?).
**Лог:**
`java.lang.NullPointerException: Cannot invoke "String.length()" because "cardNumber" is null
at com.shop.PaymentService.validate(PaymentService.java:42)
at com.shop.OrderController.pay(OrderController.java:15)...`
✅ Що відповість AI:
"Помилка NullPointerException. Проблема в файлі PaymentService.java на рядку 42. Суть: Система намагалася перевірити довжину номера картки (cardNumber), але ця змінна виявилася порожньою (null). Причина: Скоріше за все, в запиті не передався номер карти, або він загубився по дорозі від контролера до сервісу."
Висновок: Замість "У вас все зламалося", ви пишете в тікеті: "При оплаті падає NPE, якщо не передати номер карти. Схоже, немає валідації на рівні API". Розробники будуть носити вас на руках за таку конкретику.
А ви заглядаєте в логи чи одразу створюєте тікет? 👇
🔥1
🕸 GraphQL без сліз: Як писати складні запити, не знаючи синтаксису
Ви звикли до REST API: хочеш юзера — йдеш на
Але приходить розробник і каже: "Ми переїхали на GraphQL. Тепер у нас тільки один URL, а дані проси через Query". 🤯 Ви відкриваєте
Тут в гру вступає AI.
Практичний кейс: Вам треба отримати ім'я користувача, його імейл та список із останніх 5 замовлень (тільки ID та суму) для юзера з
✨ Готовий промпт "GraphQL Builder":
✅ Результат від AI:
Що з цим робити?
Бонус: Якщо запит не працює, скопіюйте помилку
Висновок:
А у вас на проєкті
Ви звикли до REST API: хочеш юзера — йдеш на
/users/1, хочеш його замовлення — йдеш на /users/1/orders. Все просто.Але приходить розробник і каже: "Ми переїхали на GraphQL. Тепер у нас тільки один URL, а дані проси через Query". 🤯 Ви відкриваєте
Postman, бачите пусте поле Body і не знаєте, що туди писати. { user { id } }? Чи query { getUser }?GraphQL дозволяє забрати всі потрібні дані одним запитом (і юзера, і його кота, і історію покупок). Але написати цей "багатоповерховий" запит без помилок — важко.Тут в гру вступає AI.
Практичний кейс: Вам треба отримати ім'я користувача, його імейл та список із останніх 5 замовлень (тільки ID та суму) для юзера з
ID 123.✨ Готовий промпт "GraphQL Builder":
Виступи в ролі Backend Developer.
Мені потрібно написати **GraphQL Query**.
**Моя мета:**
Отримати дані для користувача з `id: "123"`.
Поля, які мені потрібні:
1. З об'єкта User: `firstName`, `email`.
2. З вкладеного об'єкта Orders (мені потрібні тільки останні 5 штук): `id`, `totalAmount`, `status`.
Напиши правильний синтаксис запиту.
✅ Результат від AI:
query {
user(id: "123") {
firstName
email
orders(limit: 5) {
id
totalAmount
status
}
}
}Що з цим робити?
1️⃣ В Postman вибираєте тип GraphQL.2️⃣ Вставляєте цей код у поле Query.3️⃣ Тиснете Send.4️⃣ Отримуєте ідеальний JSON саме з тими даними, які просили. Жодних зайвих полів!
Бонус: Якщо запит не працює, скопіюйте помилку
(Field 'orders' doesn't exist on type 'User') в AI, і він скаже: "А, точно, у вашій схемі це поле називається userOrders, спробуй так...".Висновок:
GraphQL — це потужно, бо ви самі вирішуєте, що поверне сервер. З AI ви стаєте архітектором своїх даних за секунди.А у вас на проєкті
REST чи GraphQL? 👇Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🔥1
📁 Тобі потрібен PDF на 100 МБ? Не гугли! Генеруємо тестові файли за секунду
Привіт, екіпаж!
П'ятниця — час чистити папку "Завантаження". До речі, скільки у вас там лежить файлів типу
Ми постійно тестуємо аплоадери. І часто нам потрібні специфічні файли:
Замість того, щоб шукати ці файли по всьому інтернету, створіть їх самі за допомогою пари рядків коду від AI.
Практичний кейс №1: Файл точного розміру Вам треба перевірити ліміт завантаження (наприклад, макс 10 МБ). Треба створити файл розміром 10.5 МБ.
✨ Промпт:
✅ Результат (Python):
(Запускаєте — і у вас миттєво з'являється файл потрібного розміру!)
Практичний кейс №2: "Бите" зображення Треба перевірити, як сервер обробляє invalid files. Якщо просто перейменувати
✨ Промпт:
Висновок: Ви маєте повний контроль. Хочете
А у вас є "заповітна папочка" з тестовими файлами, чи ви кожен раз шукаєте нові? 👇
Привіт, екіпаж!
П'ятниця — час чистити папку "Завантаження". До речі, скільки у вас там лежить файлів типу
test.jpg, sample_big.pdf, broken_file.docx?Ми постійно тестуємо аплоадери. І часто нам потрібні специфічні файли:
1️⃣ Граничні значення: Файл рівно 25 МБ (ліміт), і файл 25 МБ + 1 байт.2️⃣ Биті файли: Щоб перевірити, чи не впаде сервер, якщо завантажити "сміття".
Замість того, щоб шукати ці файли по всьому інтернету, створіть їх самі за допомогою пари рядків коду від AI.
Практичний кейс №1: Файл точного розміру Вам треба перевірити ліміт завантаження (наприклад, макс 10 МБ). Треба створити файл розміром 10.5 МБ.
✨ Промпт:
Виступи в ролі Python Developer.
Напиши скрипт, який створює "пустий" (dummy) файл з розширенням `.txt`.
Вимоги:
1. Розмір файлу має бути рівно **10.5 Megabytes**.
2. Назва файлу: `test_oversize.txt`.
✅ Результат (Python):
with open("test_oversize.txt", "wb") as f:
f.seek(10 * 1024 * 1024 + 512 * 1024 - 1) # 10.5 MB
f.write(b"\0")(Запускаєте — і у вас миттєво з'являється файл потрібного розміру!)
Практичний кейс №2: "Бите" зображення Треба перевірити, як сервер обробляє invalid files. Якщо просто перейменувати
.txt у .jpg, розумний сервер це зрозуміє. Нам треба файл, який має заголовок картинки, але "сміття" всередині.✨ Промпт:
Напиши скрипт на Python, який створює файл `corrupted_image.jpg`.
1. Початок файлу (Header) має бути як у справжнього JPG (щоб обдурити просту валідацію).
2. Решта вмісту — випадкові байти (random noise).
3. Розмір — 1 МБ.
Висновок: Ви маєте повний контроль. Хочете
CSV на мільйон рядків? PDF з вірусом? Картинку з метаданими 2026 року? AI згенерує генератор для всього цього.А у вас є "заповітна папочка" з тестовими файлами, чи ви кожен раз шукаєте нові? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
🏴☠️ "Хакер на мінімалках": Як знайти дірку в безпеці сайту за 2 хвилини
Привіт, екіпаж!
Ми звикли перевіряти позитивні сценарії: "Ввів ім'я -> Зберіглося". А що, якщо замість імені ввести шматок JavaScript-коду? 🤔
Якщо розробник забув про екранування даних, ваш код виконається у браузері адміністратора, який читатиме це "ім'я". Це називається
Ви не мусите бути хакером з "Mr. Robot", щоб це перевірити. Вам просто потрібен правильний Payload (шкідливий рядок). Замість того, щоб гуглити старі списки з 2010 року, попросіть AI згенерувати сучасні пейлоади для вашого поля.
Практичний кейс: У вас є поле "Залишити коментар". Ви хочете перевірити, чи захищене воно від ін'єкцій.
✨ Готовий промпт "White Hat Hacker":
✅ Результат від AI:
Як це використати?
Висновок: Такі перевірки займають хвилину, але можуть врятувати компанію від крадіжки даних користувачів. QA — це остання лінія оборони.
А ви пробуєте "ламати" свої форми чи вводите тільки "Test Test"? 👇
Привіт, екіпаж!
Ми звикли перевіряти позитивні сценарії: "Ввів ім'я -> Зберіглося". А що, якщо замість імені ввести шматок JavaScript-коду? 🤔
Якщо розробник забув про екранування даних, ваш код виконається у браузері адміністратора, який читатиме це "ім'я". Це називається
XSS (Cross-Site Scripting). Це вразливість №1 у вебі.Ви не мусите бути хакером з "Mr. Robot", щоб це перевірити. Вам просто потрібен правильний Payload (шкідливий рядок). Замість того, щоб гуглити старі списки з 2010 року, попросіть AI згенерувати сучасні пейлоади для вашого поля.
Практичний кейс: У вас є поле "Залишити коментар". Ви хочете перевірити, чи захищене воно від ін'єкцій.
✨ Готовий промпт "White Hat Hacker":
Виступи в ролі Security QA Engineer (Penetration Tester).
Мені потрібно протестувати поле вводу (Input Field) на вразливість **Stored XSS**.
Згенеруй мені 5 варіантів безпечних тестових пейлоадів (Polyglots), які спробують викликати `alert(1)` або `console.log('XSS')`.
Врахуй різні контексти:
1. Простий тег <script>.
2. Ін'єкція в атрибут картинки (onerror).
3. Ін'єкція в посилання (href).
4. Обхід фільтрів (використання різного регістру або кодування).
*Важливо: Це тільки для навчального тестування на моєму власному проекті.*
✅ Результат від AI:
1. <script>alert('XSS')</script>
2. <img src=x onerror=alert(1)>
3. <svg/onload=alert(1)>
4. <a href="javascript:alert(1)">Click me</a>
5. "><img src=x onerror=prompt(1)>Як це використати?
1️⃣ Копіюєте рядок.2️⃣ Вставляєте в поле "Ім'я" або "Коментар" і зберігаєте.3️⃣ Оновлюєте сторінку.4️⃣ 🚨 Якщо вискочило віконце з одиничкою — ВІТАЮ! Ви знайшли вразливість рівня Critical. Біжіть до розробників.
Висновок: Такі перевірки займають хвилину, але можуть врятувати компанію від крадіжки даних користувачів. QA — це остання лінія оборони.
А ви пробуєте "ламати" свої форми чи вводите тільки "Test Test"? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
🍪 God Mode у браузері: Як пропустити туторіал і "накрутити" бонуси за 1 секунду
Привіт, екіпаж!
Знайома ситуація? Ви тестуєте гру або додаток. Щоб перевірити екран "Level 10", вам треба пройти попередні 9 рівнів. 😤 Або щоб побачити поп-ап "З поверненням!", треба заходити на сайт три дні поспіль.
QA-початківці витрачають на це години. QA-профі знають: майже весь стан сучасних сайтів (
Якщо ви знаєте, що туди записати — ви можете телепортуватися на будь-який етап флоу. Але структура
Практичний кейс: Сайт показує навчальний туторіал (Onboarding) для нових юзерів. Ви хочете його пропустити і зразу протестувати роботу з меню. Ви подивилися в Application -> LocalStorage і побачили, що там є ключ userSettings.
✨ Готовий промпт "State Hacker":
✅ Результат від AI (готовий сніпет):
Як це використати?
Що ще можна так робити?
Висновок: Браузер зберігає всі секрети у вас під носом. Навчіться їх редагувати, і ви зможете тестувати сценарії, до яких неможливо дійти звичайним кліканням.
А ви копаєтесь у
Привіт, екіпаж!
Знайома ситуація? Ви тестуєте гру або додаток. Щоб перевірити екран "Level 10", вам треба пройти попередні 9 рівнів. 😤 Або щоб побачити поп-ап "З поверненням!", треба заходити на сайт три дні поспіль.
QA-початківці витрачають на це години. QA-профі знають: майже весь стан сучасних сайтів (
Angular, React, Vue) зберігається у LocalStorage або Cookies.Якщо ви знаєте, що туди записати — ви можете телепортуватися на будь-який етап флоу. Але структура
JSON там буває складною. Не партеся. Нехай AI напише вам "ін'єкцію".Практичний кейс: Сайт показує навчальний туторіал (Onboarding) для нових юзерів. Ви хочете його пропустити і зразу протестувати роботу з меню. Ви подивилися в Application -> LocalStorage і побачили, що там є ключ userSettings.
✨ Готовий промпт "State Hacker":
Виступи в ролі Frontend Developer.
Я хочу маніпулювати **LocalStorage** в браузері для тестування.
Сайт зберігає налаштування в ключі `app_settings`.
**Завдання:**
Напиши мені JS-код для консолі, який:
1. Отримує поточний об'єкт з `app_settings` (якщо він є).
2. Змінює (або додає) в ньому параметри:
- `tutorialCompleted`: `true` (щоб пропустити навчання)
- `visitCount`: `10` (щоб вважатися досвідченим юзером)
- `theme`: `"dark"`
3. Зберігає оновлений об'єкт назад у LocalStorage.
4. Перезавантажує сторінку (`location.reload()`), щоб зміни вступили в силу.
✅ Результат від AI (готовий сніпет):
let data = JSON.parse(localStorage.getItem('app_settings') || '{}');
data.tutorialCompleted = true;
data.visitCount = 10;
data.theme = "dark";
localStorage.setItem('app_settings', JSON.stringify(data));
location.reload();Як це використати?
1️⃣ F12 -> Console.2️⃣ Вставили код -> Enter.3️⃣ Сторінка оновилась — і ви вже "старий" юзер без набридливих підказок, у темній темі.
Що ще можна так робити?
🔹A/B тести: Примусово ставити собі групу "B" у куках.
🔹E-commerce: Додавати в кошик товари, кнопки "Купити" для яких приховані на UI.
🔹Ігри: Міняти score: 100 на score: 999999.
Висновок: Браузер зберігає всі секрети у вас під носом. Навчіться їх редагувати, і ви зможете тестувати сценарії, до яких неможливо дійти звичайним кліканням.
А ви копаєтесь у
LocalStorage чи тестуєте тільки через UI? 👇Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
🔑 Хакерський набір: Як читати JWT-токени без сторонніх сайтів
Привіт, екіпаж!
Ви робите запит в
СТОП! 🛑 Вставляти робочі токени (особливо з продакшну) на чужі сайти — це грубе порушення безпеки.
Давайте зробимо свій безпечний декодер прямо в консолі браузера за допомогою AI.
Практичний кейс: Вам треба миттєво дізнатися, коли закінчується життя токена (поле
✨ Готовий промпт "JWT Decoder":
✅ Результат від AI (зберігаємо в Snippets):
Як це використати?
Висновок: Ви діагностуєте проблеми авторизації за секунди, не передаючи дані третім сторонам. Це професійний підхід до безпеки.
А ви користуєтесь онлайн-декодерами чи довіряєте тільки собі? 👇
Привіт, екіпаж!
Ви робите запит в
Postman, а у відповідь — 401 Unauthorized. Чому?1️⃣ Токен прострочився 5 хвилин тому?2️⃣ Вам дали токен з правами Read-Only, а ви намагаєтесь зробити POST?3️⃣ В токені зашитий не той User ID?
Токен (JWT) — це не абракадабра. Це просто Base64-кодований JSON. Його можна прочитати. Більшість йде на сайт jwt.io, вставляє туди токен і дивиться. СТОП! 🛑 Вставляти робочі токени (особливо з продакшну) на чужі сайти — це грубе порушення безпеки.
Давайте зробимо свій безпечний декодер прямо в консолі браузера за допомогою AI.
Практичний кейс: Вам треба миттєво дізнатися, коли закінчується життя токена (поле
exp) і яка там роль.✨ Готовий промпт "JWT Decoder":
Виступи в ролі Security Engineer.
Напиши мені JavaScript-функцію для консолі браузера, яка парсить **JWT токен**.
**Вимоги:**
1. Функція приймає рядок токена.
2. Вона декодує другу частину токена (Payload).
3. Виводить вміст у зручному вигляді (console.table або JSON).
4. **Важливо:** Якщо в токені є поля `exp` (expiration) або `iat` (issued at), перетвори їх з Unix Timestamp у читабельну дату (Human readable format).
Код має працювати без зовнішніх бібліотек.
✅ Результат від AI (зберігаємо в Snippets):
function parseJWT(token) {
try {
const base64Url = token.split('.')[1];
const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
const jsonPayload = decodeURIComponent(window.atob(base64).split('').map(function(c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
const data = JSON.parse(jsonPayload);
// Конвертуємо дати
['exp', 'iat', 'nbf'].forEach(field => {
if (data[field]) {
data[field + '_readable'] = new Date(data[field] * 1000).toLocaleString();
}
});
console.table(data);
} catch (e) {
console.error("Невалідний токен!", e);
}
}Як це використати?
1️⃣ Збережіть цей код у сніпети (ми вчили це вчора 😉) або просто вставте в консоль.2️⃣ Напишіть: parseJWT("ващ_довгий_токен_eyJ...").3️⃣ Дивіться в табличку!
🔹role: "admin" (Ок, права є).
🔹exp_readable: "15.12.2025, 10:00:00" (Ага! Він протух годину тому).
Висновок: Ви діагностуєте проблеми авторизації за секунди, не передаючи дані третім сторонам. Це професійний підхід до безпеки.
А ви користуєтесь онлайн-декодерами чи довіряєте тільки собі? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
👯♂️ Stage vs Prod: Як знайти реальні відмінності в JSON, ігноруючи "шум"
Привіт, екіпаж!
Часта задача на регресії: переконатися, що нова версія API повертає те саме, що й стара (за винятком нових фіч). Ви берете два JSON-и по 500 рядків, кидаєте в Text Compare... і все червоне. 😱
Чому? Бо змінилися
Очищати файли вручну? Ні. Попросіть AI зробити Smart Diff.
Практичний кейс: Порівнюємо відповідь сервера v1 (Prod) і v2 (Stage).
✨ Готовий промпт "JSON Detective":
✅ Що видасть AI: Замість тисячі червоних рядків він напише коротко:
⚠️ Знайдено критичні зміни:
Висновок: Ви за хвилину знаходите баги зворотної сумісності (Backward Compatibility), які могли б покласти мобільний додаток, і не витрачаєте час на перегляд таймстемпів.
А чим ви порівнюєте великі JSON-и? Очима чи тулами? 👇
Привіт, екіпаж!
Часта задача на регресії: переконатися, що нова версія API повертає те саме, що й стара (за винятком нових фіч). Ви берете два JSON-и по 500 рядків, кидаєте в Text Compare... і все червоне. 😱
Чому? Бо змінилися
id, createdAt, updatedAt, traceId. Це "динамічний шум". Вам же треба знати, чи не зникло поле price і чи не змінився тип даних у status.Очищати файли вручну? Ні. Попросіть AI зробити Smart Diff.
Практичний кейс: Порівнюємо відповідь сервера v1 (Prod) і v2 (Stage).
✨ Готовий промпт "JSON Detective":
Виступи в ролі QA Lead.
У мене є два JSON-об'єкти (Старий і Новий).
**Завдання:**
Порівняй їх структуру та дані, АЛЕ:
1. **Ігноруй** поля, які змінюються динамічно (унікальні ID, timestamp, dates, tokens).
2. Фокусуйся на змінах у **бізнес-логіці**:
- Чи зникли якісь поля?
- Чи змінилися типи даних (наприклад, string став int)?
- Чи змінилися значення констант (наприклад, status: "active" стало "ENABLED")?
Виведи тільки список значущих відмінностей.
**JSON 1 (Old):** ...
**JSON 2 (New):** ...
✅ Що видасть AI: Замість тисячі червоних рядків він напише коротко:
⚠️ Знайдено критичні зміни:
1️⃣ Поле user.fullName зникло в новій версії. Замість нього з'явилися firstName та lastName.2️⃣ Поле price змінило тип: було String ("100.00"), стало Number (100.00). Це може зламати старий фронтенд!3️⃣ Поле isAvailable змінилося з true на false, хоча товар той самий.
Висновок: Ви за хвилину знаходите баги зворотної сумісності (Backward Compatibility), які могли б покласти мобільний додаток, і не витрачаєте час на перегляд таймстемпів.
А чим ви порівнюєте великі JSON-и? Очима чи тулами? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
📊 Google Sheets на стероїдах: Як перевірити 100 посилань прямо в таблиці
Привіт, екіпаж!
Ситуація: вам дали таблицю, в якій 500 посилань на сторінки товарів. Завдання: "Перевір, які з них робочі (200 OK), а які биті (404 Not Found)".
❌ Варіант "Джуніор": Клікати на кожне посилання вручну. (Прощавай, вихідні).
❌ Варіант "Мідл": Експортувати в CSV, загнати в
✅ Варіант "Smart QA": Створити власну функцію в
Google Таблиці підтримують скрипти (
Писати скрипт вручну? Навіщо?
✨ Готовий промпт "Sheet Scripter":
✅ Результат від AI (код):
Як це використати?
Магія: Таблиця сама почне думати і за хвилину проставить коди: 200, 404, 500. Ви одразу бачите биті посилання. Фільтруєте по "404" — і баг-репорт готовий.
Висновок:
А ви використовуєте скрипти в таблицях чи тільки формули
Привіт, екіпаж!
Ситуація: вам дали таблицю, в якій 500 посилань на сторінки товарів. Завдання: "Перевір, які з них робочі (200 OK), а які биті (404 Not Found)".
❌ Варіант "Джуніор": Клікати на кожне посилання вручну. (Прощавай, вихідні).
❌ Варіант "Мідл": Експортувати в CSV, загнати в
JMeter/Postman Runner. (Довго налаштовувати).✅ Варіант "Smart QA": Створити власну функцію в
Google Sheets, яка зробить це сама.Google Таблиці підтримують скрипти (
Apps Script). Ви можете створити формулу =CHECK_STATUS(A1), яка піде в інтернет і поверне код відповіді.Писати скрипт вручну? Навіщо?
✨ Готовий промпт "Sheet Scripter":
Виступи в ролі Google Apps Script Developer.
Мені потрібен скрипт для Google Sheets.
Створи кастомну функцію `GET_STATUS(url)`.
**Логіка:**
1. Функція приймає URL.
2. Робить HTTP-запит (GET) за цією адресою.
3. Повертає HTTP Status Code (наприклад, 200, 404, 500).
4. Якщо виникає помилка (наприклад, DNS error) — повертає текст "Error".
5. Додай обробку кешу, щоб скрипт не спамив запитами при кожному чиху.
✅ Результат від AI (код):
function GET_STATUS(url) {
try {
var response = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
return response.getResponseCode();
} catch (error) {
return "Error: " + error.toString();
}
}Як це використати?
1️⃣ У Google Таблиці натисніть Extensions (Розширення) -> Apps Script.2️⃣ Видаліть все, що там є, і вставте код від AI.3️⃣ Натисніть "Зберегти" (іконка дискети).4️⃣ Поверніться в таблицю.5️⃣ У комірці B1 напишіть: =GET_STATUS(A1) (де в A1 ваше посилання).6️⃣ Протягніть формулу вниз на всі 500 рядків.
Магія: Таблиця сама почне думати і за хвилину проставить коди: 200, 404, 500. Ви одразу бачите биті посилання. Фільтруєте по "404" — і баг-репорт готовий.
Висновок:
Google Sheets — це не просто клітинки. Це повноцінна IDE, якщо знати, як попросити AI написати під неї код.А ви використовуєте скрипти в таблицях чи тільки формули
SUM? 👇Please open Telegram to view this post
VIEW IN TELEGRAM
❤4