Dockered Python ведет себя странно при очистке ссылочных данных (Flask & Py.test на борту) - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь построить тестовую инфраструктуру для одного из наших проектов.Мы решили использовать Pytest в качестве основного драйвера тестирования и предоставить базовый передний интерфейс, который позволит пользователю взаимодействовать с системой.

Примитивный интерфейс - это flask, который деформирует pytest.main () который, в свою очередь, обернут в multiprocessing.process как демон для обеспечения асинхронного выполнения.

Вся партия хранится в док-контейнере.

Проблема в том, что всякий раз, когда я 'm загружая новый тест в систему (в основном, файл теста python), он выполняет его, но всякий раз, когда я хочу изменить его - он не позволяет мне, так как ссылочные данные не очищаются.

странная частьчто в Windows он работает нормально - но в Linux (Docker) это плохо.

Асинхронный запуск, который вызывается повторным вызовом:

def tests_dispatcher(test_args, test_uuid=None):
    """
    Main test dispatcher used in order to execute test in a single thread.
    The dispatcher is an async and return data with using json plugin.
    :param test_args: test arguments
    :param test_uuid: session uuid
    :return: None
    """

    # todo: this queue_client() with the pytest addoption should move to different location.

    if eval(ShieldConfig.get_queue_manager_mode()):
        arguments_for_test = [test_args, test_uuid]
        thread = threading.Thread(
            target=QueueClient.queue_client().append_to_queue(arguments_for_test)
        )
        thread.daemon = True
        thread.start()
        PytestSingleton.test_thread = thread.name
    else:
        process = multiprocessing.Process(target=run_test, args=(test_args, test_uuid))
        process.daemon = True
        process.start()
        PytestSingleton.test_process = process.name

Обтекание pytest:

def run_test(inner_test_args, inner_test_uuid):
    """ inner dispatcher act as threading manager"""
    import pytest
    TestSingleton.test_uuid = inner_test_uuid

    pytest.main(
        [
            ProjectPaths.build_tests_path(),  # todo: parse test location from config file.
            "-k",
            inner_test_args["test_name"],
            "--config_entry",
            inner_test_args["config"],
            "--json-report"
        ]
    )

Пример вывода, который отправляется, когда справочные данныене очищается:

=============================== warnings summary ===============================
/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py:752
  /usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py:752: PytestWarning: Module already imported so cannot be rewritten: pytest_metadata
    self._mark_plugins_for_rewrite(hook)

/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py:752
  /usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py:752: PytestWarning: Module already imported so cannot be rewritten: pytest_jsonreport
    self._mark_plugins_for_rewrite(hook)

/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py:514
  /usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py:514: PytestWarning: Module already imported so cannot be rewritten: lib.proc.pytest_elements.shield_conftest
    self.import_plugin(import_spec)

/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py:514
  /usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py:514: PytestWarning: Module already imported so cannot be rewritten: lib.proc.pytest_elements.shield_fixtures
    self.import_plugin(import_spec)

Я был бы более чем рад поделиться дополнительной информацией по мере необходимости:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...