Cách phân tích cú pháp phản hồi JSON với REST đảm bảo

Trong hướng dẫn Kiểm tra API này, chúng ta sẽ xem xét cách phân tích cú pháp phản hồi JSON và trích xuất thông tin bằng cách sử dụng thư viện đảm bảo REST.

Khi kiểm tra API, bạn thường đưa ra yêu cầu đối với tài nguyên, (ví dụ: thông qua yêu cầu GET hoặc POST). Máy chủ quay lại với một phản hồi và sau đó bạn thực hiện một số xác nhận đối với phản hồi.



Cách phân tích cú pháp phản hồi JSON

Đối với hướng dẫn này, tôi sẽ sử dụng JSONPlaceholder là một API REST trực tuyến giả để thử nghiệm và tạo mẫu. JSONPlaceholder là một dịch vụ REST trực tuyến miễn phí mà bạn có thể sử dụng bất cứ khi nào bạn cần một số dữ liệu giả mạo.


Cụ thể hơn, tôi sẽ sử dụng điểm cuối người dùng jsonplaceholder .

Yêu cầu và phản hồi

Khi chúng tôi thực hiện yêu cầu GET đối với tài nguyên trên, chúng tôi nhận được phản hồi JSON chứa danh sách người dùng. Danh sách này được biểu diễn dưới dạng Mảng JSON. Mỗi mảng có cấu trúc như sau:


{
id: 1,
name: 'Leanne Graham',
username: 'Bret',
email: 'Sincere@april.biz',
address: {
street: 'Kulas Light',
suite: 'Apt. 556',
city: 'Gwenborough',
zipcode: '92998-3874',
geo: {

lat: '-37.3159',

lng: '81.1496'
}
},
phone: '1-770-736-8031 x56442',
website: 'hildegard.org',
company: {
name: 'Romaguera-Crona',
catchPhrase: 'Multi-layered client-server neural-net',
bs: 'harness real-time e-markets'
} }

Do đó, trong phản hồi đầy đủ, sẽ có mười bản ghi trong mảng, mỗi bản ghi có cùng cấu trúc JSON, nhưng có các giá trị khác nhau.



Có liên quan:

Bây giờ, hãy bắt đầu bằng cách phân tích cú pháp và trích xuất một số giá trị từ JSON.

Thử nghiệm đầu tiên thường là đếm số lượng bản ghi trong mảng, vì vậy hãy bắt đầu với điều đó.


import io.restassured.RestAssured; import io.restassured.http.ContentType; import io.restassured.parsing.Parser; import io.restassured.response.Response; import java.util.List; import static io.restassured.RestAssured.given; public class RestTest {
public static Response doGetRequest(String endpoint) {
RestAssured.defaultParser = Parser.JSON;

return

given().headers('Content-Type', ContentType.JSON, 'Accept', ContentType.JSON).


when().get(endpoint).


then().contentType(ContentType.JSON).extract().response();
}
public static void main(String[] args) {
Response response = doGetRequest('https://jsonplaceholder.typicode.com/users');

List jsonResponse = response.jsonPath().getList('$');

System.out.println(jsonResponse.size());
} }

Kết quả của cuộc gọi trên sẽ in ra 10. Lưu ý dấu $ ký hiệu có nghĩa là phần tử gốc.

Phân tích cú pháp các Mảng và Danh sách JSON

Trong ví dụ trên, nếu chúng ta muốn lấy tên người dùng của tất cả các mục nhập, chúng ta có thể sử dụng:

String usernames = response.jsonPath().getString('username'); System.out.println(usernames);

Điều này sẽ in ra mảng như sau:

[Bret, Antonette, Samantha, Karianne, Kamren, Leopoldo_Corkery, Elwyn.Skiles, Maxime_Nienow, Delphine, Moriah.Stanton]

Nếu sau đó chúng tôi muốn lấy tên người dùng của mục nhập đầu tiên, chúng tôi có thể sử dụng:


String usernames = response.jsonPath().getString('username[0]');

Điều này sẽ in tên người dùng đầu tiên:

Bret

Sử dụng một Danh sách mà chúng tôi có thể sử dụng:

List jsonResponse = response.jsonPath().getList('username'); System.out.println(jsonResponse.get(0));

Điều này sẽ in tên người dùng đầu tiên:

Bret

Phân tích cú pháp JSON ArrayList và HashMap

Nhìn vào cấu trúc JSON ở trên, công ty thực sự là một bản đồ. Nếu chúng tôi chỉ có một bản ghi, chúng tôi có thể sử dụng:


Response response = doGetRequest('https://jsonplaceholder.typicode.com/users/1'); Map company = response.jsonPath().getMap('company'); System.out.println(company.get('name'));

cái nào sẽ in:

Romaguera-Crona

Nhưng nếu phản hồi trả về một mảng và chúng tôi muốn trích xuất tên công ty đầu tiên, chúng tôi có thể sử dụng:

Response response = doGetRequest('https://jsonplaceholder.typicode.com/users/'); Map company = response.jsonPath().getMap('company[0]'); System.out.println(company.get('name'));

Ngoài ra, chúng tôi có thể sử dụng:

Response response = doGetRequest('https://jsonplaceholder.typicode.com/users/'); List companies = response.jsonPath().getList('company'); System.out.println(companies.get(0).get('name'));

cả hai sẽ in:


Romaguera-Crona