Python 如何检查预期数据是否通过post或put请求发送?
我正在使用并且正在尝试找出如何断言已正确调用Python 如何检查预期数据是否通过post或put请求发送?,python,python-requests,mocking,requests-mock,Python,Python Requests,Mocking,Requests Mock,我正在使用并且正在尝试找出如何断言已正确调用put请求: 定义要测试的功能(): 请求( headers={'X-API-Key':'API_-Key'}, url=url, params={'param1':'foo'}, data='这是数据' ) def测试上传(请求模拟): url='1〕http://example.com/upload' 请求\u mock.put(url,text='ok') 功能有待测试() #如何检查'data'是否为'This is the data',以及
put
请求:
定义要测试的功能():
请求(
headers={'X-API-Key':'API_-Key'},
url=url,
params={'param1':'foo'},
data='这是数据'
)
def测试上传(请求模拟):
url='1〕http://example.com/upload'
请求\u mock.put(url,text='ok')
功能有待测试()
#如何检查'data'是否为'This is the data',以及'headers'是否包含'X-API-Key'?
编辑:我将要测试的代码重构为一个名为
function\u to\u be\u tested
的函数。如果您只想检查正在使用的方法,可以通过验证发送的请求来检查
def test_upload(requests_mock: Any):
url = 'http://example.com/upload'
requests_mock.put(url, text='ok')
r = requests.put(
headers={'X-API-Key': 'api_key'},
url=url,
params={'param1': 'foo'},
data='This is the data'
)
print(r.request.method) # Prints PUT/POST
print(r.request.headers) # Prints your headers sent
print(r.request.body) # Prints your data sent
我已经在上面的代码中包含了请求头/正文,以防您还想检查其他参数。如果您只想检查正在使用的方法,您可以通过验证发送的请求来检查
def test_upload(requests_mock: Any):
url = 'http://example.com/upload'
requests_mock.put(url, text='ok')
r = requests.put(
headers={'X-API-Key': 'api_key'},
url=url,
params={'param1': 'foo'},
data='This is the data'
)
print(r.request.method) # Prints PUT/POST
print(r.request.headers) # Prints your headers sent
print(r.request.body) # Prints your data sent
我已经在上面的代码中包含了请求头/正文,以防您还想检查其他参数。执行此操作的标准方法是运行您的函数,然后在: 更改示例,因为我总是需要一段时间才能使pytest正常工作,但它的工作方式基本相同:
import requests
import requests_mock
def funtion_to_be_tested():
requests.put(
headers={'X-API-Key': 'api_key'},
url=url,
params={'param1': 'foo'},
data='This is the data'
)
with requests_mock.mock() as m:
url = 'http://example.com/upload'
m.put(url, text='ok')
funtion_to_be_tested()
assert m.last_request.headers['X-API-Key'] == 'api_key'
assert m.last_request.text == 'This is the data'
执行此操作的标准方法是运行函数,然后对以下内容进行断言: 更改示例,因为我总是需要一段时间才能使pytest正常工作,但它的工作方式基本相同:
import requests
import requests_mock
def funtion_to_be_tested():
requests.put(
headers={'X-API-Key': 'api_key'},
url=url,
params={'param1': 'foo'},
data='This is the data'
)
with requests_mock.mock() as m:
url = 'http://example.com/upload'
m.put(url, text='ok')
funtion_to_be_tested()
assert m.last_request.headers['X-API-Key'] == 'api_key'
assert m.last_request.text == 'This is the data'
谢谢你的回答。我的问题可能不够清楚,我想测试什么。如果使用正确的数据调用API,我将测试什么。请求的处理在要测试的代码中完成,我无法访问
请求的返回值。请放入。谢谢您的回答。我的问题可能不够清楚,我想测试什么。如果使用正确的数据调用API,我将测试什么。请求的处理在要测试的代码中完成,我无法访问request.put的返回值。