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

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

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

〇、前言

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

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

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

一、文件上传接口

1. 接口文档

Request URL:/createfile

Request Method:POST

Content-Type:multipart/form-data

2. 代码实现

(1)实现步骤:

  1. 构造文件数据,通过open()函数以二进制方式打开文件

    文件上传接口参数与普通post请求一样,需要写成Key和Value模式,Key为参数名称file(也是组件的name属性),Value为一个元组(与普通接口不同的地方)

    1. "file": (

    2.     "caituotuo-file.pdf", # 元组第一个值为文件名称,没有则取None

    3.     open(r"F:\caituotuo-file.pdf", "rb"), # 若第一个值非None,则取文件open打开的二进制流,否则直接写文件路径,如"F:\caituotuo-file.pdf"

    4.     "pdf" # 文件类型

    5. )

     
      
    1. "file": (

    2.     None,

    3.     "F:\caituotuo-file.pdf"

    4. )

  2. 构造其他数据

    1. {

    2.     "title": "接口上传的文件",

    3.     "fileType": "pdf"

    4. }

  3. 发送请求,将文件数据以  files 参数传入,其他消息体数据通过 data 、 headers 、 cookies 等传入

    1. req = {

    2.             "url": "127.0.0.1/createfile",

    3.             "method": "POST",

    4.             "headers": {},

    5.             "files": {"file": ("caituotuo-file.pdf", open(r"F:\caituotuo-file.pdf", "rb"), "pdf")},

    6.             "data": {

    7.                 "title": "接口上传的文件",

    8.                 "fileType": "pdf"

    9.             }

    10.         }

(2)完整代码

  1. # -*- coding:utf-8 -*-

  2. # 作者:爱吃 香菜

  3. # 时间:2022/3/12 21:04

  4. # 功能:上传文件demo

  5. import requests

  6. class Createfile:

  7.     

  8.     def createfile(self):

  9.         req = {

  10.             "url": "127.0.0.1/createfile",

  11.             "method": "POST",

  12.             "headers": {},

  13.             "files": {"file": ("", open(r"F:\caituotuo-file.pdf", "rb"), "pdf")},

  14.             "data": {

  15.                 "title": "接口上传的文件",

  16.                 "fileType": "pdf"

  17.             }

  18.         }

  19.         res = requests.request(**req)

  20.         assert res.status_code == 200

  21.         res_json = res.json()

  22.         return res_json["result"]["id"]

  23. if __name__ == '__main__':

  24.     Createfile().createfile()

二、文件下载接口

1. 接口文档

Request URL:/download

Request Method:GET

 

2. 代码实现

  1. # -*- coding:utf-8 -*-

  2. # 作者:爱吃 香菜

  3. # 时间:2022/4/5 2:56

  4. # 功能:下载文件demo

  5. import requests

  6. class Download:

  7.     def download(self):

  8.         req = {

  9.             "url": "127.0.0.1/download",

  10.             "method": "GET",

  11.             "headers": {},

  12.             "params": {

  13.                 "id": 2947403045981869536,

  14.                 "downloadItems": ["NORMAL"],

  15.                 "needCompressForOneFile": False

  16.             },

  17.         }

  18.         res = requests.request(**req).content # 注意“.content"获取返回内容

  19.         # with open("F:/response.zip", "wb") as f: # 多份文件返回压缩包

  20.         with open("F:/response.pdf", "wb") as f:

  21.             f.write(res)

  22.         return res

  23. if __name__ == '__main__':

  24.     Download().download()

以上,完。

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

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

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值