🔍 QA-панель
Панель тестировщика SEOGen
Полный набор тест-кейсов, чек-листов и инструкций для ручного тестирования платформы SEOGen. Следуй чек-листу, отмечай пройденное, фиксируй баги.
📋 Инструкция для тестировщика
1️⃣
Подготовка
- • Открой сайт seo2040.ru
- • Подготовь DevTools (F12)
- • Вкладки: Console, Network
- • Эмулятор мобильных устройств
2️⃣
Тестирование
- • Иди по чек-листу сверху вниз
- • Каждый тест-кейс — отдельно
- • Фиксируй скриншотами
- • Отмечай пройденные ✅ или ❌
3️⃣
Баг-репорт
- • ID тест-кейса
- • Шаги воспроизведения
- • Expected vs Actual
- • Скриншот/видео
- • Severity: P0-P3
✅ Быстрый чек-лист
🔐 Аутентификация
- Регистрация — валидные данные
- Регистрация — дубликат email
- Регистрация — пустые поля
- Регистрация — слабый пароль
- Вход — корректные данные
- Вход — неверный пароль
- Вход — несуществующий email
- Выход из системы
- Защита роутов (dashboard, admin без авторизации)
✍️ Генерация статей
- Генерация по ключевому слову (русский)
- Пустое ключевое слово
- XSS через ключевое слово
- Очень длинное ключевое слово (200+)
- Английское ключевое слово
- Спецсимволы и эмодзи в ключевом слове
- Одновременная генерация нескольких статей
📊 Дашборд
- Список статей (сортировка)
- Пустой дашборд (новый пользователь)
- Счётчик лимитов
- Удаление статьи
- Просмотр статьи
💾 Экспорт
- Копирование в буфер обмена
- Скачивание HTML
- Скачивание Markdown
- Экспорт в WordPress (если доступен)
🔍 SEO-качество
- Title: 50-70 символов, содержит ключ
- Description: 120-160 символов, содержит ключ
- Структура H1-H4 (1 H1, минимум 2 H2)
- Внутренние ссылки
- Alt-тексты изображений
- meta robots в статьях
📱 UI/UX и адаптивность
- Мобильная версия (320-767px)
- Планшет (768-1024px)
- Десктоп (1025px+)
- Тёмная тема — контрастность
- Состояния загрузки и ошибок
- 404 страница
- Кнопки не налезают друг на друга
🔒 Безопасность
- CSRF-защита API
- Изоляция данных пользователей
- Нет утечки данных через API-ответы
- Rate limiting на генерацию
- CORS-заголовки
🚀 Производительность
- Lighthouse: Performance ≥ 80
- Lighthouse: Accessibility ≥ 85
- Lighthouse: Best Practices ≥ 90
- Lighthouse: SEO ≥ 90
- Время генерации ≤ 30 сек
- Время загрузки страниц ≤ 3 сек
🌐 SEO сайта
- robots.txt
- sitemap.xml
- llms.txt
- Open Graph meta-теги
- Schema.org разметка
- Канонические URL
📝 Тест-кейсы (44)
| ID | Область | Сценарий | Ожидаемый результат | Приоритет | Статус |
|---|---|---|---|---|---|
| AUTH-01 | Аутентификация | Регистрация нового пользователя 1. Перейти на /register
2. Заполнить все поля валидными данными
3. Нажать «Зарегистрироваться» | Пользователь создан, редирект на /dashboard, приветственное сообщение | P0 | ⬜ Не проверен |
| AUTH-02 | Аутентификация | Регистрация с уже существующим email 1. Перейти на /register
2. Ввести email уже зарегистрированного пользователя
3. Заполнить остальные поля
4. Нажать «Зарегистрироваться» | Ошибка «Email уже используется», форма не отправлена | P1 | ⬜ Не проверен |
| AUTH-03 | Аутентификация | Регистрация с пустыми полями 1. Перейти на /register
2. Оставить все поля пустыми
3. Нажать «Зарегистрироваться» | Валидационные ошибки под каждым обязательным полем | P1 | ⬜ Не проверен |
| AUTH-04 | Аутентификация | Регистрация со слабым паролем 1. Перейти на /register
2. Ввести пароль «123»
3. Нажать «Зарегистрироваться» | Ошибка «Пароль должен содержать минимум 6 символов» | P2 | ⬜ Не проверен |
| AUTH-05 | Аутентификация | Вход с корректными данными 1. Перейти на /login
2. Ввести email и пароль зарегистрированного пользователя
3. Нажать «Войти» | Успешный вход, редирект на /dashboard | P0 | ⬜ Не проверен |
| AUTH-06 | Аутентификация | Вход с неверным паролем 1. Перейти на /login
2. Ввести правильный email, но неверный пароль
3. Нажать «Войти» | Ошибка «Неверный email или пароль» | P1 | ⬜ Не проверен |
| AUTH-07 | Аутентификация | Вход с несуществующим email 1. Перейти на /login
2. Ввести несуществующий email
3. Нажать «Войти» | Ошибка «Неверный email или пароль» (без раскрытия что именно не так) | P2 | ⬜ Не проверен |
| AUTH-08 | Аутентификация | Выход из системы 1. Войти в систему
2. Нажать «Выйти» | Пользователь разлогинен, редирект на главную | P1 | ⬜ Не проверен |
| GEN-01 | Генерация статей | Генерация статьи по ключевому слову 1. Войти в систему
2. Перейти на /dashboard
3. Ввести ключевое слово (например «редиска»)
4. Нажать «Сгенерировать» | Статья сгенерирована: H1, H2-H4 структура, мета-теги, 500+ слов, релевантный контент | P0 | ⬜ Не проверен |
| GEN-02 | Генерация статей | Генерация с пустым полем ключевого слова 1. Оставить поле ввода пустым
2. Нажать «Сгенерировать» | Валидационная ошибка «Введите ключевое слово» | P1 | ⬜ Не проверен |
| GEN-03 | Генерация статей | Генерация статьи со спецсимволами в ключе 1. Ввести ключ: «<script>alert(1)</script>»
2. Нажать «Сгенерировать» | Ключ санитизирован, XSS не выполняется, статья генерируется или graceful error | P0 | ⬜ Не проверен |
| GEN-04 | Генерация статей | Генерация статьи на английском 1. Ввести ключ: «quantum computing»
2. Нажать «Сгенерировать» | Статья на английском языке или сообщение о поддержке только русского | P2 | ⬜ Не проверен |
| GEN-05 | Генерация статей | Генерация с очень длинным ключом (200+ символов) 1. Ввести ключ длиной 250 символов
2. Нажать «Сгенерировать» | Валидация ограничения длины или генерация с обрезанным ключом | P3 | ⬜ Не проверен |
| DASH-01 | Дашборд | Отображение сгенерированных статей 1. Войти, сгенерировать 2-3 статьи
2. Проверить /dashboard | Все статьи отображаются в списке, сортировка по дате (новые сверху) | P0 | ⬜ Не проверен |
| DASH-02 | Дашборд | Отображение пустого дашборда 1. Зарегистрировать нового пользователя
2. Сразу перейти на /dashboard | Заглушка «У вас пока нет статей» с кнопкой «Создать первую» | P1 | ⬜ Не проверен |
| DASH-03 | Дашборд | Счётчик использованных/доступных статей 1. Сгенерировать статью
2. Проверить счётчик на дашборде | Счётчик обновляется: «Использовано: 1 из 3 (Free)» | P1 | ⬜ Не проверен |
| LIMIT-01 | Лимиты | Бесплатный пользователь превышает лимит (3 статьи) 1. Зарегистрироваться (Free-план)
2. Сгенерировать 3 статьи
3. Попытаться сгенерировать 4-ю | Ошибка «Лимит бесплатного тарифа исчерпан», предложение обновиться | P0 | ⬜ Не проверен |
| LIMIT-02 | Лимиты | Проверка блокировки в обход API 1. Исчерпать лимит
2. Отправить прямой POST-запрос на /api/generate | Сервер возвращает 403/429 с ошибкой лимита | P1 | ⬜ Не проверен |
| EXPORT-01 | Экспорт | Копирование статьи в буфер обмена 1. Сгенерировать статью
2. Нажать «Копировать» | Статья скопирована в буфер, toast-уведомление «Скопировано!» | P1 | ⬜ Не проверен |
| EXPORT-02 | Экспорт | Скачивание в HTML 1. Сгенерировать статью
2. Нажать «Скачать HTML» | Скачивается .html файл, открывается в браузере корректно | P1 | ⬜ Не проверен |
| EXPORT-03 | Экспорт | Скачивание в Markdown 1. Сгенерировать статью
2. Нажать «Скачать MD» | Скачивается .md файл с корректной структурой | P2 | ⬜ Не проверен |
| SEO-01 | SEO | Проверка мета-тегов статьи 1. Сгенерировать статью
2. Проверить title и description | Title 50-70 символов, Description 120-160 символов, содержат ключевое слово | P1 | ⬜ Не проверен |
| SEO-02 | SEO | Структура заголовков 1. Сгенерировать статью
2. Проверить HTML-структуру | Ровно 1 H1, минимум 2 H2, H3 по необходимости. Нет пропусков уровней. | P1 | ⬜ Не проверен |
| SEO-03 | SEO | Внутренние ссылки в статье 1. Сгенерировать статью
2. Проверить наличие внутренних ссылок | Минимум 1-2 внутренние ссылки на релевантные страницы сайта | P2 | ⬜ Не проверен |
| DEMO-01 | Демо-генератор | Генерация на главной без регистрации 1. Перейти на главную /
2. Ввести ключевое слово в демо-форму
3. Нажать «Сгенерировать» | Статья генерируется и отображается на странице, кнопки экспорта активны | P0 | ⬜ Не проверен |
| DEMO-02 | Демо-генератор | Повторная генерация демо 1. Сгенерировать демо-статью
2. Ввести другое ключевое слово
3. Снова нажать «Сгенерировать» | Новая статья заменяет предыдущую, без перезагрузки страницы | P1 | ⬜ Не проверен |
| UI-01 | UI/UX | Адаптивность: мобильные устройства (320-767px) 1. Открыть все страницы на эмуляторе iPhone SE
2. Проверить все элементы | Всё читаемо, ничего не вылезает за экран, кнопки нажимаются | P1 | ⬜ Не проверен |
| UI-02 | UI/UX | Адаптивность: планшеты (768-1024px) 1. Открыть на iPad-эмуляторе
2. Проверить лейаут | Корректное отображение, нет горизонтального скролла | P2 | ⬜ Не проверен |
| UI-03 | UI/UX | Тёмная тема 1. Проверить все страницы в тёмной теме | Контрастность текста достаточная (WCAG AA), нет белых блоков на тёмном фоне | P2 | ⬜ Не проверен |
| UI-04 | UI/UX | Состояния загрузки 1. Нажать «Сгенерировать»
2. Наблюдать за интерфейсом во время генерации | Показан индикатор загрузки (спиннер/скелетон), кнопка заблокирована от двойного клика | P1 | ⬜ Не проверен |
| UI-05 | UI/UX | Ошибки сети 1. В DevTools перейти на вкладку Network
2. Включить Offline
3. Попытаться сгенерировать статью | Понятное сообщение об ошибке сети, кнопка «Повторить» | P2 | ⬜ Не проверен |
| SEC-01 | Безопасность | Доступ к /admin без авторизации 1. Разлогиниться
2. Перейти на /admin | Редирект на /login или 403 Forbidden | P0 | ⬜ Не проверен |
| SEC-02 | Безопасность | Доступ к /dashboard без авторизации 1. Разлогиниться
2. Перейти на /dashboard | Редирект на /login | P0 | ⬜ Не проверен |
| SEC-03 | Безопасность | CSRF-защита API 1. Отправить POST на /api/generate без куки/токена | 401 Unauthorized | P1 | ⬜ Не проверен |
| SEC-04 | Безопасность | Просмотр чужих статей через ID 1. Войти как user A, запомнить ID статьи
2. Войти как user B
3. Перейти на /article/[чужая статья] | 404 или 403 — чужие статьи недоступны | P0 | ⬜ Не проверен |
| BLOG-01 | Блог | Отображение списка статей блога 1. Перейти на /blog | Список статей блога с пагинацией (если больше 10) | P2 | ⬜ Не проверен |
| BLOG-02 | Блог | Открытие отдельной статьи блога 1. Кликнуть на любую статью в /blog | Статья открывается, SEO-метатеги на месте, хлебные крошки | P2 | ⬜ Не проверен |
| PRICE-01 | Тарифы | Отображение тарифов на /pricing 1. Перейти на /pricing | 4 тарифа: Бесплатный, Базовый, Про, Агентство. Цены и фичи корректны. | P1 | ⬜ Не проверен |
| PRICE-02 | Тарифы | Клик по CTA на тарифе 1. На /pricing нажать кнопку тарифа | Редирект на /register с предвыбранным тарифом или якорь | P1 | ⬜ Не проверен |
| PERF-01 | Производительность | Lighthouse: главная страница 1. Запустить Lighthouse (Desktop)
2. Проверить метрики | Performance ≥ 80, Accessibility ≥ 85, Best Practices ≥ 90, SEO ≥ 90 | P1 | ⬜ Не проверен |
| PERF-02 | Производительность | Время генерации статьи 1. Замерить время от нажатия «Сгенерировать» до появления статьи | ≤ 30 секунд для большинства запросов | P1 | ⬜ Не проверен |
| SEO-SITE-01 | SEO сайта | Проверка robots.txt 1. Открыть /robots.txt | Файл существует, содержит Sitemap, нет запрета на главные страницы | P2 | ⬜ Не проверен |
| SEO-SITE-02 | SEO сайта | Проверка sitemap.xml 1. Открыть /sitemap.xml | Файл существует, содержит все основные страницы (главная, блог, pricing) | P2 | ⬜ Не проверен |
| SEO-SITE-03 | SEO сайта | Проверка llms.txt 1. Открыть /llms.txt | Файл существует, содержит описание проекта и ссылки | P3 | ⬜ Не проверен |
🐛 Шаблон баг-репорта
Скопируй этот шаблон для каждого найденного бага в Google-таблицу или Notion.
## Баг-репорт [ID тест-кейса] | [Краткое описание] **Severity:** P0 / P1 / P2 / P3 **Окружение:** Браузер / ОС / Устройство **Дата:** [дата] ### Шаги воспроизведения 1. 2. 3. ### Expected (Ожидаемое поведение) [что должно было произойти] ### Actual (Фактическое поведение) [что произошло на самом деле] ### Дополнительно - Скриншот/видео: [ссылка] - Консоль/ошибки: [логи] ### Статус ⬜ Новый | ✅ Исправлен | 🔄 В работе | ❌ Отклонён