QA Co-pilot
91 subscribers
266 photos
1 video
44 links
QA Co-pilot 🚀

Ваш другий пілот у світі тестування.

👨‍💻 Для кого: Для тестувальників-практиків, які хочуть рости.
🎯 Про що: Делегуємо рутину нейромережам, прискорюємо роботу та звільняємо час на головне.
Чого тут немає: Нудної теорії та води.
Download Telegram
🧩 "Зворотній інжиніринг": Як тестувати складні поля без болю (Regex + AI)

Привіт, екіпаж!

Зізнавайтесь, хто любить Regular Expressions? Ніхто? Я так і думав. 😄 Для QA це часто чорна магія. Розробники використовують їх для валідації пошти, паролів, IBAN-ів та номерів телефонів.

Ситуація: Розробник каже: "Я оновив правила для паролів. Тепер вони мають відповідати цьому виразу: ^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z]).{8,}$".

Що робить звичайний QA? Сидить і годину підбирає пароль, який пройде. Що робить Smart QA? Просить AI зробити Reverse Regex — тобто згенерувати тестові дані НА ОСНОВІ формули.

Це економить купу часу на Positive/Negative тестуванні.

Практичний кейс: Вам дали складний формат для поля "ID замовлення": ORD-[рік]-[4 літери]-[хеш]. Regex: ^ORD-\d{4}-[A-Z]{4}-[a-z0-9]{6}$.

Вам треба 5 валідних прикладів і 5 невалідних для негативних тестів.

Готовий промпт "Regex Cracker":
Виступи в ролі QA Engineer.

Ось Regular Expression, який використовується для валідації поля:
`^ORD-\d{4}-[A-Z]{4}-[a-z0-9]{6}$`

**Завдання:**
1. **Поясни**, що саме вимагає цей вираз (простою мовою).
2. Згенеруй **5 валідних прикладів** (Positive Test Data), які пройдуть перевірку.
3. Згенеруй **5 невалідних прикладів** (Negative Test Data) і поясни, чому саме кожен з них має впасти (наприклад, "неправильний рік", "малі літери замість великих", "закороткий хеш").


Результат від AI:

Пояснення: Рядок має починатися з "ORD-", потім 4 цифри, дефіс, 4 великі літери, дефіс, 6 символів (цифри або малі літери).

Валідні (Pass):

1️⃣ORD-2024-TEST-abc123

2️⃣ORD-1999-ABCD-xy99zz ...

Невалідні (Fail):

1️⃣ORD-24-TEST-abc123 (Рік має 2 цифри замість 4)

2️⃣ord-2024-TEST-abc123 (Префікс з малої літери)

3️⃣ORD-2024-test-abc123 (Блок літер має бути UPPERCASE) ...


Бонус-хак: Це працює і у зворотний бік. Якщо вам треба знайти/відфільтрувати дані в логах (наприклад, всі помилки 500 або всі емейли), попросіть AI: "Напиши мені Regex для пошуку всіх IP-адрес у тексті" — і вставте результат у Ctrl+F (в режимі Regex) у своєму редакторі логів.

Висновок: Regex — це не страшно, якщо ви не пишете його руками. Використовуйте AI як перекладач з "мови символів" на "людську" і назад.

А як ви перевіряєте валідацію? Методом "тику" чи читаєте код? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🚀 З Network Tab у Load Test за 30 секунд: Магія cURL

Привіт, екіпаж!

Ви знайшли ендпоінт, який "тупить". Сторінка завантажується 5 секунд. Ви хочете перевірити: це разова акція чи сервер ляже, якщо зайде 50 юзерів одночасно?

Писати скрипт для навантажувального тестування (JMeter, k6, Locust) з нуля — це довго. Треба прописувати всі хедери, куки, токени... 🤯

Але у вас вже є все необхідне в браузері. Chrome дозволяє скопіювати будь-який запит як cURL. А AI вміє перетворювати cURL на код.

Практичний кейс: Перетворити один ручний запит на скрипт для навантажувального тестування інструментом k6 (сучасний аналог JMeter, де скрипти пишуться на JS).

Крок 1: У Chrome DevTools (Network) клікаємо правою кнопкою по "тугому" запиту -> Copy -> Copy as cURL (bash).

Крок 2 (Магія AI):

Готовий промпт "Load Test Generator":
Виступи в ролі Performance QA Engineer.

Ось cURL запит, який я скопіював з браузера:
`curl 'https://api.mysite.com/order' -H 'Authorization: Bearer xyz' ...` (вставте свій cURL сюди)

**Завдання:**
Перетвори цей запит на скрипт для інструменту навантажувального тестування **k6**.
1. Налаштуй сценарій (options): 50 віртуальних юзерів (VUs) протягом 30 секунд.
2. Додай перевірку (check): статус відповіді має бути 200.
3. Додай перевірку: час відповіді < 500ms.


Результат від AI (готовий файл script.js):
import http from 'k6/http';
import { check, sleep } from 'k6';

export let options = {
vus: 50, // 50 користувачів
duration: '30s', // півхвилини стресу
};

export default function () {
let url = 'https://api.mysite.com/order';
let params = {
headers: {
'Authorization': 'Bearer xyz',
'Content-Type': 'application/json',
// AI сам підставив всі ваші куки!
},
};

let res = http.get(url, params);

check(res, {
'status is 200': (r) => r.status === 200,
'time < 500ms': (r) => r.timings.duration < 500,
});

sleep(1);
}


