stefanbschneider
stefanbschneider

Reputation: 6086

PyTest: Auto delete temporary directory created with tmpdir_factory

I'm trying to create a temporary directory with a specific name (eg, "data") for all tests within a module using PyTest's tmpdir_factory similar to the tutorial:

@pytest.fixture(scope='module')
def project_file(self, tmpdir_factory):
    return tmpdir_factory.mktemp("data")

I'm using the temporary directory in some tests within the module successfully. However, the directory still exists after running the tests and when I run them again, I get a failure because I cannot create a new temporary directory with name "data".

How can I automatically delete the temporary directory "data" after the pytest tests finish? The tmpdir argument creates temporary directory that is removed but it doesn't have a name and it only has function scope.

Upvotes: 10

Views: 9070

Answers (1)

Stephen Rauch
Stephen Rauch

Reputation: 49774

You can cleanup after the fixture is done like:

@pytest.fixture(scope='module')
def project_file(self, tmpdir_factory):
    my_tmpdir = tmpdir_factory.mktemp("data")
    yield my_tmpdir 
    shutil.rmtree(str(my_tmpdir))

Upvotes: 17

Related Questions