You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用RestAssured测试含自定义文件上传参数的Quarkus接口

Quarkus多部分表单PUT接口的RestAssured测试实现

接口与DTO定义

PUT接口代码

@PUT
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("{var}/some-def")
public Response saveReportDefinition(
    @PathParam("var")
    String var,
    @NotNull
    @Valid
    FileUploadInput fileInput,
    @Context
    UriInfo uriInfo
) {
    return Response.ok().build();
}

FileUploadInput DTO代码

import org.jboss.resteasy.reactive.multipart.FileUpload;

public record FileUploadInput(
    @NotNull
    @RestForm("file1")
    FileUpload file1,
    @NotNull
    @RestForm("file2")
    FileUpload file2,
    @NotNull
    @RestForm("file3")
    FileUpload file3
) {} 

完善后的RestAssured测试用例

import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import io.restassured.response.Response;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import java.io.File;
import static org.hamcrest.Matchers.emptyOrNullString;
import static org.hamcrest.Matchers.is;

@Test
@DisplayName("Test Upload")
public void testUpload() {
    // 1. Prepare test data
    File file1 = getResourceAsFile("/dir/file1.json");
    File file2 = getResourceAsFile("/dir/file2.txt");
    File file3 = getResourceAsFile("/dir/file3.sql");

    // 2. Construct the request
    Response response = RestAssured.given()
            .contentType(ContentType.MULTIPART)
            .multiPart("file1", file1)
            .multiPart("file2", file2)
            .multiPart("file3", file3)
            .put(BASE_URL + "Commission/some-def");

    // 3. Validate the response
    response.then()
            .statusCode(200)
            .body(is(emptyOrNullString()));
}

// 补充getResourceAsFile实现示例(若未实现)
private File getResourceAsFile(String path) {
    return new File(getClass().getResource(path).getFile());
}

关键说明

  • 每个multiPart的第一个参数必须严格对应FileUploadInput中@RestForm指定的参数名(file1/file2/file3),确保请求参数能正确映射到DTO字段
  • 接口@Path为{var}/some-def,需修正原测试中错误的路径尾端,保证请求路径与接口匹配
  • contentType(ContentType.MULTIPART)用于设置正确的请求头,也可省略该配置,multiPart方法会自动处理请求头格式
  • 若getResourceAsFile未实现,可参考示例代码读取classpath下的测试文件

内容的提问来源于stack exchange,提问作者joe_specimen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 16:15:09