Що далі? Вам навіть не треба встановлювати k6, якщо ліньки. Просто запустіть цей код, і ви побачите, як ваш сервер почувається під навантаженням.

Бонус: Так само можна просити: "Перетвори цей cURL на Python Request код" або "Перетвори це на Cypress тест".

Висновок: Не пишіть бойлерплейт-код руками. Браузер + AI роблять 90% роботи за вас. Ви лише натискаєте "Пуск".

А ви вже пробували k6 чи все ще сидите на JMeter? 👇
👍1
💾 "Ти ж знаєш SQL?": Як писати складні JOIN-и, не розуміючи їх

Привіт, екіпаж!

Класика жанру: на співбесіді питають про SQL, ви кажете "впевнений середній рівень". А потім на роботі: "Слухай, перевір в базі, чи не загубилися транзакції за вчора для юзерів з Києва". 🤯

І ти сидиш і думаєш: тут треба INNER JOIN чи LEFT JOIN? А як зв'язати таблицю Юзерів з таблицею Оплат? Більшість QA в цей момент йде до розробника: "Напиши мені селект, пліз".

Не треба. Ваш Co-pilot — це найкращий DBA (Database Administrator). Вам навіть не треба знати точні назви колонок, достатньо описати логіку.

Практичний кейс: Треба знайти баг у програмі лояльності. У нас є 3 таблиці:
1️⃣users (клієнти).

2️⃣orders (замовлення).

3️⃣bonuses (нараховані бали).


Завдання: Знайти юзерів, які купили на суму більше $100, але запису в таблиці bonuses для цього замовлення немає (або балів 0).

Готовий промпт "SQL Master":
Виступи в ролі Database Architect.

Мені потрібен SQL-запит (PostgreSQL/MySQL).

**Структура моїх таблиць (приблизна):**
1. `users` (id, email, city)
2. `orders` (id, user_id, amount_usd, created_at)
3. `bonuses` (order_id, points)

**Завдання:**
Напиши запит, який виведе email користувачів та ID замовлень, де:
1. Сума замовлення (`amount_usd`) більше 100.
2. АЛЕ в таблиці `bonuses` для цього замовлення або немає запису, або `points` дорівнює 0.
3. Використовуй правильні JOIN-и.


Результат від AI:
SELECT u.email, o.id as order_id, o.amount_usd
FROM users u
JOIN orders o ON u.id = o.user_id
LEFT JOIN bonuses b ON o.id = b.order_id
WHERE o.amount_usd > 100
AND (b.points IS NULL OR b.points = 0);


Чому це круто?
1️⃣AI сам зрозумів, що треба LEFT JOIN (щоб знайти тих, у кого немає запису в бонусах).

2️⃣Він правильно розставив умови WHERE.

3️⃣Ви просто копіюєте це в DBeaver чи pgAdmin і бачите список багованих замовлень.


Висновок: Вам не треба зубрити синтаксис складних об'єднань. Вам треба розуміти суть даних. А код напише AI. Тепер ви можете перевіряти бекенд на рівні бази, а не тільки через UI.

А ви пишете складні запити самі чи просите допомоги у девів? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
З Різдвом, друзі!

Бажаю, щоб сьогодні єдиним складним завданням було обрати фільм на вечір, а єдиним "дедлайном" — встигнути з’їсти найсмачніше зі столу. Нехай у ваших домах буде тепло, світло і затишно. Мирного неба та смачної куті! 💫

Дякую, що ви тут. Світлого свята! Обіймаю
👍32
🐘 "Білий ящик" для QA: Тестуємо ETL та міграції, не читаючи код

Привіт, екіпаж!

Під минулим постом про SQL підписник поділився крутим кейсом: використання AI для тестування Glue Jobs (скриптів міграції даних). Це наштовхнуло мене на важливу тему.

Часто розробники пишуть складні ETL-скрипти (на Python або Scala), які переливають дані з однієї бази в іншу з якоюсь логікою. Наприклад: "Якщо юзер з України і чек > $1000, то перенеси його в таблицю VIP_Users і додай прапорець is_premium"

Як це протестувати?
Варіант "Хаос": Просто дивитися в таблицю і сподіватися, що все ок.

Варіант "Хардкор": Вчити Python/PySpark, щоб зрозуміти код розробника.

Варіант "Smart QA": Скопіювати шматок коду розробника в AI і попросити написати SQL-запит, який перевірить цю логіку.


Ми робимо Reverse Engineering: перетворюємо логіку коду на перевірочний запит.

Практичний кейс: Розробник написав код міграції (Python):
# Логіка в Glue Job
if user.country == 'UA' and user.total_spent > 1000:
target_table.status = 'VIP'
target_table.discount = 10
else:
target_table.status = 'Standard'


Вам треба перевірити, чи не "загубилися" дані і чи правильно присвоївся статус.

Готовий промпт "ETL Validator":
Виступи в ролі Data QA Engineer.

Ось шматок коду (Python/Business Logic), який використовується для міграції даних:
`if user.country == 'UA' and user.total_spent > 1000: target_table.status = 'VIP' ...`

**Завдання:**
Напиши мені **SQL-запит**, який знайде ПОМИЛКИ в міграції (тобто рядки, де логіка НЕ спрацювала).

Мені треба знайти користувачів, які:
1. Мають країну 'UA' і витрати > 1000.
2. АЛЕ в новій таблиці `target_table` їх статус НЕ 'VIP' або знижка НЕ 10.


