- Docker configurations for Playwright MCP (no host pollution) - Visual regression testing with pixelmatch - Link checking for 404/500 errors - Console error detection with Gitea issue creation - Form testing capabilities - /web-test and /web-test-fix commands - web-testing skill documentation - Reorganize project structure (docker/, scripts/, tests/) - Update orchestrator model to ollama-cloud/glm-5 Structure: - docker/ - Docker configurations (moved from archive) - scripts/ - Utility scripts - tests/ - Test suite with visual, console, links testing - .kilo/commands/ - /web-test and /web-test-fix commands - .kilo/skills/ - web-testing skill Issues: #58 #60 #62
254 lines
7.4 KiB
Markdown
254 lines
7.4 KiB
Markdown
# Web Testing README
|
||
|
||
Автоматическое тестирование веб-приложений для APAW.
|
||
|
||
## Возможности
|
||
|
||
| Тест | Описание |
|
||
|------|----------|
|
||
| **Visual Regression** | Обнаружение визуальных дефектов: наложения элементов, смещения шрифтов, не те цвета |
|
||
| **Link Checking** | Проверка всех ссылок на 404/500 ошибки |
|
||
| **Form Testing** | Тестирование форм: заполнение, валидация, отправка |
|
||
| **Console Errors** | Захват JS ошибок, сетевых ошибок, создание Gitea Issues |
|
||
|
||
## Быстрый старт
|
||
|
||
### 1. Запуск в Docker (без установки на хост)
|
||
|
||
```bash
|
||
# Запустить Playwright MCP контейнер
|
||
docker compose -f docker/docker-compose.web-testing.yml up -d
|
||
|
||
# Проверить что MCP работает
|
||
curl http://localhost:8931/mcp -X POST -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
|
||
```
|
||
|
||
### 2. Запуск тестов
|
||
|
||
```bash
|
||
# Указать целевой URL
|
||
export TARGET_URL=https://your-app.com
|
||
|
||
# Запустить все тесты
|
||
cd tests && npm install && npm test
|
||
|
||
# Или через скрипт из корня проекта
|
||
./scripts/web-test.sh https://your-app.com
|
||
```
|
||
|
||
### 3. Просмотр отчёта
|
||
|
||
```bash
|
||
# Открыть HTML отчёт
|
||
npm run report
|
||
|
||
# Или вручную
|
||
open tests/reports/web-test-report.html
|
||
```
|
||
|
||
## Использование с Kilo Code
|
||
|
||
### Команда /web-test
|
||
|
||
```
|
||
/web-test https://my-app.com
|
||
```
|
||
|
||
Запускает все тесты и генерирует отчёт.
|
||
|
||
### Команда /web-test-fix
|
||
|
||
```
|
||
/web-test-fix https://my-app.com
|
||
```
|
||
|
||
Запускает тесты + автоматически исправляет найденные ошибки через агентов.
|
||
|
||
## Структура папок
|
||
|
||
```
|
||
tests/
|
||
├── scripts/
|
||
│ ├── compare-screenshots.js # Visual regression
|
||
│ ├── link-checker.js # Link checking
|
||
│ ├── console-error-monitor.js # Console errors
|
||
│ └── aggregate-errors.js # Error aggregation
|
||
├── visual/
|
||
│ ├── baseline/ # Эталонные скриншоты
|
||
│ ├── current/ # Текущие скриншоты
|
||
│ └── diff/ # Разница (красное)
|
||
├── reports/
|
||
│ ├── web-test-report.html # HTML отчёт
|
||
│ ├── web-test-report.json # JSON отчёт
|
||
│ └── screenshots/ # Скриншоты
|
||
├── console/
|
||
├── links/
|
||
├── forms/
|
||
├── run-all-tests.js # Главный runner
|
||
└── package.json
|
||
```
|
||
|
||
## Переменные окружения
|
||
|
||
| Переменная | По умолчанию | Описание |
|
||
|------------|--------------|----------|
|
||
| `TARGET_URL` | `http://localhost:3000` | URL для тестирования |
|
||
| `MCP_PORT` | `8931` | Порт Playwright MCP |
|
||
| `REPORTS_DIR` | `./reports` | Папка для отчётов |
|
||
| `PIXELMATCH_THRESHOLD` | `0.05` | Допустимый % отличий (5%) |
|
||
| `AUTO_CREATE_ISSUES` | `false` | Авто-создание Gitea Issues |
|
||
| `GITEA_TOKEN` | - | Токен Gitea API |
|
||
| `GITEA_REPO` | `UniqueSoft/APAW` | Репозиторий |
|
||
|
||
## Visual Regression Testing
|
||
|
||
### Как работает
|
||
|
||
1. Делает скриншот каждой страницы в 3 разрешениях (mobile, tablet, desktop)
|
||
2. Сравнивает с baseline (эталоном) через pixelmatch
|
||
3. Генерирует diff изображение (красные пиксели = отличия)
|
||
4. Создаёт отчёт с процентом изменившихся пикселей
|
||
|
||
### Эталонные скриншоты
|
||
|
||
```bash
|
||
# Создать эталон для новой страницы
|
||
node tests/scripts/compare-screenshots.js --baseline
|
||
|
||
# Обновить эталон после изменений
|
||
cp tests/visual/current/*.png tests/visual/baseline/
|
||
```
|
||
|
||
### Обнаруживаемые проблемы
|
||
|
||
- ✅ Наложение элементов (кнопка на кнопку)
|
||
- ✅ Сдвиг шрифтов (текст поехал)
|
||
- ✅ Неверные цвета (фон не тот)
|
||
- ✅ Отсутствующие элементы (кнопка пропала)
|
||
- ✅ Лишние элементы (появился артефакт)
|
||
|
||
## Console Error Detection
|
||
|
||
### Что ловит
|
||
|
||
| Тип | Пример |
|
||
|-----|--------|
|
||
| JavaScript Error | `TypeError: Cannot read property 'x' of undefined` |
|
||
| Syntax Error | `Unexpected token '<'` |
|
||
| Network Error | `Failed to fetch /api/users` |
|
||
| 404 Error | `GET /script.js 404 (Not Found)` |
|
||
| 500 Error | `POST /api/submit 500 (Internal Server Error)` |
|
||
|
||
### Авто-исправление
|
||
|
||
При `AUTO_CREATE_ISSUES=true`:
|
||
|
||
```
|
||
[Console Error Detected]
|
||
↓
|
||
[Gitea Issue Created]
|
||
↓
|
||
[@the-fixer Agent]
|
||
↓
|
||
[PR with Fix Created]
|
||
↓
|
||
[Issue Closed]
|
||
```
|
||
|
||
## Docker Compose
|
||
|
||
### Основной контейнер
|
||
|
||
```yaml
|
||
services:
|
||
playwright-mcp:
|
||
image: mcr.microsoft.com/playwright/mcp:latest
|
||
ports:
|
||
- "8931:8931"
|
||
command: node cli.js --headless --browser chromium --no-sandbox --port 8931 --host 0.0.0.0
|
||
shm_size: '2gb'
|
||
```
|
||
|
||
### Профили
|
||
|
||
```bash
|
||
# Только visual testing
|
||
docker compose -f docker-compose.web-testing.yml --profile visual up
|
||
|
||
# Все тесты
|
||
docker compose -f docker-compose.web-testing.yml --profile full up
|
||
```
|
||
|
||
## CI/CD Integration
|
||
|
||
### GitHub Actions
|
||
|
||
```yaml
|
||
name: Web Testing
|
||
on: [push]
|
||
|
||
jobs:
|
||
test:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v3
|
||
|
||
- name: Start Playwright MCP
|
||
run: docker compose -f docker-compose.web-testing.yml up -d
|
||
|
||
- name: Run Tests
|
||
run: cd tests && npm install && npm test
|
||
env:
|
||
TARGET_URL: ${{ secrets.APP_URL }}
|
||
AUTO_CREATE_ISSUES: true
|
||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||
|
||
- name: Upload Report
|
||
uses: actions/upload-artifact@v3
|
||
with:
|
||
name: web-test-report
|
||
path: tests/reports/
|
||
```
|
||
|
||
## Troubleshooting
|
||
|
||
### MCP не отвечает
|
||
|
||
```bash
|
||
# Проверить контейнер
|
||
docker ps | grep playwright
|
||
|
||
# Перезапустить
|
||
docker compose -f docker-compose.web-testing.yml restart
|
||
|
||
# Логи
|
||
docker compose -f docker-compose.web-testing.yml logs -f
|
||
```
|
||
|
||
### Скриншоты пустые
|
||
|
||
```bash
|
||
# Увеличить timeout
|
||
export TIMEOUT=10000
|
||
|
||
# Проверить что headless включён
|
||
# (для Docker обязателен)
|
||
docker compose -f docker-compose.web-testing.yml config | grep headless
|
||
```
|
||
|
||
### Высокий процент ложных срабатываний
|
||
|
||
```bash
|
||
# Увеличить порог до 10%
|
||
export PIXELMATCH_THRESHOLD=0.10
|
||
|
||
# Или отключить для конкретного теста
|
||
node tests/scripts/compare-screenshots.js --no-compare --create-baseline
|
||
```
|
||
|
||
## See Also
|
||
|
||
- `.kilo/skills/web-testing/SKILL.md` - Полная документация
|
||
- `.kilo/commands/web-test.md` - Команда тестирования
|
||
- `.kilo/commands/web-test-fix.md` - Тестирование с авто-исправлением
|
||
- `docker-compose.web-testing.yml` - Docker конфигурация |