Any way of stopping the entire pytest run from happening at a very early stage if some condition is not met. For example, if it is found that the Elasticsearch service is not running?
I have tried putting this in a common file which is imported by all test files:
try:
requests.get('http://localhost:9200')
except requests.exceptions.ConnectionError:
msg = 'FATAL. Connection refused: ES does not appear to be installed as a service (localhost port 9200)'
pytest.exit(msg)
... but tests are being run for each file and each test within each file, and large amounts of error-related output is also produced.
Obviously what I am trying to do is stop the run at the very start of the collection stage.
Obviously too, I could write a script which checks any necessary conditions before calling pytest
with any CLI parameters I might pass to it. Is this the only way to accomplish this?
Try using the pytest_configure
initialization hook.
In your global conftest.py
:
import requests
import pytest
def pytest_configure(config):
try:
requests.get(f'http://localhost:9200')
except requests.exceptions.ConnectionError:
msg = 'FATAL. Connection refused: ES does not appear to be installed as a service (localhost port 9200)'
pytest.exit(msg)
Updates:
pytest_configure
has to be named config!pytest.exit
makes it look nicer.