经过我自己的多次尝试以及大量的 ChatGPT 和 Claude 查询后,我举手向 StackOverflow 询问一个看似简单的问题:
如何在全球范围内阻止 OpenAI 发出 HTTP 请求当使用 pytest 进行测试时?
我尝试过的事情(这个列表可能会忘记很多):
-
使用
httpx-blockage
-
在
conftest.py
添加 OpenAI 补丁:
@pytest.fixture(autouse=True)
def block_azure_openai():
with patch.object(AzureOpenAI, '__init__', return_value=None):
yield
-
在
conftest.py
补丁 OpenAI| ||和 返回 OpenAI 客户端实例的实用函数: 修补 AsyncClient
@pytest.fixture(autouse=True)
def block_httpx(monkeypatch):
with patch('ai.utils.get_openai_client', return_value=Mock()), patch('ai.utils.AzureOpenAI', return_value=None):
yield
- 修补客户端
@pytest.fixture(scope='session')
async def block_httpx(monkeypatch):
async def mock_httpx_request(*args, **kwargs):
raise RuntimeError("HTTPx requests are blocked during tests")
monkeypatch.setattr(httpx.AsyncClient, "request", mock_httpx_request)
# Add more if needed for other methods like .get, .post, etc.
- 这些都不起作用,在运行测试时我继续在 Azure 的指标中看到,请求进来。
@pytest.fixture(scope='session')
def block_httpx(monkeypatch):
def mock_httpx_request(*args, **kwargs):
raise RuntimeError("HTTPx requests are blocked during tests")
with patch('httpcore'):
monkeypatch.setattr(httpx.Client, "request", mock_httpx_request)
yield
我剩下的唯一想法就是退出这份工作,这样用户故事就可以成为别人的问题。希望这里有人能有比这更好的
标签:python,unit-testing,openai-api,azure-openai From: 78776267