🔥 Як "покласти" власний сервер: Навантажувальне тестування для тих, хто боїться 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
🤖 Google Sheets + Telegram: Як відправляти баги розробникам автоматично
Привіт, екіпаж!
Бачу, вам сподобалась тема скриптів у таблицях. Давайте підвищимо градус крутості. 🔥
Класична рутина:
Нащо перемикатися? Давайте зробимо так: ви обираєте в клітинці статус
Це називається
Що нам треба:
✨ Готовий промпт "Auto-Reporter":
✅ Результат від AI (код для Extensions -> Apps Script):
Як це виглядає в житті? Ви просто працюєте з таблицею: "Pass, Pass, Pass, FAILED". І у вашого ліда в кишені вібрує телефон: "🚨 Баг детектед! Тест: Логін через Facebook".
Висновок: Ви економите час на комунікації і виглядаєте як техно-маг.
Хто спробує налаштувати собі "тривожну кнопку"? 👇
Привіт, екіпаж!
Бачу, вам сподобалась тема скриптів у таблицях. Давайте підвищимо градус крутості. 🔥
Класична рутина:
1️⃣ Проходиш тест-кейс у таблиці.2️⃣ Знаходиш баг.3️⃣ Відкриваєш Telegram/Slack.4️⃣ Пишеш: "Там тест №45 впав, гляньте".5️⃣ Повертаєшся в таблицю.
Нащо перемикатися? Давайте зробимо так: ви обираєте в клітинці статус
FAILED, і Таблиця САМА пише в Telegram розробнику.Це називається
Webhooks, і це простіше, ніж здається.Що нам треба:
1️⃣ Створити бота в Telegram через @BotFather (це займе 10 секунд, отримаєте токен).2️⃣ Дізнатися ID чату, куди слати повідомлення (можна через бот @userinfobot).3️⃣ Попросити AI написати магію.
✨ Готовий промпт "Auto-Reporter":
Виступи в ролі Google Apps Script Developer.
Напиши скрипт для Google Sheets, який відправляє повідомлення в Telegram.
**Логіка:**
1. Скрипт має спрацьовувати автоматично при редагуванні комірки (`onEdit`).
2. Якщо в колонці **C** (Статус) з'являється значення **"FAILED"**:
- Бери назву тесту з колонки **A** (того ж рядка).
- Бери посилання/дані з колонки **B**.
- Відправляй повідомлення в мій Telegram Bot.
**Дані:**
Token: "ВАШ_ТОКЕН"
Chat ID: "ВАШ_CHAT_ID"
Повідомлення має бути з емодзі, наприклад: "🚨 Баг знайдено! Тест: [Назва]. Дані: [Лінк]".
✅ Результат від AI (код для Extensions -> Apps Script):
function onEdit(e) {
var sheet = e.source.getActiveSheet();
var range = e.range;
// Якщо змінили колонку 3 (C) і написали "FAILED"
if (range.getColumn() == 3 && e.value == "FAILED") {
var row = range.getRow();
var testName = sheet.getRange(row, 1).getValue(); // Колонка A
var testLink = sheet.getRange(row, 2).getValue(); // Колонка B
sendTelegram(testName, testLink);
}
}
function sendTelegram(test, link) {
var token = "ВСТАВТЕ_ТУТ_ТОКЕН_ВІД_BOTFATHER";
var chatId = "ВСТАВТЕ_ТУТ_ВАШ_ID";
var message = "🚨 *Баг детекед!*\n\n📌 *Тест:* " + test + "\n🔗 *Де:* " + link;
var url = "https://api.telegram.org/bot" + token + "/sendMessage";
var payload = {
"chat_id": chatId,
"text": message,
"parse_mode": "Markdown"
};
var options = {
"method": "post",
"payload": payload
};
UrlFetchApp.fetch(url, options);
}Як це виглядає в житті? Ви просто працюєте з таблицею: "Pass, Pass, Pass, FAILED". І у вашого ліда в кишені вібрує телефон: "🚨 Баг детектед! Тест: Логін через Facebook".
Висновок: Ви економите час на комунікації і виглядаєте як техно-маг.
Google Sheets може керувати зовнішнім світом, якщо дати йому правильний код.Хто спробує налаштувати собі "тривожну кнопку"? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
🔖 Кнопка "Зробити добре": Створюємо власні інструменти в панелі закладок
Привіт, екіпаж!
Ми вже говорили про Chrome Snippets, але у них є мінус: треба натиснути F12, перейти в Sources, знайти скрипт, натиснути Run... Забагато кліків для частої дії.
Хочете мати кнопку прямо під адресним рядком, яка робить магію одним кліком? Це називається
Що можна зробити одним кліком:
Коли ви заводите баг, вам треба вказати: URL, розширення екрану, User Agent, час. Давайте зробимо кнопку, яка копіює це в буфер обміну автоматично.
✨ Готовий промпт "Bookmarklet Creator":
✅ Результат від AI (готовий код):
Як встановити:
Як це працює? Тепер, коли ви знаходите баг:
Висновок: Ви можете створити закладки для будь-чого: "Заповнити форму логіну", "Увімкнути червоні границі блоків", "Показати приховані поля". Ви самі будуєте свій інтерфейс браузера.
А у вас є корисні букмарклети чи тільки посилання на YouTube? 👇
Привіт, екіпаж!
Ми вже говорили про Chrome Snippets, але у них є мінус: треба натиснути F12, перейти в Sources, знайти скрипт, натиснути Run... Забагато кліків для частої дії.
Хочете мати кнопку прямо під адресним рядком, яка робить магію одним кліком? Це називається
Bookmarklet. Це шматок JS-коду, збережений замість URL.Що можна зробити одним кліком:
1️⃣ Очистити всі Cookies та LocalStorage для цього сайту.2️⃣ Підсвітити всі елементи без атрибута alt (для тестування доступності).3️⃣ Мій улюблений кейс: Скопіювати технічну інфо для баг-репорту.
Коли ви заводите баг, вам треба вказати: URL, розширення екрану, User Agent, час. Давайте зробимо кнопку, яка копіює це в буфер обміну автоматично.
✨ Готовий промпт "Bookmarklet Creator":
Виступи в ролі Frontend Developer.
Напиши мені JavaScript-код для **Bookmarklet**.
Код має бути обгорнутий у `javascript:(function(){ ... })()`, щоб я міг зберегти його як закладку.
**Функціонал:**
1. Збери дані про поточну сторінку:
- URL (`window.location.href`)
- Роздільна здатність екрану (`screen.width` x `screen.height`)
- Розмір вікна (`window.innerWidth` x `window.innerHeight`)
- User Agent (`navigator.userAgent`)
2. Сформуй красивий текст для Jira (markdown або plain text).
3. Скопіюй цей текст у буфер обміну (Clipboard API).
4. Покажи `alert("Інфо скопійовано!")`.
✅ Результат від AI (готовий код):
javascript:(function(){
const info = `
*URL:* ${window.location.href}
*Screen:* ${screen.width}x${screen.height}
*Viewport:* ${window.innerWidth}x${window.innerHeight}
*UA:* ${navigator.userAgent}
`;
navigator.clipboard.writeText(info.trim()).then(() => {
alert('✅ Інфо для баг-репорту скопійовано!');
}).catch(err => {
console.error('Failed to copy: ', err);
alert('❌ Помилка копіювання (перевір права доступу)');
});
})();Як встановити:
1️⃣ Натисніть Ctrl+D (додати закладку) на будь-якому сайті.2️⃣ Назвіть її "🐞 Copy Bug Info".3️⃣ Натисніть кнопку "Більше" (More) або "Змінити" (Edit).4️⃣ У поле URL видаліть посилання і вставте код, який дав AI (починаючи з javascript:).5️⃣ Збережіть.
Як це працює? Тепер, коли ви знаходите баг:
1️⃣ Тиснете на закладку "🐞 Copy Bug Info" на панелі.2️⃣ Бачите повідомлення "Скопійовано!".3️⃣ Йдете в Jira і тиснете Ctrl+V. Всі технічні дані вставляються ідеально.
Висновок: Ви можете створити закладки для будь-чого: "Заповнити форму логіну", "Увімкнути червоні границі блоків", "Показати приховані поля". Ви самі будуєте свій інтерфейс браузера.
А у вас є корисні букмарклети чи тільки посилання на YouTube? 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
🧩 "Зворотній інжиніринг": Як тестувати складні поля без болю (Regex + AI)
Привіт, екіпаж!
Зізнавайтесь, хто любить Regular Expressions? Ніхто? Я так і думав. 😄 Для QA це часто чорна магія. Розробники використовують їх для валідації пошти, паролів, IBAN-ів та номерів телефонів.
Ситуація: Розробник каже: "Я оновив правила для паролів. Тепер вони мають відповідати цьому виразу:
Що робить звичайний QA? Сидить і годину підбирає пароль, який пройде. Що робить Smart QA? Просить AI зробити Reverse Regex — тобто згенерувати тестові дані НА ОСНОВІ формули.
Це економить купу часу на Positive/Negative тестуванні.
Практичний кейс: Вам дали складний формат для поля "ID замовлення":
Вам треба 5 валідних прикладів і 5 невалідних для негативних тестів.
✨ Готовий промпт "Regex Cracker":
✅ Результат від AI:
Бонус-хак: Це працює і у зворотний бік. Якщо вам треба знайти/відфільтрувати дані в логах (наприклад, всі помилки 500 або всі емейли), попросіть AI: "Напиши мені Regex для пошуку всіх IP-адрес у тексті" — і вставте результат у Ctrl+F (в режимі Regex) у своєму редакторі логів.
Висновок:
А як ви перевіряєте валідацію? Методом "тику" чи читаєте код? 👇
Привіт, екіпаж!
Зізнавайтесь, хто любить 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 юзерів одночасно?
Писати скрипт для навантажувального тестування (
Але у вас вже є все необхідне в браузері. Chrome дозволяє скопіювати будь-який запит як cURL. А AI вміє перетворювати cURL на код.
Практичний кейс: Перетворити один ручний запит на скрипт для навантажувального тестування інструментом k6 (сучасний аналог
Крок 1: У Chrome DevTools (Network) клікаємо правою кнопкою по "тугому" запиту -> Copy -> Copy as cURL (bash).
Крок 2 (Магія AI):
✨ Готовий промпт "Load Test Generator":
✅ Результат від AI (готовий файл script.js):
Що далі? Вам навіть не треба встановлювати k6, якщо ліньки. Просто запустіть цей код, і ви побачите, як ваш сервер почувається під навантаженням.
Бонус: Так само можна просити: "Перетвори цей cURL на Python Request код" або "Перетвори це на Cypress тест".
Висновок: Не пишіть бойлерплейт-код руками. Браузер + AI роблять 90% роботи за вас. Ви лише натискаєте "Пуск".
А ви вже пробували k6 чи все ще сидите на JMeter? 👇
Привіт, екіпаж!
Ви знайшли ендпоінт, який "тупить". Сторінка завантажується 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, ви кажете "впевнений середній рівень". А потім на роботі: "Слухай, перевір в базі, чи не загубилися транзакції за вчора для юзерів з Києва". 🤯
І ти сидиш і думаєш: тут треба
Не треба. Ваш Co-pilot — це найкращий DBA (Database Administrator). Вам навіть не треба знати точні назви колонок, достатньо описати логіку.
Практичний кейс: Треба знайти баг у програмі лояльності. У нас є 3 таблиці:
Завдання: Знайти юзерів, які купили на суму більше $100, але запису в таблиці bonuses для цього замовлення немає (або балів 0).
✨ Готовий промпт "SQL Master":
✅ Результат від AI:
Чому це круто?
Висновок: Вам не треба зубрити синтаксис складних об'єднань. Вам треба розуміти суть даних. А код напише AI. Тепер ви можете перевіряти бекенд на рівні бази, а не тільки через UI.
А ви пишете складні запити самі чи просите допомоги у девів? 👇
Привіт, екіпаж!
Класика жанру: на співбесіді питають про 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
🐘 "Білий ящик" для QA: Тестуємо ETL та міграції, не читаючи код
Привіт, екіпаж!
Під минулим постом про SQL підписник поділився крутим кейсом: використання AI для тестування Glue Jobs (скриптів міграції даних). Це наштовхнуло мене на важливу тему.
Часто розробники пишуть складні
Як це протестувати?
Ми робимо Reverse Engineering: перетворюємо логіку коду на перевірочний запит.
Практичний кейс: Розробник написав код міграції (Python):
Вам треба перевірити, чи не "загубилися" дані і чи правильно присвоївся статус.
✨ Готовий промпт "ETL Validator":
✅ Результат від AI:
Чому це геніально? Цей запит має повернути 0 рядків. Якщо він щось повернув — значить, міграція пройшла криво. Ви знайшли баг, навіть не розбираючись, як працює Spark чи Glue під капотом.
Дякую підписникам за ідеї в коментарях! Ви — драйвер цього каналу. 🚀
А вам доводиться тестувати переливання даних чи тільки UI? 👇
Привіт, екіпаж!
Під минулим постом про 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