如何在 Rest Assured API 链中重置多部分内容类型

How to Reset Multipart Content-type in a Chain of Rest Assured APIs

我在调用 API 链时遇到问题。

  1. 首先 API contentype=JSON - 工作正常。
  2. 第二个 API contentype=JSON - 工作正常。
  3. Contentype=Multipart 的第三个 API - 工作正常。
  4. Contentype=JSON 的第四个 API - 不工作。

错误:- 由于错误而失败的原因。

未能命中 URLContent-Type application/json 在使用 multipart 时无效,它必须以“multipart/”开头或包含“multipart+”。

当第 3 个 API 被击中时,我将 ContentType 设置为 Multipart 并添加了文件,它运行良好。

但是当第 4 个 API 被命中时,我将 ContentType 设置回 JSON,但它失败了,因为请求规范仍然有附加到请求的多部分内容

如何解决?

因为 RequestSpecification 没有类似 reset() 的方法,解决方案可能是对每个请求使用不同的 RequestSpecification 实例。当出现这样的问题时,变异对象对你不利。

示例问题:

RequestSpecification reqSpec = new RequestSpecBuilder()
        .addMultiPart(file)
        .build();

given(reqSpec)
        .post("https://postman-echo.com/post");

given(reqSpec.contentType(JSON))
        .body("test")
        .post("https://postman-echo.com/post");

java.lang.IllegalArgumentException: Content-Type application/json is not valid when using multiparts, it must start with "multipart/" or contain "multipart+".

解法:

@Test
void SO_69567028() {
    File file = new File("src/test/resources/1.json");

    given(multipartReqSpec())
            .multiPart(file)
            .post("https://postman-echo.com/post");

    given(jsonReqSpec())
            .body("test")
            .post("https://postman-echo.com/post");
}

public RequestSpecification jsonReqSpec() {
    return new RequestSpecBuilder()
            .setContentType(JSON)
            .build();
}

public RequestSpecification multipartReqSpec() {
    return new RequestSpecBuilder()
            .setContentType(MULTIPART)
            .build();
}