当前位置: 首页 > 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.lryc.cn/news/592625.html

      相关文章:

    1. MyBatis缓存实战指南:一级与二级缓存的深度解析与性能优化
    2. Tomcat及Nginx部署使用
    3. 淘宝高级详情接口接入指南与Python代码实战
    4. 如何搭建systemverilog/UVM验证环境开发vip(腾讯元宝)
    5. C专题5:函数进阶和递归
    6. InnoDB 多版本控制 慢sql排查(基于MySQL 5.7)
    7. CentOS7 内网服务器yum修改
    8. 谈进程间通信
    9. NVIDIA 驱动安装失败问题排查与解决(含离线 GCC 工具链安装全过程)
    10. python爬虫获取PDF
    11. 去中心化交易所(DEX)深度解析:解码行业头部项目
    12. WEB安全架构
    13. WEB弹性设计
    14. MyBatis之关联查询
    15. leetcode:冗余连接 II[并查集检查环][节点入度]
    16. 【机器人】HOV-SG 开放词汇 | 分层3D场景图 | 语言引导机器人导航
    17. vue3+vite 使用scss、sass 全局定义的变量以及使用
    18. 【Linux】进程间通信(三)——共享内存和消息队列
    19. 特种作业操作证(制冷空调)的考试科目有哪些?
    20. Spring AI开发智能客服(Tool calling)
    21. 第七章 愿景09 海波龙的坑
    22. 链表算法之【链表的中间节点】
    23. MSTP+VRRP+DHCP配置实验(ensp)
    24. 医疗人工智能的心电图分析:创新技术与临床应用
    25. 多组件Canvas ID冲突解决方案
    26. Pythonday17
    27. 深入理解进程地址空间:虚拟内存与进程独立性
    28. 2-大语言模型—理论基础:详解Transformer架构的实现(2)
    29. 专题 原型与继承完全指南
    30. QT聊天项目DAY15