gpt4 book ai didi

python - requests-mock:如何匹配模拟端点中的 POSTed 有效负载

转载 作者:行者123 更新时间:2023-12-05 02:49:39 29 4
gpt4 key购买 nike

我做了什么

我已经编写了一个身份验证类,用于使用应用程序的 API key 及其 API key secret 从 Twitter 获取应用程序的bearer token 作为在 the Twitter developer docs 中展示.

我以这种方式使用 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}"},
)

我的测试方法是:

@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

(其中 TwitterBasicAuth 是我编写的身份验证类,fixture basic_auth_string 是一个硬编码字符串,可以通过转换 fixture api_keyapi_key_secret 适当)。

而且有效。

问题

但我对模拟端点不检查负载这一事实感到非常困扰。在这种特殊情况下,有效负载对于获取不记名 token 至关重要。

我已经梳理了 requests_mock(以及 responses)的文档,但还没有弄清楚如何让端点仅在以下情况下使用不记名 token 进行响应已发布正确的负载。

请帮忙。

最佳答案

我认为这里的误解是您需要将所有内容都放在匹配器中,然后让 NoMatchException 告诉您是否正确。

匹配器可能是返回正确响应所需的最简单的东西,然后您可以将所有请求/响应检查作为正常单元测试处理的一部分。

例如,如果您需要根据请求的主体切换响应值,additional_matchers 很有用,通常 true/false 就足够了。

例如,我没有尝试为此查找 Twitter 身份验证:

import requests
import requests_mock

class TwitterBasicAuth(requests.auth.AuthBase):

def __init__(self, api_key, api_key_secret):
self.api_key = api_key
self.api_key_secret = api_key_secret

def __call__(self, r):
r.headers['x-api-key'] = self.api_key
r.headers['x-api-key-secret'] = self.api_key_secret
return r


with requests_mock.mock() as m:
api_key = 'test'
api_key_secret = 'val'

m.post(
"https://api.twitter.com/oauth2/token",
json={"token_type": "bearer", "access_token": "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()['token_type'] == "bearer"
assert response.json()['access_token'] == "token"
assert m.last_request.headers['x-api-key'] == api_key
assert m.last_request.headers['x-api-key-secret'] == api_key_secret

https://requests-mock.readthedocs.io/en/latest/history.html

关于python - requests-mock:如何匹配模拟端点中的 POSTed 有效负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63957899/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com