Выполнение тестов 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

Спасибо!

Вернуться на верх