REST Assured 系列汇总 之 REST Assured 24 - 用List创建JSON Array Request Body
前一篇我们了解了用Map创建JSON Object
一个API也可能接收JSON Array payload。例如:处理批量订单,如下
[
{
"firstname": "Kelly",
"additionalneeds": "Breakfast",
"bookingdates": {
"checkin": "2021-08-01",
"checkout": "2021-08-02"
},
"totalprice": 222,
"depositpaid": true,
"lastname": "Mahajan"
},
{
"firstname": "Kevin",
"additionalneeds": "Breakfast",
"bookingdates": {
"checkin": "2021-07-01",
"checkout": "2021-07-01"
},
"totalprice": 111,
"depositpaid": true,
"lastname": "Prashant"
}
]
一次调用Restful Booking API处理多个订单。我们添加多个包含客户信息JSON Object到一个JSON Array。
那我们怎么创建这样的payload呢?
我们已经知道用Map创建一个JSON Object。一个JSON Array也可以用List或Set来创建,所以我们按如下的步骤:
- 创建一个JSON Object添加第一个客户的信息
- 创建另外一个JSON Object添加第三个客户的信息
- 创建一个List或Set对象,添加上面两个JSON Object到List
// JSON Object for first guest
Map<String,Object> bookingOne = new HashMap<String,Object>();
bookingOne.put("firstname", "Kelly");
bookingOne.put("lastname", "Xia");
bookingOne.put("totalprice", 222);
bookingOne.put("depositpaid", true);
Map<String,String> bookingDatesMapForAmod = new HashMap<>();
bookingDatesMapForAmod.put("checkin", "2021-08-01");
bookingDatesMapForAmod.put("checkout", "2021-08-02");
bookingOne.put("bookingdates", bookingDatesMapForAmod);
bookingOne.put("additionalneeds", "Breakfast");
// JSON Object for second guest
Map<String,Object> bookingTwo = new HashMap<String,Object>();
bookingTwo.put("firstname", "Kevin");
bookingTwo.put("lastname", "Zhang");
bookingTwo.put("totalprice", 111);
bookingTwo.put("depositpaid", true);
Map<String,String> bookingDatesMapForAnimesh = new HashMap<>();
bookingDatesMapForAnimesh.put("checkin", "2021-07-01");
bookingDatesMapForAnimesh.put("checkout", "2021-07-01");
bookingTwo.put("bookingdates", bookingDatesMapForAnimesh);
bookingTwo.put("additionalneeds", "Breakfast");
// Creating JSON array to add both JSON objects
List<Map<String,Object>> jsonArrayPayload = new ArrayList<>();
jsonArrayPayload.add(bookingOne);
jsonArrayPayload.add(bookingTwo);
因为Booking API 不接收JSON Array payload,但作为一个例子,请忽略这个。
完整代码:
import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class CreatingNestedJsonArray {
@Test
public void CreatingNestedJsonObjectTest()
{
// JSON Object for first guest
Map<String,Object> bookingOne = new HashMap<String,Object>();
bookingOne.put("firstname", "Kelly");
bookingOne.put("lastname", "Xia");
bookingOne.put("totalprice", 222);
bookingOne.put("depositpaid", true);
Map<String,String> bookingDatesMapForAmod = new HashMap();
bookingDatesMapForAmod.put("checkin", "2021-08-01");
bookingDatesMapForAmod.put("checkout", "2021-08-02");
bookingOne.put("bookingdates", bookingDatesMapForAmod);
bookingOne.put("additionalneeds", "Breakfast");
// JSON Object for second guest
Map<String,Object> bookingTwo = new HashMap<String,Object>();
bookingTwo.put("firstname", "Kevin");
bookingTwo.put("lastname", "Zhang");
bookingTwo.put("totalprice", 111);
bookingTwo.put("depositpaid", true);
Map<String,String> bookingDatesMapForAnimesh = new HashMap();
bookingDatesMapForAnimesh.put("checkin", "2021-07-01");
bookingDatesMapForAnimesh.put("checkout", "2021-07-01");
bookingTwo.put("bookingdates", bookingDatesMapForAnimesh);
bookingTwo.put("additionalneeds", "Breakfast");
// Creating JSON array to add both JSON objects
List<Map<String,Object>> jsonArrayPayload = new ArrayList();
jsonArrayPayload.add(bookingOne);
jsonArrayPayload.add(bookingTwo);
//GIVEN
RestAssured
.given()
.baseUri("https://restful-booker.herokuapp.com/booking")
.contentType(ContentType.JSON)
.body(jsonArrayPayload)
.log()
.all()
// WHEN
.when()
.post()
// THEN
.then()
.assertThat()
// Asserting status code as 500 as it does not accept json array payload
.statusCode(500)
.log()
.all();
}
}
输出:
Request method: POST
Request URI: https://restful-booker.herokuapp.com/booking
Proxy: <none>
Request params: <none>
Query params: <none>
Form params: <none>
Path params: <none>
Headers: Accept=*/*
Content-Type=application/json
Cookies: <none>
Multiparts: <none>
Body:
[
{
"firstname": "Kelly",
"additionalneeds": "Breakfast",
"bookingdates": {
"checkin": "2021-08-01",
"checkout": "2021-08-02"
},
"totalprice": 222,
"depositpaid": true,
"lastname": "Xia"
},
{
"firstname": "Kevin",
"additionalneeds": "Breakfast",
"bookingdates": {
"checkin": "2021-07-01",
"checkout": "2021-07-01"
},
"totalprice": 111,
"depositpaid": true,
"lastname": "Zhang"
}
]
HTTP/1.1 500 Internal Server Error
Server: Cowboy
Connection: keep-alive
X-Powered-By: Express
Content-Type: text/plain; charset=utf-8
Content-Length: 21
Etag: W/"15-/6VXivhc2MKdLfIkLcUE47K6aH0"
Date: Sat, 28 Aug 2021 03:33:22 GMT
Via: 1.1 vegur
Internal Server Error
Process finished with exit code 0