接口自动化测试 —— 文件上传/下载
阅读本文大概需要4分钟。
我们在做接口自动化测试的时候,经常会碰到文件上传接口
和文件下载接口
。
那么,文件接口跟普通接口有什么区别呢?又该如何实现呢?
〇、前言
文件上传/下载接口
与普通接口
类似,但是有细微的区别。
如果需要发送文件到服务器,例如:上传文档、图片、视频等,就需要发送二进制数据,上传文件一般使用的都是 Content-Type: multipart/form-data
数据类型,可以发送文件,也可以发送相关的消息体数据。
反之,文件下载就是将二进制格式的响应内容存储到本地,并根据需要下载的文件格式来写文件名,例如:F:/caituotuo-file.pdf。
一、文件上传接口
1. 接口文档
Request URL:/createfile
Request Method:POST
Content-Type:multipart/form-data
名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
file | File | 是 | 文件 |
title | String | 是 | 文件名称 |
fileType | String | 是 | 文件类型:doc, docx, txt, pdf, png, gif, jpg, jpeg, tiff, html, rtf, xls, txt |
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
名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
id | Long | 是 | 文件组id |
downloadItems | String[] | 否 | 下载可选项 |
needCompressForOneFile | Boolean | 是,默认单文件也压缩 | 当下载的文件仅一份时,是否压缩 |
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()
以上,完。脚踏实地,仰望星空,和小码哥一起学习软件测试,升职加薪!
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些对想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……
相关文章
- FFMPEG视频切片TS文件添加PNG文件头伪图片上传
- 第六章·Linux文件管理-VIM编辑
- 技术分享 | 接口自动化测试中,文件上传该如何测试?
- java文件上传服务器路径,java文件上传服务器路径地址「建议收藏」
- 【小程序】微信小程序开发在app.json中新建页面时报[ WXML 文件编译错误] (env: Windows,mp,1.06.2206090; lib: 2.25.0)
- OpenSSL生成证书及pfx文件「建议收藏」
- AppStore 打包上传后提示“二进制文件无效” 的解决方法
- linux之文件管理
- springboot文件上传方法详解
- 如何使用Java的JAR文件
- DVWA漏洞演练平台 - 文件上传
- CTF 解题记录-文件上传基础
- linux xshell 快速上传文件到服务器详解程序员
- Struts2文件的上传与下载详解编程语言
- springMVC3学习(十一)–文件上传CommonsMultipartFile详解编程语言
- springboot 文件上传大小配置详解编程语言
- 修改Linux文件执行权限的正确方法(linux文件执行权限)
- Python open()打开文件
- 快速清空Linux日志文件的方法(linux清空日志文件)
- Linux文件命名法:有效率的管理方式(linux命名文件)
- Linux下快速重命名文件的方法(linux文件重命名)
- Linux环境下本地文件快速上传指南(linux本地上传文件)
- 文件SSH实现Linux系统间文件上传(sshlinux上传)
- Linux下的Cat命令: 无处不在的文件伴侣(cat命令linux)
- Linux下寻找文件的创建日期(linux查找文件日期)
- 存储深入浅出:SQLServer文件存储技术(sqlserver 文件)
- 如何在Linux中使用命令进行文件改名(linux命令改名)
- MSSQL注入漏洞防范之文件上传安全(mssql注入上传)
- MySQL如何处理上传大文件问题(mysql 上传大文件)
- Oracle数据库 文件上传技术实现(oracle 上传语句)
- phpftp文件上传函数(基础版)
- 简单的php文件上传(实例)
- python读取Androidpermission文件
- Linux查找包含指定文字的文件(linux查找指定文件)
- Extjs的FileUploadField文件上传出现了两个上传按钮