赞
踩
我们在做接口测试工作时,会遇到含有文件上传的接口。
抓到的上传接口的信息大概是以下这样子:
请求体的content-type为:
multipart/form-data; boundary=---------------------------(一堆数字)
请求体当中,除了有要上传的文件以外,还有其它的数据字段。
在下面的请求体截图当中,含有以下字段:
id: 文件的id
name: 文件的名字
type: 文件的类型。如果是图片则是image/png。若是图中的文本文件,则为application/octet-stream
lastModifiedDate:上一次修改时间。截图中为当前时间点
size: 文件的大小
file: 有文件名、文件类型、文件内容3项内容。
这样的接口,用requests如何来发送呢?
pip命令: pip install requests_toolbelt
from requests_toolbelt import MultipartEncoder
3.1 处理请求体
MultipartEncoder类,有一个fields参数,用来传递请求数据以及文件。
在实例化MultipartEncoder类,传递fields
fields: 字典类型。将请求数据放在此参数中
key为下图中的name的值。下图中的key分别为:id,name,type,lastModifiedDate,size,file
对于key为file的,它的值为一个元组:(文件名称,文件流对象(binary模式打开文件),文件类型)。
示例:"file":("chromedriver.log", open(file_path,"rb"), "application/octet-stream")})
上传文本文件的代码(实例化MultipartEncoder):
filesize = os.path.getsize(file_path) # 获取文件大小 m = MultipartEncoder(fields={"id":"lemon66", "name":"chromedriver.log", "type":"application/octet-stream", "lastModifiedDate":"Mon Nov 30 2020 20:21:44 GMT+0800 (中国标准时间)", "size":str(filesize), "file":("chromedriver.log",open(file_path,"rb"),"application/octet-stream")})
上传图片的代码(实例化MultipartEncoder):
# 上传文件为图片:图片类型不一样。 file_path = 'D:\\BaiduNetdiskDownload\\lemon_log_1.png' filesize = os.path.getsize(file_path) # 获取文件大小 m = MultipartEncoder(fields={"id":"lemon66", "name":"xiaojian.png", "type":"image/png", "lastModifiedDate":"Mon Nov 30 2020 20:21:44 GMT+0800 (中国标准时间)", "size":str(filesize), "file":("xiaojian.png",open(file_path,"rb"),"image/png")})
3.2 处理请求头的content-type
content-type要包含boundary。MultipartEncoder类定义了属性:content_type。
我们在代码当中,直接使用它的content-type来设置即可。
m = MultipartEncoder(fields={"id":"lemon66", "name":"chromedriver.log", "type":"application/octet-stream", "lastModifiedDate":"Mon Nov 30 2020 20:21:44 GMT+0800 (中国标准时间)", "size":str(filesize), "file":("chromedriver.log",open(file_path,"rb"),"application/octet-stream")}) # content-type # m.content_type # 发送上传文件的请求: resp = s.post(upload_url,data=m,headers={'Content-Type': m.content_type})
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。
如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步
在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。
我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,
测试开发视频教程、学习笔记领取传送门!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。