I have a pytest file which requires environment being set. So I add the following decorator on every function.
@pytest.mark.skipif('password' not in os.environ,
reason='Environment variable "password" not set.')
def test_1(mock):
....
@pytest.mark.skipif('password' not in os.environ,
reason='Environment variable "password" not set.')
def test_2(mock):
....
@pytest.mark.skipif('password' not in os.environ,
reason='Environment variable "password" not set.')
def test_3(mock):
....
Is it a way to skip all the test instead of decorating each test function?
BTW, it just skip the tests with the following message. Is it a way to display a warning information of missing environment variable?
====== 25 skipped in 5.96s =======
You can use a fixture with autouse=True
that does the skipping for you:
@pytest.fixture(autouse=True)
def skip_if_no_password():
if 'password' in os.environ:
yield
else:
pytest.skip('Environment variable "password" not set.')
Another possibility is to put the tests into a class and put the marker on the class instead, as mentioned by Luke Nelson in the comments.