Error caused by pytest arg value being treated as a test path

Question:

I run pytest from command line using the command:

python -m pytest tests --server_image default

where --server_image is an argument defined in conftest.py file:

def pytest_addoption(parser):
        parser.addoption("--server_image", action="store_true", default="build_image")
        parser.addoption("--other_attr", action="store_true", default="True")
        ...

with 2 possible string values build_image and default. tests is a directory with the tests. I got an error message ERROR: file or directory not found: default. So pytest treats default as path to the test directory and not as a value of the argument. When i do not pass any argument everything works. Pytest version 7.0.0, python 3.8.12. Does anyone have a clue what could be wrong?

Asked By: Andrey Kite Gorin

||

Answers:

In your conftest.py file, --server_image is set to action="store_true", which means the variable is expected to be in a boolean format that becomes True if you call --server_image on the command-line. When doing so, --server_image can take no additional arguments, so the default becomes a completely separate argument. It would be the equivalent of calling:

python -m pytest default tests --server_image

… which is NOT what you want because you’ll get the error from default unless that’s the name of a folder.

Instead, you should change your conftest.py file so that you use action="store" instead for --server_image. And you’ll need to set a destination into the dest field. That will let you use --server_image default so that you can assign a value.

def pytest_addoption(parser):
    parser.addoption(
        "--server_image",
        action="store",
        dest="server_image",
        default="build_image",
    )
    parser.addoption(
        "--other_attr",
        action="store",
        dest="other_attr",
        default=None,
    )
Answered By: Michael Mintz
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.