py.test plugin to create a 'tmpdir' containing predefined files/directories.
Project description
pytest plugin to create a tmpdir containing a preconfigured set of files and/or directories.
Features
This plugin allows you to specify one or several files that will be copied to a temporary directory (tmpdir) before the execution of the test. This means the original files are not modified and every test runs on its own version of the same files.
Files can be specified either as strings or as py.path objects.
The test function that wants to take advantage of this datafiles fixture needs to use datafiles as one of its parameters (as usual with pytest fixtures) and needs to be decorated with @pytest.mark.datafiles(file1, file2, …). See examples below.
The datafiles variable in your test function is a py.path object (tmpdir) where the copied files are located. Under Linux systems this will most likely be some subdirectory of /tmp/.
Currently only files not directories are supported but this will change in future releases.
Installation
pip install pytest-datafiles
Usage
Example 1
One possible use case would be: You are running tests on very big files that are not included/packaged with your tests. For instance big video files stored under /opt/big_files/ . You don’t want your tests modifying the original files but the files are required by the tests.
import pytest
@pytest.mark.datafiles('/opt/big_files/film1.mp4')
def test_fast_forward(datafiles):
assert len(datafiles.listdir()) == 1
assert (datafiles / 'film1.mp4').check(file=1)
# assert some_operation(datafiles / 'film1.mp4') == expected_result
Example 2
Another use case is: In the directory where your tests are located you placed a directory named test_files. Here you placed a lot of images you want to run tests on. By using this plugin you make sure the original files under test_files are not modified by every test.
import os
import py
import pytest
FIXTURE_DIR = py.path.local(
os.path.dirname(
os.path.realpath(__file__)
)
) / 'test_files'
@pytest.mark.datafiles(
FIXTURE_DIR / 'img1.jpg',
FIXTURE_DIR / 'img2.jpg',
FIXTURE_DIR / 'img3.jpg',
)
def test_find_borders(datafiles):
for img in datafiles.listdir():
print(img)
#assert process(img) == some_expected_value
@pytest.mark.datafiles(
FIXTURE_DIR / 'img4.jpg',
FIXTURE_DIR / 'img5.jpg',
)
def test_brightness(datafiles):
for img in datafiles.listdir():
print(img)
#assert process(img) == some_expected_value
Example 3
If all (or many) of your tests rely on the same files it can be easier to define one decorator beforehand and apply it to every test.
ALL_IMGS = pytest.mark.datafiles(
FIXTURE_DIR / 'img1.jpg',
FIXTURE_DIR / 'img2.jpg',
FIXTURE_DIR / 'img3.jpg',
FIXTURE_DIR / 'img4.jpg',
FIXTURE_DIR / 'img5.jpg',
FIXTURE_DIR / 'img6.jpg',
FIXTURE_DIR / 'img7.jpg',
FIXTURE_DIR / 'img8.jpg',
)
@ALL_IMGS
def test_something1(datafiles):
for img in datafiles.listdir():
print(img)
#assert process(img) == some_expected_value
@ALL_IMGS
def test_something2(datafiles):
for img in datafiles.listdir():
print(img)
#assert process(img) == some_expected_value
Contributing
Contributions are very welcome. Tests can be run with tox, please ensure the coverage at least stays the same before you submit a pull request.
License
Distributed under the terms of the MIT license, “pytest-datafiles” is free and open source software.
Issues
If you encounter any problems, please file an issue along with a detailed description.
Acknowledgements
Thanks to @flub for the idea to use pytest marks to solve the problem this plugin is trying to solve.
Some ideas to improve this project were taken from the Cookiecutter templates cookiecutter-pypackage and cookiecutter-pytest-plugin.
Change Log
All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning. The change log is formatted as suggested by Keep a CHANGELOG.
0.1
Added
Specify one or multiple files to be copied by decorating the test function
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pytest_datafiles-0.1-py2-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ebfb9be005d095ba4877110270ceda5a1967409849833a7794cdddf989a0fe95 |
|
MD5 | 20fd566115f5cc3685d599185cfd1625 |
|
BLAKE2b-256 | a898b0e27603b9a8a63020728253540ad3d763faeace7b8cd77afa67d36688ac |