如何使用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
相关产品推荐
相关产品推荐

