接口自动化测试——文件上传/下载
文件上传/下载接口与普通接口类似,但是有细微的区别。如果需要发送文件到服务器,例如:上传文档、图片、视频等,就需要发送二进制数据,上传文件一般使用的都是数据类型,可以发送文件,也可以发送相关的消息体数据。反之,文件下载就是将二进制格式的响应内容存储到本地,并根据需要下载的文件格式来写文件名,例如:F:/caituotuo-file.pdf。
我们在做接口自动化测试的时候,经常会碰到文件上传接口和文件下载接口。
那么,文件接口跟普通接口有什么区别呢?又该如何实现呢?
〇、前言
文件上传/下载接口与普通接口类似,但是有细微的区别。
如果需要发送文件到服务器,例如:上传文档、图片、视频等,就需要发送二进制数据,上传文件一般使用的都是 Content-Type: multipart/form-data 数据类型,可以发送文件,也可以发送相关的消息体数据。
反之,文件下载就是将二进制格式的响应内容存储到本地,并根据需要下载的文件格式来写文件名,例如:F:/caituotuo-file.pdf。
一、文件上传接口
1. 接口文档
Request URL:/createfile
Request Method:POST
Content-Type:multipart/form-data

2. 代码实现
(1)实现步骤:
-
构造文件数据,通过open()函数以二进制方式打开文件
文件上传接口参数与普通post请求一样,需要写成Key和Value模式,Key为参数名称file(也是组件的name属性),Value为一个元组(与普通接口不同的地方)

-
"file": ( -
"caituotuo-file.pdf", # 元组第一个值为文件名称,没有则取None -
open(r"F:\caituotuo-file.pdf", "rb"), # 若第一个值非None,则取文件open打开的二进制流,否则直接写文件路径,如"F:\caituotuo-file.pdf" -
"pdf" # 文件类型 -
)
-
"file": ( -
None, -
"F:\caituotuo-file.pdf" -
)
-
-
构造其他数据
-
{ -
"title": "接口上传的文件", -
"fileType": "pdf" -
}
-
-
发送请求,将文件数据以
files参数传入,其他消息体数据通过data、headers、cookies等传入-
req = { -
"url": "127.0.0.1/createfile", -
"method": "POST", -
"headers": {}, -
"files": {"file": ("caituotuo-file.pdf", open(r"F:\caituotuo-file.pdf", "rb"), "pdf")}, -
"data": { -
"title": "接口上传的文件", -
"fileType": "pdf" -
} -
}
-
(2)完整代码
-
# -*- coding:utf-8 -*- -
# 作者:爱吃 香菜 -
# 时间:2022/3/12 21:04 -
# 功能:上传文件demo -
import requests -
class Createfile: -
-
def createfile(self): -
req = { -
"url": "127.0.0.1/createfile", -
"method": "POST", -
"headers": {}, -
"files": {"file": ("", open(r"F:\caituotuo-file.pdf", "rb"), "pdf")}, -
"data": { -
"title": "接口上传的文件", -
"fileType": "pdf" -
} -
} -
res = requests.request(**req) -
assert res.status_code == 200 -
res_json = res.json() -
return res_json["result"]["id"] -
if __name__ == '__main__': -
Createfile().createfile()
二、文件下载接口
1. 接口文档
Request URL:/download
Request Method:GET

2. 代码实现
-
# -*- coding:utf-8 -*- -
# 作者:爱吃 香菜 -
# 时间:2022/4/5 2:56 -
# 功能:下载文件demo -
import requests -
class Download: -
def download(self): -
req = { -
"url": "127.0.0.1/download", -
"method": "GET", -
"headers": {}, -
"params": { -
"id": 2947403045981869536, -
"downloadItems": ["NORMAL"], -
"needCompressForOneFile": False -
}, -
} -
res = requests.request(**req).content # 注意“.content"获取返回内容 -
# with open("F:/response.zip", "wb") as f: # 多份文件返回压缩包 -
with open("F:/response.pdf", "wb") as f: -
f.write(res) -
return res -
if __name__ == '__main__': -
Download().download()
以上,完。
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。
更多推荐




所有评论(0)