`requests_mock` 适用于所有请求,即使它们未设置并抛出 NoMockAddress 异常
`requests_mock` applies to all requests even if they are not set and throws NoMockAddress exception
我发现 requests_mock
用作 pytest
的固定装置适用于所有请求,即使它们未设置也是如此。
我不确定这是 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/')
我正在使用 pytest
、requests-mock
和 pytest-mock
为 API 端点编写集成测试。在幕后,这个端点多次调用我需要模拟的不同第三方API。
其中一些调用可以被 requests_mock
模拟。
但是他们中的一些人不能,因为他们从第三方模块内部进行调用。
我试过用pytest-mock
模拟最后一个,发现基本不行。
requests_mock
仍在尝试模拟该调用并抛出下一个错误:
requests_mock.exceptions.NoMockAddress: No mock address: 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 对象作为参数(夹具),您可以在测试中显式设置它。
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/')
我发现 requests_mock
用作 pytest
的固定装置适用于所有请求,即使它们未设置也是如此。
我不确定这是 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/')
我正在使用 pytest
、requests-mock
和 pytest-mock
为 API 端点编写集成测试。在幕后,这个端点多次调用我需要模拟的不同第三方API。
其中一些调用可以被 requests_mock
模拟。
但是他们中的一些人不能,因为他们从第三方模块内部进行调用。
我试过用pytest-mock
模拟最后一个,发现基本不行。
requests_mock
仍在尝试模拟该调用并抛出下一个错误:
requests_mock.exceptions.NoMockAddress: No mock address: 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 对象作为参数(夹具),您可以在测试中显式设置它。
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/')