如何使用 REST Assured 将 JSON 数组放入 HTTP PUT 调用中?
How to put JSON array inside HTTP PUT call using REST Assured?
我正在放心地测试 API,这需要我使用 JSON 数组执行 HTTP PUT,对于请求正文,它只是看起来像这样:
["6", "7", "8", "9", "10"]
请注意,这不需要开始和结束 { } - 只需要方括号。
pom.xml:
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>4.3.2</version>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>4.3.2</version>
</dependency>
MyApiRestTest.java:
public class MyApiRestTest {
private static final String BASE_URL = "http://localhost:8080/ams/rest";
private static final String TOKEN = "AMIIinPiyPqMpViABA41HL8xTSsf";
private static RequestSpecification requestSpec;
@BeforeAll
public static void setUpHeaders() {
RequestSpecBuilder builder = new RequestSpecBuilder();
builder.addHeader("Token", TOKEN);
builder.addHeader("Content-Type", "application/json");
builder.addHeader("Accept", "application/json");
requestSpec = builder.build();
requestSpec.config(RestAssured.config().objectMapperConfig(new ObjectMapperConfig(ObjectMapperType.GSON)));
}
@Test
@DisplayName("PUT /v1/uids/{public-id}")
public void updateUids() {
String publicId = "ABCD786EFGH45";
List<String> uids = new ArrayList<>();
uids.add("6");
uids.add("7");
uids.add("8");
uids.add("9");
uids.add("10");
given().spec(requestSpec)
.pathParam("public-id", publicId)
.body(uids)
.when()
.put(BASE_URL + "/v1/uids/{public-id}")
.then()
.statusCode(200);
}
}
当我运行这个时,我得到以下错误:
java.lang.AssertionError: 1 expectation failed.
Expected status code <200> but was <404>.
尝试使用此 JSON 数组的不同变体/方法,方法如下:
第一种方法:
String jsonArray = "[\"6\", \"7\", \"8\", \"9\", \"10\"]";
随后:
given().spec(requestSpec)
.pathParam("public-id", publicId)
.body(jsonArray)
.when()
.put(BASE_URL + "/v1/uids/{public-id}")
.then()
.statusCode(200);
第二种方法:
使用String[] uidsArray = {"6", "7", "8", "9", "10"};
随后:
given().spec(requestSpec)
.pathParam("public-id", publicId)
.body(uidsArray)
.when()
.put(BASE_URL + "/v1/uids/{public-id}")
.then()
.statusCode(200);
这两种变体给我的错误与完整源列表(见上文)中提供的错误完全相同:
java.lang.AssertionError: 1 expectation failed.
Expected status code <200> but was <404>.
我可能做错了什么?
404 错误表示未找到您的资源,这表明 URL 不正确,而不是请求正文内容有任何问题。
可能是关于URL,我看是BASE_URL + "/v1/uids/{public-id}"
。我认为您希望 {public-id}
在执行时变成 id
,但事实并非如此。将该部分替换为实际 id
的字符串形式可能会解决您的问题。
我正在放心地测试 API,这需要我使用 JSON 数组执行 HTTP PUT,对于请求正文,它只是看起来像这样:
["6", "7", "8", "9", "10"]
请注意,这不需要开始和结束 { } - 只需要方括号。
pom.xml:
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>4.3.2</version>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>4.3.2</version>
</dependency>
MyApiRestTest.java:
public class MyApiRestTest {
private static final String BASE_URL = "http://localhost:8080/ams/rest";
private static final String TOKEN = "AMIIinPiyPqMpViABA41HL8xTSsf";
private static RequestSpecification requestSpec;
@BeforeAll
public static void setUpHeaders() {
RequestSpecBuilder builder = new RequestSpecBuilder();
builder.addHeader("Token", TOKEN);
builder.addHeader("Content-Type", "application/json");
builder.addHeader("Accept", "application/json");
requestSpec = builder.build();
requestSpec.config(RestAssured.config().objectMapperConfig(new ObjectMapperConfig(ObjectMapperType.GSON)));
}
@Test
@DisplayName("PUT /v1/uids/{public-id}")
public void updateUids() {
String publicId = "ABCD786EFGH45";
List<String> uids = new ArrayList<>();
uids.add("6");
uids.add("7");
uids.add("8");
uids.add("9");
uids.add("10");
given().spec(requestSpec)
.pathParam("public-id", publicId)
.body(uids)
.when()
.put(BASE_URL + "/v1/uids/{public-id}")
.then()
.statusCode(200);
}
}
当我运行这个时,我得到以下错误:
java.lang.AssertionError: 1 expectation failed.
Expected status code <200> but was <404>.
尝试使用此 JSON 数组的不同变体/方法,方法如下:
第一种方法:
String jsonArray = "[\"6\", \"7\", \"8\", \"9\", \"10\"]";
随后:
given().spec(requestSpec)
.pathParam("public-id", publicId)
.body(jsonArray)
.when()
.put(BASE_URL + "/v1/uids/{public-id}")
.then()
.statusCode(200);
第二种方法:
使用String[] uidsArray = {"6", "7", "8", "9", "10"};
随后:
given().spec(requestSpec)
.pathParam("public-id", publicId)
.body(uidsArray)
.when()
.put(BASE_URL + "/v1/uids/{public-id}")
.then()
.statusCode(200);
这两种变体给我的错误与完整源列表(见上文)中提供的错误完全相同:
java.lang.AssertionError: 1 expectation failed.
Expected status code <200> but was <404>.
我可能做错了什么?
404 错误表示未找到您的资源,这表明 URL 不正确,而不是请求正文内容有任何问题。
可能是关于URL,我看是BASE_URL + "/v1/uids/{public-id}"
。我认为您希望 {public-id}
在执行时变成 id
,但事实并非如此。将该部分替换为实际 id
的字符串形式可能会解决您的问题。