import os import re import shutil import pytest import mock def pytest_runtest_teardown(item, nextitem): """ Teardown method to clean up folder creations during testing. This method is called after each test, but performs deletions only after an entire test class was executed. :param item: tested item :param nextitem: next item (could be None, if no following test is available) """ if nextitem is None or item.cls != nextitem.cls: # clean up all TestExperiment and data folder that have been created during testing rel_path = os.path.relpath(item.fspath.dirname, os.path.abspath(__file__)) path = os.path.dirname(__file__) for stage in filter(None, rel_path.replace("..", ".").split("/")): path = os.path.abspath(os.path.join(path, stage)) execute_removing(path) execute_removing(os.path.dirname(__file__)) else: pass # nothing to do if next test is from same test class def execute_removing(path): list_dir = os.listdir(path) if "data" in list_dir and path != os.path.dirname(__file__): # do not delete data folder in src shutil.rmtree(os.path.join(path, "data"), ignore_errors=True) # remove TestExperiment folders remove_files_from_regex(list_dir, path, re.compile(r"TestExperiment.*")) # remove all tracking json remove_files_from_regex(list_dir, path, re.compile(r"tracking_\d*\.json")) # remove all tracking pdf remove_files_from_regex(list_dir, path, re.compile(r"tracking_\d*\.pdf")) # remove all tracking json remove_files_from_regex(list_dir, path, re.compile(r"logging_\d*\.log")) def remove_files_from_regex(list_dir, path, regex): r = list(filter(regex.search, list_dir)) if len(r) > 0: for e in r: del_path = os.path.join(path, e) try: if os.path.isfile(del_path): os.remove(del_path) else: shutil.rmtree(os.path.join(path, e), ignore_errors=True) except: pass @pytest.fixture(scope="session", autouse=True) def default_session_fixture(request): """ :type request: _pytest.python.SubRequest :return: """ # patched = mock.patch("multiprocessing.cpu_count", return_value=1) # patched.__enter__() # def unpatch(): # patched.__exit__() # request.addfinalizer(unpatch) with mock.patch("psutil.cpu_count", return_value=1): yield