Выполнение тестов django --parallel и разделение файлов журнала для каждого работника, выполняющего тесты
Я использую manage.py test --parallel
для запуска своих тестов и хочу создать отдельный файл журнала для каждой программы запуска тестов.
В настоящее время все рабочие прогоны пишут в один и тот же файл журнала, поэтому я получаю один файл журнала с содержимым, "разделенным на полосы" следующим образом:
[ForkPoolWorker-2] ...
[ForkPoolWorker-1] ...
[ForkPoolWorker-1] ...
[ForkPoolWorker-3] ...
[ForkPoolWorker-2] ...
[ForkPoolWorker-4] ...
[ForkPoolWorker-1] ...
Я создаю пользовательский метод configure_logging()
следующим образом:
import logging.config
import os
def configure_logging() -> None:
"""Custom logging configuration with process-id named files"""
process_id = os.getpid()
log_file_path = f"runner-{process_id}.log"
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"handlers": {
"file": {
"level": "DEBUG",
"class": "logging.FileHandler",
"filename": log_file_path,
},
},
"loggers": {
"django.log": {
"handlers": ["file"],
"level": "DEBUG",
"propagate": True,
},
},
}
logging.config.dictConfig(LOGGING)
Я использую пользовательский тестовый бегунок для подключения:
from django.test.runner import DiscoverRunner
from myapp.tests.logging_config import configure_logging
class ParallelTestRunner(DiscoverRunner):
"""Parallel test runner with separate log files for each worker"""
def setup_test_environment(self, **kwargs):
"""Configure the test environment with our custom log setup"""
super().setup_test_environment(**kwargs)
# Configure logging with a unique file per test process
configure_logging()
Я подключаю это в файле settings.py следующим образом:
TEST_RUNNER = "myapp.tests.runners.ParallelTestRunner"
Однако, когда я ищу файлы журнала, оказывается, что создается только один файл журнала, как runner-16.log
, поэтому я думаю, что генерация имен для файлов журнала происходит в главном процессе testrunner, до разделения рабочего процесса.
Есть идеи, как я могу подключить это так, чтобы файлы журнала создавались для каждого рабочего testrunner? Я хотел бы видеть файлы журнала следующего вида:
runner-11.log
runner-12.log
runner-13.log
runner-14.log
runner-15.log
runner-16.log
Спасибо!