Running pytest when the test files are in a different directory to the source files
Last updated: Jan 24, 2023
I had a battle to get my testing directory structure to work outside of an IDE. Please find my solution below. Tested on Windows 7 using python 3.6 and Linux Mint using python 3.4, running the code using the command line:
python -m pytest test_compress_files.py
The file I wrote to be tested is called compress_files.py in a directory named \src. The file containing tests to be run using pytest is called test_compress_files.py in a subdirectory \tests, so the full directory path is \src\tests. I needed to add a file called context.py to the \src\tests directory. This file is used in test_compress_files.py to enable access to compress_files.py in the directory above. The init.py files are empty.
\src __init__.py compress_files.py \src\tests __init__.py context.py test_compress_files.py
compress_files.py contains the script to be tested.
import os import sys sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) import compress_files
comes from the suggestion at the hitch hikers guide to python at:
This adds the path of the directory above the /src/tests directory to sys.path, which in this case is /src.
import os import pytest from context import compress_files from compress_files import * # tests start here ...
I put this up as an answer to a stackoverflow question here.