Я пытаюсь смоделировать запрос get с помощью requests_mock
, но, похоже, он не получается правильно.
Моя функция вызывает сторонний API, определенный в файле lookup.py
:
from botocore.vendored import requests
def get_data():
url = 'https://abc.something.com/datapackage'
url_params={
'v': 2,
'auth_apikey':'xyz'
}
resp = requests.get(url, params=url_params)
return resp.json()
Я использую py.test
для запуска моих тестов и в моем тестовом файле. У меня есть приспособление:
import requests_mock
import requests, pytest
from lookup import get_data
@pytest.fixture
def req_mock(request):
m = requests_mock.Mocker()
m.start()
request.addfinalizer(m.stop)
return m
def test_api_gets_data(req_mock):
sample={
'key1':123
}
lookup_url = 'https://abc.something.com/datapackage'
query_params = {
'v': 2,
'auth_apikey':'xyz'
}
req_mock.get(lookup_url, json=sample)
resp = get_data()
По-видимому, requests_mock
не может использовать тот же сеанс, что и запросы в функции get
, поэтому его не осмеивают.
Есть ли лучший способ сделать это?
Я использую Python 3.6, запросы 2.18, запросы-макет 1.52 и pytest 3.0.7.