2025-08-12 14:16:40 +03:00
|
|
|
|
# Исправление Playwright Headless режима и pytest ошибок
|
|
|
|
|
|
|
|
|
|
|
|
**Дата**: 2025-08-12
|
|
|
|
|
|
**Версия**: 0.9.6
|
|
|
|
|
|
**Статус**: ✅ Завершено
|
|
|
|
|
|
|
|
|
|
|
|
## 🎯 Проблемы
|
|
|
|
|
|
|
|
|
|
|
|
### 1. Playwright Headless режим в CI/CD
|
|
|
|
|
|
При запуске E2E тестов в CI/CD окружении возникала ошибка:
|
|
|
|
|
|
```
|
|
|
|
|
|
║ Looks like you launched a headed browser without having a XServer running. ║
|
|
|
|
|
|
║ Set either 'headless: true' or use 'xvfb-run <your-playwright-app>' before running Playwright. ║
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. Pytest ошибка с TestModel
|
|
|
|
|
|
При сборе тестов возникала ошибка:
|
|
|
|
|
|
```
|
|
|
|
|
|
cannot collect test class 'TestModel' because it has a __init__ constructor
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-08-12 14:31:25 +03:00
|
|
|
|
### 3. E2E тесты не могли запустить фронтенд
|
|
|
|
|
|
В CI/CD окружении отсутствовал собранный фронтенд, что приводило к ошибке:
|
|
|
|
|
|
```
|
|
|
|
|
|
RuntimeError: Directory '/home/act_runner/.cache/act/.../dist/assets' does not exist
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Решение**: Добавлен шаг для запуска фронтенд сервера в CI/CD workflow
|
|
|
|
|
|
|
2025-08-12 14:16:40 +03:00
|
|
|
|
## 🔧 Решения
|
|
|
|
|
|
|
|
|
|
|
|
### 1. Playwright Headless режим
|
|
|
|
|
|
|
|
|
|
|
|
#### Обновлен CI/CD workflow
|
|
|
|
|
|
Добавлена переменная окружения `PLAYWRIGHT_HEADLESS=true` в `.gitea/workflows/main.yml`:
|
|
|
|
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
|
|
- name: Run Tests
|
|
|
|
|
|
env:
|
|
|
|
|
|
PLAYWRIGHT_HEADLESS: "true"
|
|
|
|
|
|
run: |
|
|
|
|
|
|
uv run pytest tests/ -v
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### Добавлена установка браузеров Playwright
|
|
|
|
|
|
```yaml
|
|
|
|
|
|
- name: Setup Playwright (use pre-installed browsers)
|
|
|
|
|
|
env:
|
|
|
|
|
|
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
|
|
|
|
|
|
run: |
|
|
|
|
|
|
# Используем предустановленные браузеры в системе
|
|
|
|
|
|
npx playwright --version
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### Обновлены все Playwright тесты
|
|
|
|
|
|
Все тесты теперь используют переменную окружения для определения headless режима:
|
|
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
|
# Определяем headless режим из переменной окружения
|
|
|
|
|
|
headless_mode = os.getenv("PLAYWRIGHT_HEADLESS", "false").lower() == "true"
|
|
|
|
|
|
print(f"🔧 Headless режим: {headless_mode}")
|
|
|
|
|
|
|
|
|
|
|
|
browser = await playwright.chromium.launch(headless=headless_mode)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. Pytest ошибка с TestModel
|
|
|
|
|
|
|
|
|
|
|
|
#### Исправлен класс TestModel
|
|
|
|
|
|
В `tests/test_db_coverage.py`:
|
|
|
|
|
|
- Переименован класс `TestModel` → `MockTestModel`
|
|
|
|
|
|
- Убран `__init__` конструктор
|
|
|
|
|
|
- Обновлены все ссылки на класс
|
|
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
|
# Было:
|
|
|
|
|
|
class TestModel(Base):
|
|
|
|
|
|
def __init__(self, name: str = None, description: str = None):
|
|
|
|
|
|
self.name = name
|
|
|
|
|
|
self.description = description
|
|
|
|
|
|
|
|
|
|
|
|
# Стало:
|
|
|
|
|
|
class MockTestModel(Base):
|
|
|
|
|
|
# Без __init__ конструктора
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 📝 Обновленные файлы
|
|
|
|
|
|
|
|
|
|
|
|
### CI/CD
|
|
|
|
|
|
- `.gitea/workflows/main.yml` - добавлена переменная окружения и настройка Playwright
|
|
|
|
|
|
|
|
|
|
|
|
### Тесты
|
|
|
|
|
|
- `tests/test_community_delete_e2e_browser.py` - добавлена поддержка headless режима
|
|
|
|
|
|
- `tests/test_login_debug.py` - добавлена поддержка headless режима
|
|
|
|
|
|
- `tests/test_delete_button_debug.py` - добавлена поддержка headless режима
|
|
|
|
|
|
- `check_communities_table.py` - добавлена поддержка headless режима
|
|
|
|
|
|
- `tests/test_db_coverage.py` - исправлен класс TestModel
|
|
|
|
|
|
|
|
|
|
|
|
### Документация
|
|
|
|
|
|
- `CHANGELOG.md` - добавлена версия 0.9.6
|
|
|
|
|
|
- `docs/testing.md` - добавлена документация по Playwright конфигурации
|
|
|
|
|
|
- `docs/README.md` - обновлен статус проекта
|
|
|
|
|
|
- `docs/features.md` - E2E тестирование
|
|
|
|
|
|
|
|
|
|
|
|
## 🎭 Преимущества решения
|
|
|
|
|
|
|
|
|
|
|
|
1. **Автоматическое переключение**: Тесты автоматически определяют режим работы
|
|
|
|
|
|
2. **Локальная разработка**: Можно запускать в headed режиме для отладки
|
|
|
|
|
|
3. **CI/CD совместимость**: Автоматически работает в headless режиме
|
|
|
|
|
|
4. **Единая конфигурация**: Один код работает в разных окружениях
|
|
|
|
|
|
5. **Исправлены pytest ошибки**: Устранены предупреждения о сборе тестов
|
|
|
|
|
|
|
|
|
|
|
|
## 🔄 Переменные окружения
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# Локальная разработка - headed режим для отладки
|
|
|
|
|
|
export PLAYWRIGHT_HEADLESS=false
|
|
|
|
|
|
|
|
|
|
|
|
# CI/CD - headless режим без XServer
|
|
|
|
|
|
export PLAYWRIGHT_HEADLESS=true
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## ✅ Результат
|
|
|
|
|
|
|
|
|
|
|
|
- **E2E тесты**: Теперь корректно работают в CI/CD
|
|
|
|
|
|
- **Pytest ошибки**: Устранены предупреждения о сборе тестов
|
|
|
|
|
|
- **Локальная разработка**: Сохранена возможность отладки в headed режиме
|
|
|
|
|
|
- **Автоматизация**: CI/CD pipeline работает без ошибок
|
|
|
|
|
|
- **Документация**: Обновлена с инструкциями по настройке
|
|
|
|
|
|
|
|
|
|
|
|
## 🚀 Следующие шаги
|
|
|
|
|
|
|
|
|
|
|
|
1. **Тестирование**: Запустить CI/CD pipeline для проверки
|
|
|
|
|
|
2. **Мониторинг**: Отслеживать стабильность E2E тестов
|
|
|
|
|
|
3. **Расширение**: Добавить поддержку других браузеров при необходимости
|
|
|
|
|
|
4. **Проверка pytest**: Убедиться, что все тесты собираются без предупреждений
|
|
|
|
|
|
|