gpt4 book ai didi

python - `requests_mock` 适用于所有请求,即使它们未设置并抛出 NoMockAddress 异常

转载 作者:行者123 更新时间:2023-12-02 19:08:11 26 4
gpt4 key购买 nike

我发现 requests_mock 用作 pytest 的 fixture 适用于所有请求,即使它们未设置也是如此。

我不确定这是 requests_mock/pytest 错误还是我遗漏了什么。最终,我不需要模拟“api-b”调用,但我找不到如何避免它。

def test_reqs(requests_mock):
requests_mock.get('https://api-a.com/')
requests.get('https://api-b.com/')
assert requests.get('https://api-a.com/')

我正在使用 pytestrequests-mockpytest-mock 为 API 端点编写集成测试。在幕后,此端点多次调用我需要模拟的不同第三方 API。

requests_mock 可以模拟其中一些调用。但其中一些不能,因为他们从第三方模块内部进行调用。

我尝试用pytest-mock模拟最后一个,发现基本不行。requests_mock 仍在尝试模拟该调用并抛出下一个错误:requests_mock.exceptions.NoMockAddress: 没有模拟地址:GET https://api-b.com/

最佳答案

作为requests-mock doc说,您可以通过在启动 requests_mock.Mocker() 时设置 real_http=True 来实现此行为。

with requests_mock.Mocker(real_http=True) as m:
m.get('http://test.com', text='resp')
requests.get('http://test.com').text

但没有说明如何将它与 pytest 一起使用。由于 pytest 测试接收 request_mock 对象作为参数( fixture ),您可以在测试中显式设置它。

def test_reqs(requests_mock):
requests_mock.real_http = True

requests_mock.get('https://api-a.com/')
requests.get('https://google.com/')
assert requests.get('https://api-a.com/')

关于python - `requests_mock` 适用于所有请求,即使它们未设置并抛出 NoMockAddress 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64750259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com