接口自动化测试——文件上传/下载

简介: 轻松搞定文件上传接口和文件下载接口。

我们在做接口自动化测试的时候,经常会碰到文件上传接口文件下载接口

那么,文件接口跟普通接口有什么区别呢?又该如何实现呢?

〇、前言

文件上传/下载接口普通接口类似,但是有细微的区别。

如果需要发送文件到服务器,例如:上传文档、图片、视频等,就需要发送二进制数据,上传文件一般使用的都是 Content-Type: multipart/form-data 数据类型,可以发送文件,也可以发送相关的消息体数据。

反之,文件下载就是将二进制格式的响应内容存储到本地,并根据需要下载的文件格式来写文件名,例如:F:/caituotuo-file.pdf。

一、文件上传接口
1. 接口文档

Request URL: /createfile

Request Method: POST

Content-Type: multipart/form-data

名称类型是否必须描述
fileFile文件
titleString文件名称
fileTypeString文件类型:doc, docx, txt, pdf, png, gif, jpg, jpeg, tiff, html, rtf, xls, txt
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:1150305204【暗号:csdn999】

2. 代码实现
(1)实现步骤:
  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"
)
2.构造其他数据
{
    "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 -*-
# 作者:秦玖
# 时间:2024/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

名称类型是否必须描述
idLong文件组id
downloadItemsString[]下载可选项
needCompressForOneFileBoolean是,默认单文件也压缩当下载的文件仅一份时,是否压缩
2. 代码实现
# -*- coding:utf-8 -*-
# 作者:秦玖
# 时间:2024/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()

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!

软件测试面试文档

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

在这里插入图片描述

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值