Результат від AI:
SELECT * FROM source_users s
JOIN target_table t ON s.id = t.user_id
WHERE s.country = 'UA'
AND s.total_spent > 1000
AND (t.status != 'VIP' OR t.discount != 10);


Чому це геніально? Цей запит має повернути 0 рядків. Якщо він щось повернув — значить, міграція пройшла криво. Ви знайшли баг, навіть не розбираючись, як працює Spark чи Glue під капотом.

Дякую підписникам за ідеї в коментарях! Ви — драйвер цього каналу. 🚀

А вам доводиться тестувати переливання даних чи тільки UI? 👇
1👍1
📸 "Не переписуй руками": Як AI пише тести прямо зі скріншотів

Привіт, екіпаж!

Наш підписник у коментарях (дякую за ідею! 🔥) поділився крутим кейсом: він робить скріншот схеми бази даних (ERD), кидає його в AI і просить написати SQL-запити для перевірки структури таблиць.

Це називається Multimodal AI. Сучасні моделі (GPT-4o, Claude 3.5 Sonnet, Gemini 1.5 Pro) мають "очі". Вони розуміють стрілочки, зв'язки та дрібний текст на схемах краще, ніж деякі джуни після безсонної ночі. 😄

Давайте розберемо, як це економить час.

Практичний кейс №1: Бази Даних (Backend) Вам дали картинку зі схемою БД (ER-діаграму) і сказали: "Перевір, чи розробники правильно створили таблиці". Вручну перевіряти типи полів (VARCHAR(255) чи TEXT?) — нудно.

Що робимо:
1️⃣Робимо скріншот діаграми.

2️⃣Кидаємо в чат з AI.


Промпт:
Ось схема БД. Напиши SQL-запит (для PostgreSQL), який перевірить системні таблиці information_schema і підтвердить, що: - Всі таблиці існують. - Типи даних у колонках відповідають схемі. - Primary Key та Foreign Key налаштовані правильно.


Результат: Ви отримуєте готовий скрипт, який за секунду видає звіт: "Таблиця Users: ОК. Таблиця Orders: Помилка, поле price має тип INT, а на схемі DECIMAL".

Практичний кейс №2: UI/UX (Frontend) Вам дали макет форми логіну у Figma (або просто картинку). Треба написати автотест.

Що робимо:

Кидаємо скріншот макета в AI.

Промпт:
Ти QA Automation Engineer. Ось макет форми. Напиши автотест на Playwright/Cypress. Використовуй патерн Page Object. Підбери найкращі селектори для полів 'Email', 'Password' і кнопки 'Login' (припусти, що ID логічні).


Результат: AI бачить кнопку "Log In", розуміє, що це Submit, і пише код: await page.locator('input[type="email"]').fill('user@test.com');

Висновок: Ваша клавіатура відпочиває. Ви перетворюєте візуальну документацію на працюючий код за один крок. Якщо ви досі переписуєте назви колонок з картинки вручну — спробуйте кинути картинку в чат.

А ви вже користуєтесь розпізнаванням зображень у роботі? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Досить провалювати співбесіди через стрес 🤯

Пам'ятаєте, я казав, що готую для вас дещо особливе? Так от, робота кипить. Я вирішив створити інструмент, який стане вашим особистим тренажерним залом перед реальними оферами.

Ми робимо не просто "квіз-бота" з кнопками А/Б/В. Ми робимо повноцінний AI-симулятор співбесіди (Telegram Mini App).

Уявіть: ви обираєте роль (Junior, Middle, Senior), настрій інтерв'юера — і починається живий діалог.

🤔 "А чому просто не піти в ChatGPT?" — запитаєте ви. Справедливе питання. Але ось у чому різниця:

1️⃣ Вам не треба бути Prompt Engineer. У звичайному чаті треба писати простирадла тексту: "Уяви, що ти Senior QA, запитай мене про SQL...". У нашому боті це вже зашито в архітектуру. Ми налаштували AI так, щоб він поводився як реальний, прискіпливий техлід, а не як "добрий робот".

2️⃣ Контекст і Пам'ять. Звичайний чат "забуває" ваші слабкі місця. Наш бот пам'ятатиме: "Ага, минулого разу ти посипався на API. Давай перевіримо, чи ти підтягнув тему".

3️⃣ Зручний інтерфейс. Це не просто переписка текстом. Це зручний додаток всередині Telegram з вибором тем, прогрес-барами та красивими звітами після інтерв'ю.


Ставте 🔥, якщо хочете першими отримати доступ до бета-тесту!
🔥6
⛓️ Припини копіювати токени! Налаштовуємо авто-авторизацію в Postman

Привіт, екіпаж!

Зізнавайтесь, скільки разів на день ви робите Ctrl+C на токені логіну і Ctrl+V в інший запит? Якщо більше нуля — ви робите роботу робота.

Postman вміє сам брати дані з відповіді і зберігати їх у змінні. Але писати ці скрипти на JS руками ніхто не хоче. "Ай, швидше скопіювати", — думаєте ви. Ні, не швидше. Один раз попросіть AI написати скрипт, і забудьте про ручну авторизацію назавжди.

Практичний кейс: Ми хочемо, щоб після успішного логіну токен автоматично зберігався у змінну {{bearer_token}}, яку використовують всі інші запити в колекції.

Готовий промпт "Postman Automator":
Виступи в ролі QA Automation Engineer.

Напиши мені скрипт для вкладки **Tests** у Postman.

