一、接口请求体-文件
1.1 简介
- 在计算机科学领域中,文件(File)是用于存储数据的一种常见形式。文件通常被组织在存储设备(如硬盘、闪存驱动器、光盘等)上,它是可以包含文本、图像、视频、音频或其他类型的数据。
1.2 使用场景
- 在进行自动化测试过程中,可能会碰到需要上传一个图片或文件的接口,即头部的
Content-type
为multipart/form-data;boundary=...
类型的接口,这时可以使用Python的Requests
方法。
1.3 files参数格式
-
files为字典类型数据,上传的文件为键值对的形式:入参的参数名作为键,参数值是一个元组,内容为以下格式(文件名,打开并读取文件,文件的
content-type
类型)。 -
除了上传的文件,接口其他参数不能放入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 |
1.4 演示代码
-
Python
- 在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,表示请求成功
}
}
二、接口请求体-form表单
2.1 简介
- 在自动化测试过程中,Form请求代表请求体为表单类型,其特点为:数据量不大,数据层级不深的情况,使用键值对传递,Form请求头中的
Content-type
通常对应为application/x-www-form-urlencoded
。碰到这种类型的接口,使用Python的Requests
方法。