0

我发现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/')

我正在使用pytestrequests-mockpytest-mock为 API 端点编写集成测试。在后台,这个端点对我需要模拟的不同第三方 API 进行了多次调用。

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

我试图用pytest-mockmock最后一个,发现它基本上不起作用。 requests_mock仍在尝试模拟该调用并引发下一个错误: requests_mock.exceptions.NoMockAddress: No mock address: GET https://api-b.com/

4

1 回答 1

2

正如requests-mockdoc所说,您可以通过real_http=True在启动requests_mock.Mocker().

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

但没有说如何使用它pytest。由于pytesttest 接收 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/')
于 2020-11-09T14:51:46.767 回答