**Логіка:**
1. Перевір, що статус відповіді 200.
2. Розпарси JSON-відповідь.
3. Знайди там поле `accessToken` (або просто `token`).
4. Збережи його значення в **Environment Variable** з назвою `my_token`.
5. Виведи в консоль повідомлення "Token updated!".


Результат від AI (копіюємо в Tests запиту /login):
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});

var jsonData = pm.response.json();

// Перевіряємо, чи прийшов токен
if (jsonData.token) {
pm.environment.set("my_token", jsonData.token);
console.log("🔑 Token updated successfully!");
} else {
console.error(" Token not found in response");
}


Що робити далі?

1️⃣У запиті Login вставте цей код у вкладку Tests.

2️⃣У всіх інших запитах (наприклад, Get Profile) у вкладці Auth виберіть Type: Bearer Token.

3️⃣У полі Token напишіть: {{my_token}}.


Магія: Тепер ви просто тиснете Send на логіні, і всі 50 запитів у вашій колекції автоматично отримують свіжий ключ. Ви більше ніколи не побачите 401 помилку через "старий токен".

А ви все ще копіюєте руками чи вже автоматизували? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🎭 "Fake it till you make it": Тестуємо фронтенд без бекенду

Привіт, екіпаж!

Знайома історія? Фронтендер каже: "Я зверстав сторінку Профілю, але дані не вантажаться, бо бекендери ще пиляють ендпоінт /api/profile". QA: "Ну ок, чекаю". 😴

Не треба чекати! Ви можете перевірити верстку, лоадери та обробку даних вже зараз. Нам потрібно просто підсунути браузеру Mock (фейкову відповідь) замість реального запиту.

Можна ставити Charles або Fiddler, але це довго. Простіше попросити AI написати скрипт, який "перехопить" функцію fetch у браузері і віддасть ваші дані.

Практичний кейс: Сайт робить запит на /api/user-stats. Сервера немає. Ми хочемо, щоб сайт отримав: { "level": 80, "xp": 9999, "rank": "Legend" } і показав це на екрані.

Готовий промпт "Network Interceptor":
Виступи в ролі JavaScript Developer.

Напиши мені скрипт для консолі браузера, який мокає (перехоплює) `window.fetch`.

**Логіка:**
1. Збережи оригінальний `fetch`.
2. Якщо URL запиту містить `/api/user-stats` — не роби реальний запит до сервера.
3. Замість цього поверни штучну відповідь (Response object) зі статусом 200 і таким JSON:
`{ "level": 80, "xp": 9999, "rank": "Legend" }`
4. Всі інші запити пропускай як зазвичай (return originalFetch).
5. Виведи в консоль повідомлення: "⚡️ Запит перехоплено!".


Результат від AI (Monkey Patching):
const originalFetch = window.fetch;

window.fetch = async (...args) => {
const [url] = args;

// Якщо бачимо потрібний URL
if (url.toString().includes('/api/user-stats')) {
console.log(`⚡️ Перехоплено запит до: ${url}`);

// Повертаємо фейк
return new Response(JSON.stringify({
level: 80,
xp: 9999,
rank: "Legend"
}), {
status: 200,
headers: { 'Content-Type': 'application/json' }
});
}

// Всі інші запити йдуть на реальний сервер
return originalFetch(...args);
};

console.log(" Mock Server активовано прямо в браузері!");


Як це використати?
1️⃣Відкриваєте сторінку.

2️⃣Вставляєте код у консоль -> Enter.

3️⃣Оновлюєте частину інтерфейсу (натискаєте кнопку "Оновити профіль").

4️⃣Магія: Браузер думає, що отримав дані від сервера, і малює вам "80 level".


Що це дає? Ви можете протестувати, як виглядає інтерфейс із дуже довгими іменами, з нульовим балансом або з помилкою 500 (просто змініть status: 200 на 500 у коді). Ви не залежите від бекенду.

А ви чекаєте на API чи мокаєте дані самі? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
🎄 Release Notes: 2026 is ready to deploy!

Loading... ██████████ 99%

Друзі, сьогодні ми закриваємо велику задачу під назвою "2025". Я хочу побажати вам найголовнішого — стабільності. Щоб "тривоги" були тільки навчальними, щоб небо було чистим, а новини — нудними і добрими.

Нехай у вашому домі завжди буде світло (і інтернет!), а поруч — ті, з ким хочеться ділити цей момент. Відкладіть сьогодні ноутбуки, забудьте про дедлайни. Ця ніч — для вас.

Бережіть себе. Мирного Нового року! 💙💛
2👍1
З Новим Роком, екіпажж🎄🎉
🍾2
🆘 "Я все зламав": Як AI рятує від ганьби в Git

Привіт, екіпаж! З поверненням у стрій! 🎄💻

Перший робочий день року — це завжди ризик. Забули, на якій гілці працювали? Випадково закоммітили в main? Чи просто бачите страшний напис Detached HEAD?

Раніше ми йшли на StackOverflow і копіювали команди навмання (і іноді вбивали репозиторій остаточно). Тепер у нас є AI. Він ідеально розуміє контекст Git і може дати "Хірургічно точний" набір команд, щоб полагодити все, нічого не видаливши.

Практичний кейс: Ви випадково зробили 3 коміти прямо в гілку main (або master), а треба було в окрему фіча-гілку. Ви хочете перенести ці зміни в нову гілку, а main повернути як було, не втративши код.

Готовий промпт "Git Doctor":
Виступи в ролі Senior DevOps Engineer.

