如果不满足条件,一开始就停止 pytest
Stop pytest right at the start if condition not met
如果某些条件不满足,任何阻止整个 pytest 运行 在早期阶段发生的方法。比如发现Elasticsearch服务不是运行ning?
我试过把它放在一个由所有测试文件导入的公共文件中:
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)
...但是正在对每个文件和每个文件中的每个测试进行 运行 测试,并且还会产生大量与错误相关的输出。
显然我想做的是在收集阶段的一开始就停止 运行。
显然,我也可以编写一个脚本,在使用我可能传递给它的任何 CLI 参数调用 pytest
之前检查任何必要的条件。这是实现此目标的唯一方法吗?
是的,MrBeanBremen 的解决方案也可以,conftest.py 中的代码如下:
@pytest.fixture(scope='session', autouse=True)
def check_es():
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)
尝试使用 pytest_configure
initialization hook.
在你的全局 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)
更新:
- 请注意
pytest_configure
的单个参数必须 命名为 config!
- 使用
pytest.exit
使它看起来更好。
如果某些条件不满足,任何阻止整个 pytest 运行 在早期阶段发生的方法。比如发现Elasticsearch服务不是运行ning?
我试过把它放在一个由所有测试文件导入的公共文件中:
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)
...但是正在对每个文件和每个文件中的每个测试进行 运行 测试,并且还会产生大量与错误相关的输出。
显然我想做的是在收集阶段的一开始就停止 运行。
显然,我也可以编写一个脚本,在使用我可能传递给它的任何 CLI 参数调用 pytest
之前检查任何必要的条件。这是实现此目标的唯一方法吗?
是的,MrBeanBremen 的解决方案也可以,conftest.py 中的代码如下:
@pytest.fixture(scope='session', autouse=True)
def check_es():
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)
尝试使用 pytest_configure
initialization hook.
在你的全局 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)
更新:
- 请注意
pytest_configure
的单个参数必须 命名为 config! - 使用
pytest.exit
使它看起来更好。