我目前正在尝试使用 requests_mock 库进行单元测试,以便修补请求。我编写了以下代码:
def test_general_search(requests_mock):
params = {'query': 'testsetset', 'exact': 0, 'max_pages': '1', 'category': 'username'}
requests_mock.get(f'{MOCK_ADDRESS}', json=MOCK_RESPONSE)
client = Client(MOCK_ADDRESS, auth=MOCK_CREDS, headers=MOCK_HEADERS)
res = general_search(client, params)
assert ...
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
requests_mock.exceptions.NoMockAddress: No mock address: GET https://fake-url.com/search?query=username%3Atestsetset&page=1
Run Code Online (Sandbox Code Playgroud)
谁能帮我弄清楚如何解决它?我使用模拟作为 pytest 功能。
我正在使用请求库发出 HTTP GET 请求。例如(截断):
requests.get("http://123-fake-api.com")
Run Code Online (Sandbox Code Playgroud)
我已经按照请求模拟装饰器模式编写了一个测试。
import requests
import requests_mock
@requests_mock.Mocker()
def test(m):
m.get("http://123-fake-api.com", text="Hello!")
response = requests.get("http://123-fake-api.com").text
assert response.text == "Hello!"
Run Code Online (Sandbox Code Playgroud)
当我使用pytest运行测试时,出现以下错误。
E fixture 'm' not found
Run Code Online (Sandbox Code Playgroud)
为什么请求模拟装饰器会抛出“找不到夹具‘m’”错误?我该如何解决?
mocking pytest python-requests python-decorators requests-mock
我编写了一个身份验证类,用于使用应用程序的API 密钥及其API 密钥机密从 Twitter获取应用程序的不记名令牌,如Twitter 开发人员文档中所示。
我使用这种方式模拟了适当的端点requests_mock:
@pytest.fixture
def mock_post_bearer_token_endpoint(
requests_mock, basic_auth_string, bearer_token
):
requests_mock.post(
"https://api.twitter.com/oauth2/token",
request_headers={
"Authorization": f"Basic {basic_auth_string}",
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
},
json={"token_type": "bearer", "access_token": f"{bearer_token}"},
)
Run Code Online (Sandbox Code Playgroud)
我的测试方法是:
@pytest.mark.usefixtures("mock_post_bearer_token_endpoint")
def test_basic_auth(api_key, api_key_secret, bearer_token):
response = requests.post(
'https://api.twitter.com/oauth2/token',
data={"grant_type": "client_credentials"},
auth=TwitterBasicAuth(api_key, api_key_secret),
)
assert response.json()['access_token'] == bearer_token
Run Code Online (Sandbox Code Playgroud)
(TwitterBasicAuth我编写的身份验证类在哪里,固定装置basic_auth_string是一个硬编码的字符串,可以通过适当地转换固定装置来获得api_key)api_key_secret。
它有效。
但我确实对模拟端点不检查有效负载这一事实感到困扰。在这种特殊情况下,有效负载对于获取不记名令牌至关重要。
requests_mock我已经梳理了(以及)的文档responses,但还没有弄清楚如何使端点仅在发布正确的有效负载时才使用不记名令牌进行响应。
请帮忙。
我发现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/')
Run Code Online (Sandbox Code Playgroud)
我正在使用pytest、requests-mock和pytest-mock作为 API 端点编写集成测试。在幕后,这个端点对我需要模拟的不同第三方 API 进行了多次调用。
其中一些调用可以被 嘲笑requests_mock。但其中一些不能,因为它们是从第三方模块内部进行调用的。
我尝试用pytest-mockmock最后一个发现它基本上不起作用。
requests_mock仍在尝试模拟该调用并抛出下一个错误:
requests_mock.exceptions.NoMockAddress: No mock address: GET https://api-b.com/