У мене ситуація в Git:
Я знаходжусь у гілці `main`.
Я зробив 3 коміти (локально), які не мав робити тут.
Мені потрібно:
1. Перенести ці 3 коміти в нову гілку `feature/login-test`.
2. Повернути локальну гілку `main` до стану, як на віддаленому сервері (`origin/main`), щоб вона була чиста.
3. Не втратити мої зміни.

Напиши мені послідовність команд для терміналу з поясненням, що робить кожна (безпечний варіант).


Результат від AI:
# 1. Створюємо нову гілку з поточного місця (разом з твоїми змінами)
git branch feature/login-test

# 2. "Жорстко" скидаємо main до стану сервера
# (Не бійся, твої зміни вже збережені в новій гілці вище)
git reset --hard origin/main

# 3. Перемикаємось на нову гілку, щоб продовжити роботу
git checkout feature/login-test


Ще круті кейси:

🌪 "Що це за помилка?": Просто скопіюйте вихлоп терміналу (наприклад, конфлікт мерджу) в AI і запитайте: "Як це вирішити, залишаючи ВХІДНІ (incoming) зміни?"

📜 "Гарний лог": Попросіть AI: "Напиши команду для git log, яка показує дерево комітів гарно, з кольорами і в один рядок". (Він видасть супер-аліас типу git log --graph --oneline...).

🕵️‍♂️ "Хто це зробив?": Якщо треба знайти, в якому коміті з'явився баг, AI допоможе провести сесію git bisect.


Висновок: Не бійтеся червоного тексту в терміналі. AI знає Git краще за нас. Замість паніки — просто опишіть проблему людською мовою.

А яка у вас найстрашніша історія з Git? Видаляли прод? 👇
📱 Магія ADB: Як керувати Андроїдом з терміналу (і не чекати, поки сяде батарея)

Привіт, екіпаж!

Якщо ви тестуєте мобільні додатки (Android), то ваш головний інструмент — це не тільки палець, а й ADB (Android Debug Bridge). Але запам'ятати всі команди неможливо. adb shell am broadcast -a... — хто це взагалі придумав? 🤯

Замість того, щоб гуглити "android command to change locale", попросіть AI згенерувати команду під вашу задачу. Це перетворює ручне тестування на магію.

Практичний кейс №1: Перевірка "Low Battery" Ваш додаток має зберігати дані, коли телефон сідає.

Метод "Хатіко": Увімкнути ліхтарик і чекати 2 години, поки заряд впаде до 5%.
Метод "ADB + AI": Примусово сказати телефону, що в нього 5%.

Промпт:
Виступи в ролі Android Developer.

Напиши мені **ADB-команду**, яка емулює стан батареї на підключеному девайсі.
Мені треба:
1. Відключити зарядку (щоб телефон думав, що він на батареї).
2. Встановити рівень заряду 5%.


Результат (вставляємо в термінал):
adb shell dumpsys battery set ac 0
adb shell dumpsys battery set level 5

(Щоб повернути все назад: adb shell dumpsys battery reset).

Практичний кейс №2: Швидке введення тексту Треба протестувати поле коментаря на 500 символів з емодзі та спецсимволами.

Метод "Дятел": Тицяти в клавіатуру телефону 5 хвилин.
Метод "ADB + AI": Відправити текст через кабель.

Промпт:
Напиши ADB-команду, щоб ввести текст у активне поле на телефоні.
Текст: "Test_User_Comment_🚀_123"
Врахуй, що пробіли треба екранувати.


Результат:
adb shell input text "Test_User_Comment_🚀_123"


Бонус: Monkey Testing 🐵 Хочете перевірити, чи крашнеться додаток, якщо хаотично тицяти скрізь? AI підкаже команду для запуску "шаленої мавпи": adb shell monkey -p com.your.package.name -v 500 (зробить 500 випадкових кліків за секунду).

Висновок: Термінал — це пульт керування реальністю вашого тестового девайса. Ви контролюєте мережу, батарею, локацію і введення. А AI пише складний синтаксис за вас.

А ви використовуєте ADB чи тестуєте тільки руками? 👇
🐳 "У мене працює": Як підняти тестовий стенд за 1 хвилину (Docker + AI)

Привіт, екіпаж!

Скільки часу ви витрачаєте на налаштування оточення? Вам треба перевірити баг в базі даних.

1️⃣Качаєте PostgreSQL.

2️⃣Встановлюєте.

3️⃣Конфлікт портів. 🤯

4️⃣Качаєте клієнт (DBeaver).

5️⃣Налаштовуєте доступи...


Минула година. А можна було зробити це за 1 хвилину, не засмічуючи систему. Рішення — Docker Compose. Це файл-інструкція, яка каже: "Підніми мені базу і адмінку до неї в ізольованих контейнерах".

Писати YAML-файли руками — нудно і легко помилитися у відступах. Просимо AI.

Практичний кейс: Вам потрібна PostgreSQL (база) і pgAdmin (зручний веб-інтерфейс, щоб дивитися в базу), щоб попрактикуватися в SQL або перевірити дані.

Готовий промпт "DevOps Assistant":
Виступи в ролі DevOps Engineer.

Мені потрібен файл `docker-compose.yml` для локального тестування.

