Python `requests_mock`适用于所有请求,即使它们未设置并引发NoMockAddress异常

Python `requests_mock`适用于所有请求,即使它们未设置并引发NoMockAddress异常,python,integration-testing,pytest,pytest-mock,requests-mock,Python,Integration Testing,Pytest,Pytest Mock,Requests Mock,我发现requests\u mock用作pytest的固定装置适用于所有请求,即使它们没有设置 我不确定这是一个请求\u 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

我发现
requests\u mock
用作
pytest
的固定装置适用于所有请求,即使它们没有设置

我不确定这是一个
请求\u 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/')
我正在使用API端点的
pytest
requests mock
pytest mock
编写集成测试。在幕后,这个端点对我需要模拟的不同的第三方API进行了多次调用

其中一些调用可以由
请求\u mock
模拟。 但有些人不能,因为他们从第三方模块内部打电话

我尝试使用
pytestmock
来模拟最后一个,结果发现它基本上不起作用。
请求\u mock
仍在尝试模拟该调用,并引发下一个错误:
请求\u mock.exceptions.nomock地址:无模拟地址:获取https://api-b.com/

如上所述,您可以通过在启动
请求\u mock.Mocker()时设置
real\u http=True
来实现此行为

但是没有提到如何将它与
pytest
一起使用。 当
pytest
test将请求作为参数(fixture)接收到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/')
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/')