How to pass environment variables to pytest
Before I start executing the tests in my Python project, I read some environment variables and set some variables with these values read. My tests will run on the desired environment based on these values read.
For eg: Let's say the environment variables are called ENV_NAME
and ENV_NUMBER
Now, I would like to run the tests using py.test.
If I hard code these environment variables, for eg: ENV_NAME = 'staging', ENV_NUMBER = '5'
in my code and then run the tests by executing the py.test command at the root of the project directory, all the tests run successfully.
But, I don't want to hardcode these values. Is there a way, I can send these environment variables as command line arguments for py.test?
I was thinking more in the lines of
py.test -ENV_NAME='staging' -ENV_NUMBER='5'.
But, this is not working.
Solution 1:
Another alternative is to use the pytest-env plugin. It can be configured like so:
[pytest]
env =
HOME=~/tmp
D:RUN_ENV=test
the D:
prefix allows setting a default value, and not override existing variables passed to py.test
.
Note: you can explicitly run pytest with a custom config, if you only sometimes need to run a specialized environment set up:
pytest -c custom_pytest.ini
If you use PyCharm vs pytest-dotenv, this may be helpful
Solution 2:
In addition to other answers. There is an option to overwrite pytest_generate_tests
in conftest.py
and set ENV variables there.
For example, add following into conftest.py
:
import os
def pytest_generate_tests(metafunc):
os.environ['TEST_NAME'] = 'My super test name| Python version {}'.format(python_version)
This code will allow you to grab TEST_NAME
ENV variable in your tests application. Also you could make a fixture:
import os
import pytest
@pytest.fixture
def the_name():
return os.environ.get('TEST_NAME')
Also, this ENV variable will be available in your application.
Solution 3:
I finally found the answer i was looking for.
we can set the environment variables like this before running tests using py.test
ENV_NAME='staging' ENV_NUMBER='5' py.test