tmp_path and tmp_path_factory in PyTest - Build an Automation Script
import pytest def test_tmp_path_and_tmp_path_factory(tmp_path, tmp_path_factory): # Using tmp_path fixture test_file = tmp_path / "testfile.txt" test_file.write_text("Hello pytest!") # Assert file exists assert test_file.exists(), f"File {test_file} should exist" # Assert file content content = test_file.read_text() assert content == "Hello pytest!", f"File content should be 'Hello pytest!' but got '{content}'" # Using tmp_path_factory fixture custom_dir = tmp_path_factory.mktemp("myprefix") factory_file = custom_dir / "factoryfile.txt" factory_file.write_text("Factory test content") # Assert file exists assert factory_file.exists(), f"File {factory_file} should exist" # Assert file content factory_content = factory_file.read_text() assert factory_content == "Factory test content", f"File content should be 'Factory test content' but got '{factory_content}'"
This test function uses two pytest fixtures: tmp_path and tmp_path_factory.
First, tmp_path provides a temporary directory unique to this test. We create a file testfile.txt inside it and write text. We then check if the file exists and if its content matches what we wrote.
Next, tmp_path_factory is used to create another temporary directory with a custom prefix myprefix. Inside this directory, we create another file factoryfile.txt and write different content. We verify the file's existence and content similarly.
Using pathlib's Path methods makes file handling easy and readable. Assertions ensure the test fails if files are missing or contents are wrong. Pytest automatically cleans up these temporary directories after the test finishes, so no manual cleanup is needed.
Now add data-driven testing to create multiple files with different names and contents using tmp_path