当前位置: 首页 > news >正文

接口测试时如何上传文件(图片、安装包等)

在做接口测试时,针对需要上传文件(图片、安装包等)的 POST 请求,一般都是通过 HTTP 的 multipart/form-data 方式来传输。下面分别介绍在 Postman 和 Python(requests 库)里如何实现。

一、Postman 中上传文件

1. 选择请求方法和 URL

  • Method 选 “POST”(或接口文档指定的方法)
  • 在地址栏填入接口 URL
2. 设置 Body 为 form‑data
    • 点击 “Body” 标签
    • 选中 “form‑data” 选项
    3. 新增字段并设置类型为 File
      • 在 Key 列输入字段名(与后台约定一致)
      • 下拉选择 “File”,Value 列会出现文件选择按钮

      4. 如果还有其他普通文本参数,继续在 form‑data 中以 Text 类型添加即可。

      5. 添加对应的请求参数,并发送请求

      • 点击 “Send”
      • 查看返回,确认文件是否上传成功

      二、Python(requests)自动化脚本

      使用 requests 库发送 multipart/form-data 请求:
      import requestsdef upload_file(api_url, params, file_paths):"""api_url: 接口地址params: dict, 普通表单字段file_paths: dict, 文件字段名 -> 本地文件路径"""# 构造 files 参数files = {}for field_name, path in file_paths.items():# 'rb' 以二进制模式打开文件files[field_name] = open(path, 'rb')try:response = requests.post(api_url, data=params, files=files)response.raise_for_status()  # 如果返回码不是200-399,会抛出异常return response.json()finally:# 关闭文件句柄for f in files.values():f.close()if __name__ == "__main__":api_url = "https://api.example.com/upload"params = {"username": "test_user","description": "这是一个测试上传"}file_paths = {"image": "path/to/logo.png","installer": "path/to/app.apk"}result = upload_file(api_url, params, file_paths)print("接口返回:", result)
      • data=params:普通文本字段
      • files=files:文件字段,requests 会自动将 Content-Type 设置为 multipart/form-data
      • 调用时,只需将文件路径和字段名对应好即可

      三、在测试框架(pytest/unittest)中集成

      如果使用 pytest 进行自动化,可以这样写:
      import pytest
      import requests@pytest.fixture
      def api_url():return "https://api.example.com/upload"@pytest.fixture
      def common_params():return {"username": "pytest_user","description": "pytest 上传测试"}def test_upload(api_url, common_params):files = {"image": open("tests/data/logo.png", "rb"),"installer": open("tests/data/app.apk", "rb"),}resp = requests.post(api_url, data=common_params, files=files)for f in files.values(): f.close()assert resp.status_code == 200json_body = resp.json()# 根据接口文档断言assert json_body.get("success") is Trueassert "fileUrl" in json_body
      • 用 pytest.fixture 分离公共配置
      • 在测试函数里直接调用 requests.post
      • 断言 HTTP 状态码和返回字段

      注意点

      • 超大文件:若文件非常大,考虑分片上传或流式上传,详见 requests 的 stream 机制。
      • 自定义 Headers:如果需要授权(如 Bearer Token),可在请求中加入
        headers={"Authorization": "Bearer xxx"}
      • 超时与重试:生产脚本中建议加上 timeout=(连接超时, 读取超时),并结合 requests.adapters.HTTPAdapter 实现重试。
      http://www.dtcms.com/a/286506.html

      相关文章:

    1. 基于DeepSeek大模型实现Function Call功能
    2. elementui-admin构建
    3. 行为型设计模式:解释器模式
    4. ES v.s Milvus v.s PG
    5. 【unitrix】 6.8 加一运算(add_one.rs)
    6. ubuntu源码安装ceres-solves
    7. docker--Dockerfile
    8. CherryStudio+playwright-mcp-server实现AI自动化
    9. 20250718-1-Kubernetes 应用程序生命周期管理-应用部署、升级、弹性_笔记
    10. C语言-一维数组,二维数组
    11. 七彩喜康养平台:大数据时代,养老服务从智能走向智慧
    12. 实习十三——传输层协议
    13. iOS 数据持久化
    14. iOS OC 图片压缩
    15. 如何快速下载 MT4 交易平台
    16. Linux学习之认识Linux的基本指令
    17. LeetCodeHot100---螺旋矩阵---一题两解
    18. Unity 常见数据结构分析与实战展示 C#
    19. 基于单片机自行车自动防盗报警系统设计
    20. VUE目录结构详解
    21. NW983NW988美光固态闪存NW991NW992
    22. 无符号乘法运算的硬件逻辑实现 ————取自《湖科大教书匠》
    23. PAT 1012 The Best Rank
    24. QML vscode语法高亮和颜色区分。
    25. 【vLLM 学习】Encoder Decoder Multimodal
    26. Kotlin集合过滤
    27. 有效的括号数据结构oj题(力口20)
    28. 无人机传感器模组运行与技术难点分析
    29. Axure RP 10 预览显示“无标题文档”的空白问题探索【护航版】
    30. 美团闪购最新版 mtgsig1.2