**Вимоги:**
1. Підніми сервіс **PostgreSQL** (остання версія).
- Пароль: `root`
- Порт: `5432`
2. Підніми сервіс **pgAdmin** (веб-інтерфейс для бази).
- Порт: `8080` (щоб я заходив через браузер).
- Налаштуй залежність (depends_on), щоб адмінка стартувала після бази.
3. Додай коментарі, як мені це запустити.


Результат від AI (зберігаємо як docker-compose.yml):
version: '3.8'

services:
db:
image: postgres:latest
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: root
ports:
- "5432:5432"

pgadmin:
image: dpage/pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: admin@admin.com
PGADMIN_DEFAULT_PASSWORD: root
ports:
- "8080:80"
depends_on:
- db


Як запустити?
1️⃣Встановіть Docker Desktop (якщо ще немає).

2️⃣Створіть папку, покладіть туди цей файл.

3️⃣Відкрийте термінал у цій папці і напишіть: docker-compose up -d.


Магія: За 30 секунд у вас за адресою localhost:8080 відкриється повноцінна адмінка, підключена до свіжої бази даних. Потестували -> написали docker-compose down -> все зникло, система чиста.

Висновок: Не бійтеся Докера. Це найкращий друг QA для відтворення багів в "стерильних" умовах. А AI напише конфіги за вас.

А ви користуєтесь контейнерами чи ставите все прямо на Windows/Mac? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🌱 Порожня база — погані тести: Генеруємо 100 юзерів за секунду

Привіт, екіпаж!

Тепер у вас є локальна база даних. Але є одна проблема: вона порожня. Тестувати пагінацію, пошук або фільтри на 2-х користувачах ("test1" і "test2") — це шлях до багів на проді.

Вам потрібні Big Data. Вам потрібні імена з апострофами (O'Connor), довгі адреси і дивні емейли. Раніше ми писали скрипти на Python або шукали сервіси типу Mockaroo (які платні для великих об'ємів). Зараз AI пише SQL-скрипти для наповнення (Seeding) краще за будь-який генератор.

Практичний кейс: Нам треба заповнити таблицю users 50-ма записами. Але не просто "User1, User2", а реалістичними даними з "капосними" випадками (Edge Cases).

Готовий промпт "Data Generator":
Виступи в ролі QA Engineer & Database Expert.

Мені потрібен SQL-скрипт (PostgreSQL) для наповнення таблиці `users`.
Структура: `id`, `name`, `email`, `bio`, `created_at`.

**Завдання:**
Згенеруй 20 записів `INSERT INTO`, які покривають такі кейси:
1. 10 звичайних користувачів (реальні імена).
2. 5 користувачів з "проблемними" іменами (кирилиця, ієрогліфи, емодзі, апострофи як у "O'Neil").
3. 2 користувачі з дуже довгим текстом у `bio` (boundary testing).
4. 3 користувачі з SQL-injection payload в імені (наприклад, `Robert'); DROP TABLE users;--`).


Результат від AI (копіюємо в DBeaver/pgAdmin):
INSERT INTO users (name, email, bio, created_at) VALUES
('John Doe', 'john@example.com', 'Just a regular guy', NOW()),
('Alice Smith', 'alice@test.com', 'Love coffee', NOW()),
-- Edge Cases:
('Renée O''Connor', 'renee@test.fr', 'Name with accents and quotes', NOW()),
('李小龙', 'bruce@lee.cn', 'Chinese characters', NOW()),
('User 🚀 With Emoji', 'rocket@space.com', 'Testing UTF-8', NOW()),
-- Security Test:
('Robert''); DROP TABLE students;--', 'hacker@evil.com', 'Trying to break DB', NOW());


Чому це важливо?

1️⃣Економія часу: Ви отримали дані за 10 секунд.

2️⃣Безпека: Ви одразу перевірите, чи екранує бекенд спецсимволи (якщо після вставки останнього юзера ваша таблиця зникне — вітаю, ви знайшли Critical Bug 😅).

3️⃣Реалізм: Ви побачите, чи не ламається верстка від довгих імен.


Лайфхак: Попросіть AI згенерувати дані у форматі CSV, якщо ваш додаток підтримує імпорт файлів. "Згенеруй CSV з 100 товарами для інтернет-магазину".

А чим ви генеруєте тестові дані? Руками чи скриптами? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
4
🚀 "Чому білд червоний?": Читаємо CI/CD пайплайни без страху

Привіт, екіпаж!

Класична ситуація: ви запустили автотести локально — все літає. ✈️ Запушили код, запустився пайплайн (в GitLab/GitHub/Jenkins) — все впало.
💥 Перша думка: "Це інфраструктура винна, піду до DevOps-а".

Стоп. DevOps зайнятий. У 90% випадків відповідь лежить у файлі конфігурації (наприклад, .gitlab-ci.yml або .github/workflows/main.yml). Але читати цей YAML — це як розшифровувати стародавні руни.

Не мучтеся. Скопіюйте файл в AI і спитайте: "Що тут відбувається?".

Практичний кейс: Тести падають в пайплайні, хоча локально проходять. Ви дивитесь у файл конфігурації і не розумієте, в якому оточенні запускаються ваші тести.

Готовий промпт "CI/CD Decoder":
Виступи в ролі DevOps Engineer.

Ось мій файл конфігурації CI/CD (GitHub Actions / GitLab CI):
[Вставте код, наприклад:
`jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node
uses: actions/setup-node@v2
with:
node-version: '14'
- run: npm install
- run: npm test`]

