使用 requests_mock 检查请求中的查询字符串
Check query string on the request using requests_mock
如何检查 requests_mock 模拟的请求是否向 URL 添加了一些查询参数?
我有一个函数 func
,它在 url 上执行 HTTP POST,在 URL 上使用一些查询字符串,我想检查是否被调用这个查询字符串。
这是我的尝试,但失败了。
query
是空字符串,qs
是空字典。
我确定我的函数在请求中附加了查询字符串。
with requests_mock.Mocker() as mock:
mock.post(url, text=xml)
func() # This function will call url + query string
history = mock.request_history[0]
assert history.method == "POST" # OK
assert history.query is None # Returns an empty string, AssertionError: assert '' is None
assert history.qs is None # Returns an empty dict, assert {} is None
我的func
def credilink():
url = settings["url"]
params = settings["params"]
params["CC"] = query
response = requests.post(url, params=params)
# ...
我试图重现您的问题,但无法...
这是我的代码 运行:
import requests
import requests_mock
url = "http://example.com"
settings = dict(url=url, params=dict(a=1))
query = "some-query"
xml = "some-xml"
def credilink():
url = settings["url"]
params = settings["params"]
params["CC"] = query
response = requests.post(url, params=params)
return response.text
# ...
def test():
with requests_mock.Mocker() as mock:
mock.post(url, text=xml)
data = credilink() # This function will call url + query string
history = mock.request_history[0]
assert history.method == "POST" # OK
assert history.qs == dict(a=['1'], cc=[query])
assert history.query == f"a=1&cc={query}"
assert data == xml
断言在此代码段中通过。
也许这是一些版本问题?我使用了 requests==2.25.1 和 requests-mock==1.8.0.
如何检查 requests_mock 模拟的请求是否向 URL 添加了一些查询参数?
我有一个函数 func
,它在 url 上执行 HTTP POST,在 URL 上使用一些查询字符串,我想检查是否被调用这个查询字符串。
这是我的尝试,但失败了。
query
是空字符串,qs
是空字典。
我确定我的函数在请求中附加了查询字符串。
with requests_mock.Mocker() as mock:
mock.post(url, text=xml)
func() # This function will call url + query string
history = mock.request_history[0]
assert history.method == "POST" # OK
assert history.query is None # Returns an empty string, AssertionError: assert '' is None
assert history.qs is None # Returns an empty dict, assert {} is None
我的func
def credilink():
url = settings["url"]
params = settings["params"]
params["CC"] = query
response = requests.post(url, params=params)
# ...
我试图重现您的问题,但无法...
这是我的代码 运行:
import requests
import requests_mock
url = "http://example.com"
settings = dict(url=url, params=dict(a=1))
query = "some-query"
xml = "some-xml"
def credilink():
url = settings["url"]
params = settings["params"]
params["CC"] = query
response = requests.post(url, params=params)
return response.text
# ...
def test():
with requests_mock.Mocker() as mock:
mock.post(url, text=xml)
data = credilink() # This function will call url + query string
history = mock.request_history[0]
assert history.method == "POST" # OK
assert history.qs == dict(a=['1'], cc=[query])
assert history.query == f"a=1&cc={query}"
assert data == xml
断言在此代码段中通过。 也许这是一些版本问题?我使用了 requests==2.25.1 和 requests-mock==1.8.0.