Я пытаюсь построить тестовую инфраструктуру для одного из наших проектов.Мы решили использовать 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)
Я был бы более чем рад поделиться дополнительной информацией по мере необходимости:)