**Завдання:**
1. Поясни простою мовою крок за кроком: що робить цей пайплайн?
2. Я бачу помилку в логах, пов'язану з версією бібліотеки. Чи бачиш ти в цьому конфізі потенційну причину (наприклад, застаріла версія Node/Java/Python)?
3. Як мені запустити це саме оточення локально через Docker, щоб відтворити помилку?


Результат від AI:

🔍 Аналіз: Твій пайплайн використовує node-version: '14'. Це дуже стара версія (вже End-of-Life). Якщо локально у тебе стоїть Node 18 або 20, то тести проходять, бо ти використовуєш нові фічі JS. А на сервері (CI) — стара версія, тому воно падає.

🛠 Рішення: Зміни рядок на node-version: '20' або онови свій локальний Node до 14, щоб побачити помилку.


Що це дає? Ви не просто кажете "Не працює". Ви пишете в чат команди: "Хлопці, у нас в пайплайні Node 14, а в package.json ми вже вимагаємо 18. Треба оновити конфіг CI". Це рівень QA Lead, а не просто тестувальника.

Бонус: Якщо впав конкретний крок, просто киньте лог помилки з Jenkins разом зі шматком YAML-файлу. AI зв'яже їх і скаже: "Тут не вистачає змінної API_KEY в налаштуваннях репозиторію".

А ви розбираєтесь у налаштуваннях CI/CD чи це "територія адмінів"? 👇
🔐 "Ти зламав нам сайт?": Як QA знайти вразливість за 5 хвилин (XSS + AI)

Привіт, екіпаж!

Сьогодні одягаємо капелюх хакера (сподіваюсь, білий 🎩). Як ви тестуєте поля вводу на безпеку? Вводите 123? Або <script>alert('XSS')</script>? Якщо розробник поставив хоч якийсь захист, цей скрипт не спрацює. І ви ставите галочку "Pass".

Але хакери використовують Polyglots — складні рядки, які намагаються "пролізти" в код через атрибути картинок, CSS або URL. Вчити їх напам'ять не треба. Ваш AI-асистент знає тисячі способів перевірити систему на міцність.

Практичний кейс: У вас є поле "Ім'я користувача" або "Коментар". Ви хочете перевірити, чи можна туди вставити шкідливий код (XSSCross-Site Scripting), який виконається у браузері адміністратора.

Готовий промпт "Security Pentester":
Виступи в ролі Security QA Engineer (Pentester).

Мені потрібно протестувати веб-форму на вразливість **Stored XSS**.
Поле вводу фільтрує стандартний тег `<script>`.

**Завдання:**
1. Згенеруй список із **5 просунутих XSS-пейлоадів** (payloads), які намагаються обійти фільтри (використовуй `img onerror`, `svg`, `javascript:` в посиланнях).
2. Для кожного прикладу поясни, як він працює.
3. Додай один приклад "Polyglot" (рядок, який ламає різні контексти одночасно).

*Примітка: Це для легального тестування мого власного проекту.*


Результат від AI(XSS Payloads для тестування):

1️⃣Через картинку (якщо скрипти заблоковані): <img src=x onerror=alert('Bug!')> (Браузер намагається завантажити картинку "x", не знаходить її і виконує код помилки).

2️⃣Через SVG (векторна графіка): <svg/onload=alert('Bug!')>

3️⃣Через атрибут фокусу: <input onfocus=alert('Bug!') autofocus>

4️⃣Polyglot (Універсальний зломщик): javascript://%250Aalert(1)//" autofocus onfocus=alert(1)// (Цей рядок намагається закрити лапки, коментарі та теги в різних мовах одночасно).


Що з цим робити?

