pytest plugin for manipulating test data directories and files.
pytest-datadir
automatically looks for a directory matching your module's name or a global data
folder.
Consider the following directory structure:
.
├── data/
│ └── hello.txt
├── test_hello/
│ └── spam.txt
└── test_hello.py
You can access file contents using the injected fixtures:
datadir
(for module-specifictest_*
folders)shared_datadir
(for the globaldata
folder)
def test_read_global(shared_datadir):
contents = (shared_datadir / "hello.txt").read_text()
assert contents == "Hello World!\n"
def test_read_module(datadir):
contents = (datadir / "spam.txt").read_text()
assert contents == "eggs\n"
The contents of the data directory are copied to a temporary folder, ensuring safe file modifications without affecting other tests or original files.
Both datadir
and shared_datadir
fixtures return pathlib.Path
objects.
Version 1.7.0 introduced the lazy_datadir
fixture, which only copies files and directories when accessed via the joinpath
method or the /
operator.
def test_read_module(lazy_datadir):
contents = (lazy_datadir / "spam.txt").read_text()
assert contents == "eggs\n"
Unlike datadir
, lazy_datadir
is an object that only implements joinpath
and /
operations. While not fully backward-compatible with datadir
, most tests can switch to lazy_datadir
without modifications.
MIT.