Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查预期数据是否通过post或put请求发送?_Python_Python Requests_Mocking_Requests Mock - Fatal编程技术网

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的返回值。