How to override pytest.ini when running tests from the command line?

11.8k Views Asked by At

I have a codebase containing multiple python packages. There is also a pytest.ini file that contains the names of these files.

example directory structure:

main_dir
  |
  |
  |--- package1
  |
  |--- package2
  |
  |--- pytest.ini

pytest.ini looks like this

[pytest.ini]
addopts = package1 package2

The issue is because of pytest.ini I am not able to run tests just package wise. For example py.test package1\ now runs tests for package2 tests as well.

If I remove pytest.ini file, the command works as expected. Only option I see is to maintain an uncommitted version of pytest.ini which I keep changing according to my needs.

How do I override the pytest.ini settings and run tests only package wise?

3

There are 3 best solutions below

2
On

You can use -o/--override-ini. From pytest help text:

 -o OVERRIDE_INI, --override-ini=OVERRIDE_INI
                    override ini option with "option=value" style, e.g. `-o
                    xfail_strict=True -o cache_dir=cache`.

But your situation will require another workaround since your addopts options are not in the form option=value since it is a positional argument.

#pytest.ini file
[pytest]
   addopts = 
    -k="package1 or package2"

And, while running tests, you can use pytest -o k=package1. -k is used to select tests based on expression.

1
On

addopts is meant for mostly configuration options, since it always adds the given options entirely

if all test folders are always added, then of course it always find all tests

0
On
pytest -c MyTestGetJson.ini
pytest -c MyTestGetXML.ini