如何在 Rest Assured API 链中重置多部分内容类型
How to Reset Multipart Content-type in a Chain of Rest Assured APIs
我在调用 API 链时遇到问题。
- 首先 API contentype=JSON - 工作正常。
- 第二个 API contentype=JSON - 工作正常。
- Contentype=Multipart 的第三个 API - 工作正常。
- 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();
}
我在调用 API 链时遇到问题。
- 首先 API contentype=JSON - 工作正常。
- 第二个 API contentype=JSON - 工作正常。
- Contentype=Multipart 的第三个 API - 工作正常。
- 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();
}