Python接口自动化:文件上传与下载接口实战解析

键盘旁的猫
键盘旁的猫
发布时间:2026-10-15| 6人浏览过
原创

本文详解Python接口自动化中文件上传与下载接口的实现。上传接口需使用Content-Type: multipart/form-data,通过files参数传递二进制流及元组格式的文件信息;下载接口则通过GET请求获取二进制响应内容并保存至本地。文章提供完整代码示例,涵盖参数构造、请求发送及结果断言,适用于文档、图片等格式的文件自动化测试场景。

〇、前言

文件上传与下载接口在实现逻辑上与普通HTTP接口相似,但在数据格式和参数处理上存在关键差异,需特别注意二进制数据的处理方式。

当需要向服务器发送文件(如文档、图片或视频)时,必须传输二进制数据。此类接口通常采用Content-Type: multipart/form-data类型,该类型支持同时发送文件流及相关消息体数据。

文件下载则是将服务器返回的二进制响应内容保存至本地磁盘,并根据预期文件格式指定保存路径及文件名,例如保存为F:/合同文件.pdf。

一、文件上传接口

1. 接口文档

Request URL: /createbyfile

Request Method: POST

Content-Type: multipart/form-data

名称类型是否必须描述
fileFile是文档文件
titleString是文档名称
fileTypeString是文件类型:doc, docx, txt, pdf, png, gif, jpg, jpeg, tiff, html, rtf, xls, txt

2. 代码实现

(1)实现步骤:

首先构造文件数据,使用open函数以二进制读取模式('rb')打开目标文件。

文件上传接口的参数结构与普通POST请求类似,采用Key-Value模式。其中Key为参数名file(对应前端组件的name属性),Value则为一个元组,这是与普通接口的显著区别。

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

同时构造其他非文件类的业务数据。

{
    "title": "接口发起的文档",
    "fileType": "pdf"
}

发送HTTP请求时,将文件数据通过files参数传入,其余消息体数据则通过data、json、headers、cookies等标准参数传入。

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

import requests
class BaseApi:
    @staticmethod
    def requests_http(req):
        # ** 解包
        result = requests.request(**req)
        return result

api/createbyfile.py

# -*- 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

名称类型是否必须描述
contractIdLongIDID
downloadItemsString[]否下载可选项,NORMAL(正文),ATTACHMENT(附件)
needCompressForOneFileBoolean是,默认单文件也压缩当下载的文件仅一份时,是否压缩

2. 代码实现

# -*- 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文件上传/下载接口内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。