脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python接口自动化之文件上传/下载接口详解

Python接口自动化之文件上传/下载接口详解

2022-11-22 10:26IT小学生蔡坨 Python

在接口测试中,经常会涉及到文件上传以及下载,下面这篇文章主要给大家介绍了关于Python接口自动化之文件上传/下载接口的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

〇、前言

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

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

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

一、文件上传接口

1. 接口文档

Request URL: /createbyfile

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为一个元组(与普通接口不同的地方)

Python接口自动化之文件上传/下载接口详解

?
1
2
3
4
5
"file": (
    "", # 元组第一个值为文件名称,没有则取None
    open(r"F:\pdf_file.pdf", "rb"), # 若第一个值非None,则取文件open打开的二进制流,否则直接写文件路径,如"F:\pdf_file.pdf"
    "pdf" # 文件类型
)
?
1
2
3
4
"file": (
    None,
    "F:\pdf_file.pdf"
)

构造其他数据

?
1
2
3
4
{
    "title": "接口发起的文档",
    "fileType": "pdf"
}

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

?
1
2
3
4
5
6
7
8
9
10
req = {
            "url": "127.0.0.1/v2/document/createbyfile",
            "method": "POST",
            "headers": {},
            "files": {"file": ("", open(r"F:\pdf_file.pdf", "rb"), "pdf")},
            "data": {
                "title": "接口发起的文档",
                "fileType": "pdf"
            }
        }

(2)完整代码

base_api.py

?
1
2
3
4
5
6
7
import requests
class BaseApi:
    @staticmethod
    def requests_http(req):
        # ** 解包
        result = requests.request(**req)
        return result

api/createbyfile.py

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2022/3/12 21:04
# 功能:根据文件类型创建合同文档
from base_api import BaseApi
class Createbyfile:
    def createbyfile(self):
        req = {
            "url": "127.0.0.1/createbyfile",
            "method": "POST",
            "headers": {},
            "files": {"file": ("", open(r"F:\pdf_file.pdf", "rb"), "pdf")},
            "data": {
                "title": "接口发起的文档",
                "fileType": "pdf"
            }
        }
        res = BaseApi().requests_http(req)
        assert res.status_code == 200
        res_json = res.json()
        return res_json["result"]["documentId"]
if __name__ == '__main__':
    Createbyfile().createbyfile()

二、文件下载接口

1. 接口文档

Request URL:/download

Request Method:GET

名称 类型 是否必须 描述
contractId Long ID ID
downloadItems String[] 下载可选项,NORMAL(正文),ATTACHMENT(附件)
needCompressForOneFile Boolean 是,默认单文件也压缩 当下载的文件仅一份时,是否压缩

2. 代码实现

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2022/4/5 2:56
# 功能:下载合同
from base_api import BaseApi
class Download:
    def download(self):
        req = {
            "url": "127.0.0.1/download",
            "method": "GET",
            "headers": {},
            "params": {
                "contractId": 2947403075747869536,
                "downloadItems": ["NORMAL"],
                "needCompressForOneFile": False
            },
        }
        res = BaseApi().requests_http(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()

总结

到此这篇关于Python接口自动化之文件上传/下载接口的文章就介绍到这了,更多相关Python文件上传/下载接口内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/caituotuo/p/16101337.html

延伸 · 阅读

精彩推荐
  • PythonPython实现封装打包自己写的代码,被python import

    Python实现封装打包自己写的代码,被python import

    这篇文章主要介绍了Python实现封装打包自己写的代码,被python import,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    IG.xiaoyu15932020-07-13
  • Python解决PyTorch与CUDA版本不匹配的问题

    解决PyTorch与CUDA版本不匹配的问题

    这篇文章主要介绍了解决PyTorch与CUDA版本不匹配的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    v-space17662021-09-24
  • Pythonpython使用tensorflow深度学习识别验证码

    python使用tensorflow深度学习识别验证码

    这篇文章主要介绍了python使用tensorflow深度学习识别验证码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    歌迷小姐。4622021-01-27
  • Pythonpython使用matplotlib库生成随机漫步图

    python使用matplotlib库生成随机漫步图

    这篇文章主要为大家详细介绍了使用Python的matplotlib库生成随机漫步图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    lanhaixuanvv5882021-03-30
  • PythonPython中的tkinter库简单案例详解

    Python中的tkinter库简单案例详解

    tkinter 是 Python 的标准 GUI 库,Python 使用 tkinter 可以快速的创建 GUI 应用程序,今天通过本文给大家分享Python中的tkinter库简单案例详解,需要的朋友可以参考...

    A-L-Kun3942022-08-29
  • Pythonpython调用tcpdump抓包过滤的方法

    python调用tcpdump抓包过滤的方法

    这篇文章主要为大家详细介绍了python调用tcpdump抓包过滤的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    wangqiuyun9222021-03-18
  • PythonPython中类变量和实例变量的区别

    Python中类变量和实例变量的区别

    这篇文章主要介绍了Python中类变量和实例变量的区别,文章针对Python类变量和实例变量的问题,给出了具体说明和演示,需要的小伙伴可以参考一下...

    Python进阶者11962022-10-17
  • Pythonpython中实现php的var_dump函数功能

    python中实现php的var_dump函数功能

    这篇文章主要介绍了python中实现php的var_dump函数功能,var_dump函数在PHP中调试时非常实用,本文介绍在Python中实现这个函数,需要的朋友可以参考下 ...

    脚本之家4732020-05-20