Skip to content

接口请求体-文件

接口请求体 - 文件

简介

在计算机科学领域中,文件(File)是用于存储数据的一种常见形式。文件通常被组织在存储设备(如硬盘、闪存驱动器、光盘等)上,它是可以包含文本、图像、视频、音频或其他类型的数据

使用场景

在进行自动化测试过程中,可能会碰到需要上传一个图片或者一个文件的接口,即头部的 content-typemultipart/form-data; boundary=... 类型的接口,这个时候可以使用 Python 的 Requests 方法。

files 参数格式如下:

  • files 为字典类型数据,上传的文件为键值对的形式:入参的参数名作为键,参数值是一个元组,内容为以下格式(文件名,打开并读取文件,文件的 content-tpye 类型)。
  • 除了上传的文件,接口其他参数不能放入 files 中,使用 data 进行传递即可。
#上传图片
files = {
    "file": ("攀登者.png", open("C:/Users/A/Desktop/攀登者.png", "rb"), "imags/png")
}
#上传表格文件
files = {
    "file": ("test.xlsx", open("D:\\test.xlsx", "rb"), "application/octet-stream")
}
名称 类型 是否必须 描述
file File 文件
title String 文件名称
fileType String 文件类型:doc, docx, txt, pdf, png, gif, jpg, jpeg, tiff, html, rtf, xls, txt

演示代码

在 Python 中使用 files 参数上传文件,files 要求传递的参数内容为字典格式,key 值为上传的文件名,value 通常要求传递一个二进制模式的文件流。

import requests
import pprint

def req():

    files = {
        "file": ("攀登者.png", open("C:/Users/A/Desktop/攀登者.png", "rb"), "imags/png")
    }


    r = requests.post("https://httpbin.ceshiren.com/post",files=files)
    assert r.status_code == 200

    pprint.pprint(r.json())
req()

演示代码(Java)

  • Content-Type 类型
    • multipart/form-data
  • 创建本地文件
    • hogwarts.txt
  • 调用方法
    • multiPart()
      • 参数:String name
      • 参数:File file
package ch02_multipart;

import io.restassured.RestAssured;
import org.junit.jupiter.api.Test;

import java.io.File;

import static io.restassured.RestAssured.given;
import static io.restassured.specification.ProxySpecification.host;

/**
 * 测试通过multipart/form-data方式上传文件和JSON数据。
 */
public class TestMultipart {

    /**
     * 上传本地文件和JSON数据到远程服务器,并通过HTTPS代理服务器转发请求。
     * <p>
     * 此测试用例将上传一个本地文件和一段JSON数据到https://httpbin.ceshiren.com/post,
     * 并验证响应状态码是否为200。
     */
    @Test
    void testUploadFile() {

        // 创建一个File对象,指向要上传的本地文件
        File myFile = new File("src/test/resources/hogwarts.txt");

        // 配置代理服务器,指定主机和端口
        RestAssured.proxy = host("127.0.0.1").withPort(8888);
        // 允许使用不安全的HTTPS连接,避免SSL握手错误
        RestAssured.useRelaxedHTTPSValidation();

        given()
                .multiPart("hogwarts", myFile)  // 添加文件到multipart请求中
                .multiPart("ceshiren", "{\"hogwarts\": 666}", "application/json")  // 添加JSON数据到multipart请求中
                .log().headers()  // 打印请求头信息
                .log().body()  // 打印请求体信息
                .when()
                .post("https://httpbin.ceshiren.com/post")  // 发送POST请求
                .then()
                .statusCode(200);  // 断言响应状态码为200,表示请求成功
    }
}

总结

  • 发送携带文件的请求