Отладку ReportPortal можно разделить на несколько уровней: инфраструктурный (Docker, сеть, ресурсы), конфигурационный (настройки сервисов) и логический (интеграция с тестовыми фреймворками). Начнем с базового — инфраструктуры.
Самая частая проблема при запуске через официальный docker-compose — нехватка оперативной памяти. Сервисы ReportPortal, особенно UAT и Analyzer, потребляют много RAM. Первым признаком является падение контейнеров или невозможность загрузки UI. Решение: перед запуском проверьте доступную память (рекомендуется не менее 8 ГБ для полноценной работы). В docker-compose.yml можно явно указать лимиты памяти для критичных сервисов. Пример для сервиса uat:
```
uat:
image: reportportal/service-uat:latest
mem_limit: 2048m
mem_reservation: 1024m
```
Вторая типичная проблема на инфраструктурном уровне — сетевые конфликты портов. Стандартный compose-файл мапит порты 8080, 8081 и другие. Если у вас на хосте уже запущены сервисы на этих портах, контейнеры не поднимутся. Всегда проверяйте занятость портов командой `netstat -tulpn` или `lsof -i :8080` и при необходимости измените маппинг в конфигурации.
Перейдем к конфигурационным ошибкам. После успешного запуска контейнеров проблема может проявиться при попытке входа или отправке результатов. Часто это связано с неправильными настройками в файлах конфигурации сервисов или переменных окружения. Ключевой файл — `application.properties` для сервиса API (service-api). Ошибка в URI базы данных или учетных данных приведет к тому, что backend не сможет работать. Всегда проверяйте логи проблемного сервиса. Для этого найдите ID контейнера (`docker ps`) и выполните `docker logs --tail 100`. В логах часто содержится исчерпывающая информация, например, `Connection refused` к RabbitMQ или PostgreSQL.
Теперь о логическом уровне — интеграции с тестовыми фреймворками. Допустим, вы используете pytest с плагином reportportal-client. Тесты проходят, но результаты не появляются в ReportPortal. Алгоритм отладки:
- Убедитесь, что в pytest.ini или в коде конфигурации корректно указаны endpoint, проект и API-токен. Токен должен быть сгенерирован для пользователя с нужными правами в UI ReportPortal.
- Включите детальное логирование клиента. Пример настройки в коде запуска тестов:
logging.basicConfig(level=logging.DEBUG)
rp_logger = logging.getLogger('reportportal_client')
rp_logger.setLevel(logging.DEBUG)
```
Это выведет в консоль все HTTP-запросы и ответы при отправке данных, что позволит увидеть ошибки вроде 401 (Unauthorized) или 404 (Not Found).
- Проверьте версионную совместимость. Убедитесь, что версии reportportal-client и вашего ReportPortal совместимы. Несоответствие версий — частый источник странных ошибок.
Еще один сложный сценарий — кастомная обработка логов или артефактов. Допустим, вы хотите прикреплять к шагам теста не просто скриншоты, а дополнительные JSON-файлы с данными. Для этого нужно использовать методы клиентской библиотеки. Пример для pytest:
```python
import pytest
from reportportal_client import RPLogger
@pytest.fixture
def rp_logger(request):
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# Получаем хэндлер ReportPortal из текущего запроса
if hasattr(request.node, 'rp_logger'):
logger.addHandler(request.node.rp_logger)
return logger
def test_with_artifact(rp_logger):
rp_logger.info("Начало теста с артефактом")
# Генерация некоторых данных
test_data = {"status": "passed", "value": 42}
import tempfile, json
with tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False) as f:
json.dump(test_data, f)
temp_path = f.name
# Прикрепление файла к логу
with open(temp_path, 'rb') as file:
rp_logger.info("Прикрепляю данные теста",
attachment={"name": "data.json", "data": file.read(), "mime": "application/json"})
```
Если артефакт не появляется, снова смотрите логи клиента (DEBUG-уровень) и проверяйте размер файла — могут быть ограничения на стороне сервиса API.
В заключение, системный подход к отладке ReportPortal всегда начинается с логов. Двигайтесь от инфраструктуры (подняты ли все контейнеры?) к конфигурации (могут ли сервисы общаться друг с другом?) и, наконец, к логике интеграции (корректно ли клиент отправляет данные?). Настройка централизованного сбора логов (например, в ELK-стек) для всех контейнеров ReportPortal значительно упростит мониторинг и диагностику проблем в будущем.
Комментарии (5)