pythonunit-testingtestingpytestsubdirectory

Using pytest where test in subfolder


I'm using python pytest to run my unit tests. My project folders are:

Main - contains data file: A.txt

Main\Tests - the folder from which I run pytest

Main\Tests\A_test - folder that contains a test file

The test in A_test folder uses the file A.txt (that is in Main folder).

My problem is that when I run py.test the test fails because it can't find A.txt.

I found out that it is because pytest uses the path Main\Test when running the test instead of changing the path to Main\Tests\A_test (I'm using relative path when opening A.txt inside the test file)

My question: is there a way to make pytest change directory to the folder of the test it executes for each test? so that relative paths inside the tests will still work?

Is there some other generic way to solve it? (I don't want to change everything to absolute paths or something like this, also this is an example, in real life I have several hundreds tests).

Thank you,

Noam


Solution

  • Well I kind of solved it, not sure it is the best way but it is working:

    In each of the tests:

    1. I check if the test is being executed from it directory or from \Main\Tests
    2. If it is being executed from \Main\Tests then I chdir to \Main\Tests\A_test

    I do this under the def setUpClass method.

    For example:

    @classmethod
    def setUpClass(cls):
        if (os.path.exists(os.path.join(os.curdir, "A_test"))):
            os.chdir("A_test")
    

    This makes the test pass no matter if it is executed from Tests folder (with pytest) or from A_test folder (through pycharm)