We use tmp_path to create temporary files and folders during tests. This keeps tests safe and clean without changing real files on your computer.
File system testing with tmp_path in PyTest
Start learning this pattern below
Jump into concepts and practice - no test required
def test_example(tmp_path): file = tmp_path / "testfile.txt" file.write_text("Hello") content = file.read_text() assert content == "Hello"
tmp_path is a built-in pytest fixture that provides a temporary directory as a pathlib.Path object.
You can create files or folders inside tmp_path safely during tests.
def test_create_file(tmp_path): file = tmp_path / "data.txt" file.write_text("Sample data") assert file.read_text() == "Sample data"
def test_create_folder(tmp_path): folder = tmp_path / "myfolder" folder.mkdir() assert folder.is_dir()
def test_file_exists(tmp_path): file = tmp_path / "file.txt" file.write_text("Test") assert file.exists()
This test creates a file named hello.txt in a temporary folder, writes text to it, reads it back, and checks the content and existence of the file.
import pytest def test_write_and_read(tmp_path): # Create a new file in the temporary directory file = tmp_path / "hello.txt" file.write_text("Hello, pytest!") # Read the content back content = file.read_text() # Check if the content is correct assert content == "Hello, pytest!" # Check the file exists assert file.exists()
Each test gets a fresh temporary directory, so files from one test won't affect another.
Temporary files and folders are deleted automatically after the test finishes.
Use tmp_path when you want to work with real file paths and tmp_path_factory for more control over temporary directories.
tmp_path helps test file operations safely without touching real files.
It provides a temporary folder unique to each test.
Files and folders created inside tmp_path are cleaned up automatically.
Practice
tmp_path in pytest tests?Solution
Step 1: Understand tmp_path functionality
tmp_pathprovides a temporary directory unique to each test run.Step 2: Identify its purpose in tests
This temporary directory allows safe creation, reading, and deletion of files without affecting the real file system.Final Answer:
To create a temporary directory unique to each test for safe file operations -> Option DQuick Check:
tmp_path = safe temp folder [OK]
- Thinking tmp_path stores files permanently
- Confusing tmp_path with mocking file calls
- Assuming tmp_path speeds up tests by caching
test.txt inside the tmp_path directory in pytest?Solution
Step 1: Understand tmp_path usage
tmp_pathis a pathlib.Path object, so to create a file, you combine paths with / operator.Step 2: Correct syntax for writing text
Use parentheses to combine path and then callwrite_text()on the file path:(tmp_path / 'test.txt').write_text('Hello').Final Answer:
(tmp_path / 'test.txt').write_text('Hello') -> Option AQuick Check:
Use (tmp_path / filename).write_text() [OK]
- Calling write_text directly on tmp_path
- Missing parentheses around path combination
- Using incorrect method names like write()
tmp_path:
def test_write_and_read(tmp_path):
file = tmp_path / 'data.txt'
file.write_text('pytest rocks')
content = file.read_text()
assert content == 'pytest rocks'
What will be the result of running this test?Solution
Step 1: Analyze file creation and writing
The code creates a file named 'data.txt' in tmp_path and writes the string 'pytest rocks' correctly.Step 2: Analyze reading and assertion
Reading the file withread_text()returns the string 'pytest rocks', which matches the assertion exactly.Final Answer:
Test passes because the file content matches the assertion -> Option AQuick Check:
write_text + read_text = matching string [OK]
- Thinking read_text returns bytes instead of string
- Assuming file is not created automatically
- Confusing syntax errors with runtime behavior
tmp_path:
def test_file_creation(tmp_path):
file = tmp_path / 'log.txt'
file.write('Log entry')
assert file.read_text() == 'Log entry'
Solution
Step 1: Check method used to write file
Pathobjects do not have awrite()method; the correct method to write text iswrite_text().Step 2: Understand error caused
Callingwrite()will raise an AttributeError because it does not exist on the Path object.Final Answer:
Using write() instead of write_text() causes an AttributeError -> Option CQuick Check:
Use write_text() to write strings to files [OK]
- Confusing write() with write_text()
- Ignoring method errors and expecting test pass
- Assuming parentheses are missing around path
tmp_path. Which approach correctly verifies that exactly three files named a.txt, b.txt, and c.txt exist in the temporary directory after the function runs?Solution
Step 1: Understand how to list files in tmp_path
tmp_path.iterdir()returns an iterator of Path objects for all entries in the directory.Step 2: Verify file names correctly
Extract file names withf.nameand compare as a set to ensure exactly the three expected files exist.Final Answer:
Use assert set(f.name for f in tmp_path.iterdir()) == {'a.txt', 'b.txt', 'c.txt'} -> Option BQuick Check:
Use iterdir() and set comparison for exact files [OK]
- Using glob() without converting to list or set
- Trying to read tmp_path as a file
- Using exists() incorrectly on tmp_path object