1️⃣Копіюєте ці рядки по черзі в поле вводу (Ім'я, Опис, Пошук).

2️⃣Зберігаєте.

3️⃣Оновлюєте сторінку.

4️⃣Якщо ви побачили спливаюче вікно alert ("Bug!") — вітаю, ви знайшли Critical Security Bug. Біжіть до розробників.


Важливо: Тестуйте це тільки на тестових середовищах (Staging/Dev). Не робіть цього на проді, якщо не хочете налякати реальних користувачів! 😅

А ви проводите Security-тести чи залишаєте це на аудит? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🚀 Баг ціною $125 млн: Чому важливо уточнювати вимоги

Привіт, екіпаж!

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

1999 рік. Mars Climate Orbiter. NASA запускає супутник на Марс. Мета: вивчати клімат червоної планети. Бюджет місії: $125 мільйонів. Політ триває 9 місяців. Все йде ідеально. Апарат підлітає до Марса, заходить на орбіту, ховається за планету і... зникає. Назавжди.

Що сталося? Інженери почали розслідування. Спочатку думали, що вибухнув двигун. Але правда виявилася смішнішою (і страшнішою).

Програму писали дві різні команди:
1️⃣Компанія Lockheed Martin (Колорадо) писала софт для розрахунку тяги двигунів. Вони використовували англійську систему мір (фунт-сила).

2️⃣Команда NASA (Каліфорнія) писала софт для навігації. Вони використовували метричну систему (Ньютони).


Коли одна система передала іншій число "тяга = 100", NASA подумали, що це 100 Ньютонів. А це було 100 фунтів. Різниця в 4.45 рази.

Через це двигуни відпрацювали занадто сильно (або занадто слабко), і супутник замість орбіти увійшов в атмосферу Марса на наднизькій висоті й просто згорів.

Мораль для QA: Цей баг неможливо було знайти в Unit-тестах. Кожен модуль окремо працював ідеально! Помилка була на рівні Integration Testing і Вимог. Ніхто не спитав: "А в яких одиницях ми передаємо дані?".

Тож наступного разу, коли ви питаєте аналітика: "А це поле в секундах чи в мілісекундах?" і він закочує очі — згадайте Mars Orbiter. Ви не зануда. Ви економите компанії мільйони.

А які найдорожчі (або найсмішніші) баги пропускали ви? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Екіпаж...Бережіть себе!!! Та пам'ятайте про укриття!!!🫡🇺🇦
🇬🇧 "Я тестую мовчки": Чому англійська важливіша за Python

Привіт, екіпаж!

Часто чую від новачків: "У мене слабка англійська (А2), але я добре знаю теорію тестування. Чи знайду я роботу?" Відповідь жорстка: Знайти можна, але ви дуже швидко впертеся в "скляну стелю".

Давайте чесно: код пишеться англійською. Документація — англійською. Найдорожчі замовники — не тут. Але головна проблема не в цьому. Проблема в якості баг-репортів.

Ось чому "My English is bed" вбиває вашу кар'єру:
1️⃣ "Broken English" = "Broken Product". Коли ви пишете "Button is not work", американський розробник не розуміє контексту. Вона не натискається? Вона зникла? Вона видає помилку? QA — це комунікатор. Якщо ваша мова неточна, ви створюєте хаос.

Bad: "Page looks bad."

Good: "Misaligned elements on the landing page."

2️⃣ Google та AI розуміють англійську краще. Ми багато говоримо про ChatGPT. Спробуйте попросити його написати складний SQL-запит українською і англійською. Результат англійською буде точнішим. Гуглити помилку NullPointerException українською — це шлях в нікуди. Всі відповіді на StackOverflow — англійською.

3️⃣ Зарплатний коефіцієнт (x2) Це проста математика.

🔹QA на локальному ринку (без мови): $800 - $1500.

🔹QA, який може вийти на кол з клієнтом із Техасу і пояснити, чому ми не релизимось сьогодні: $2500 - $4000+. Знання мови продає ваші технічні скіли дорожче.


🚀 Як прокачати "QA English", не читаючи Шекспіра?

Вам не треба вчити поезію. Вам треба Technical English.

1️⃣2️⃣Перемкніть все: Телефон, Windows, Jira, Telegram — тільки English. Звикніть до слова Settings, а не Налаштування.

2️⃣Словник синонімів: Забудьте слово Bad.

🔹Замість Bad → Incorrect, Misaligned, Corrupted, Invalid.

🔹Замість Error → Exception, Crash, Timeout, Failure.

3️⃣Читайте чужі тікети: Якщо на проекті є Senior з гарною мовою — читайте, як він описує баги. Крадіть його фрази. "Ensure that...", "Observe the behavior...", "Intermittent issue...".

4️⃣Дивіться індусів: Серйозно. Туторіали на YouTube з акцентом — це найкраща підготовка до дейлі-мітингів в IT. 😄


Висновок: Можна бути генієм автоматизації, але якщо ти не можеш пояснити менеджеру, чому тест впав — ти залишаєшся "хлопцем, що пише код", а не інженером.

А який у вас рівень? A2 ("London is the capital"), B2 (впевнено брешу в резюме) чи C1 (дивлюсь серіали без субтитрів)? 👇
2
"Я протестую це... після кави": Прокрастинація в QA і як її хакнути

Привіт, екіпаж!

Зізнавайтесь: у вас буває таке, що ви відкриваєте Jira, бачите задачу "Full Regression Test", і раптом вам терміново треба полити вазон, оновити драйвери на мишку і почитати новини про ШІ?

Це QA-прокрастинація. Вона виникає не тому, що ви ліниві. А тому, що наш мозок боїться об'ємних і нудних задач. Регресія здається величезною горою. Написання тест-плану з нуля — це "страх білого аркуша".

Як обманути свій мозок і почати працювати? Ловіть 3 перевірені методи.

1️⃣Метод "Тільки один тест" (The 5-minute Rule) Найважче — це почати. Домовтеся з собою: "Я не буду робити всю регресію. Я перевірю ТІЛЬКИ логін. Це займе 2 хвилини. І все, потім піду пити каву". Магія: Як тільки ви зробили перший крок, дофамін пішов, і ви "на автоматі" перевіряєте наступні 20 кейсів. Головне — дозволити собі зупинитися (хоча ви, швидше за все, не захочете).

2️⃣Метод "AI-милиці" (Cure for Blank Page) Треба написати документацію або автотест, а ви тупите в монітор? Страшно починати з нуля. Попросіть AI: "Накидай мені структуру тест-плану для модуля Кошик" або "Напиши скелет тесту на Playwright". Коли у вас перед очима є "чернетка" (навіть крива), мозку набагато легше почати її редагувати, ніж створювати нове. Редагування — це не страшно.

3️⃣Метод "Помідор в навушниках" QA потребує фокусу. Але месенджери постійно "блямкають". Увімкніть таймер на 25 хвилин (техніка Pomodoro). Але додайте умову: на ці 25 хвилин ви — сапер. Якщо ви відволічетесь на телефон — "вибух" (починай спочатку). Це гейміфікує процес.


Висновок: Прокрастинація — це захисна реакція на нудьгу або складність. Не сваріть себе. Просто знизьте поріг входу. Зробіть найменшу дію, яка стосується роботи.

А що ви робите, коли "не йде"? Гортаєте рілси чи змушуєте себе силою? 👇
4