I denna API-testhandledning tittar vi på hur man analyserar JSON-svar och extraherar information med hjälp av det REST-säkra biblioteket.
När du testar ett API gör du vanligtvis en begäran till en resurs (t.ex. via en GET- eller POST-begäran). Servern kommer tillbaka med ett svar och sedan gör du några påståenden om svaret.
För den här handledningen kommer jag att använda JSONPlaceholder vilket är ett falskt REST API för testning och prototyping. JSONPlaceholder är en gratis REST-tjänst online som du kan använda när du behöver falska data.
Mer specifikt kommer jag att använda användarnas slutpunkt jsonplaceholder .
När vi gör en GET-begäran till ovanstående resurs får vi ett JSON-svar som innehåller en lista över användare. Denna lista representeras som en JSON Array. Varje matris har en struktur så här:
{
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'
} }
Därför kommer det i hela svaret att finnas tio poster i matrisen, som alla har samma JSON-struktur, men med olika värden.
Relaterad:
Låt oss börja med att analysera och extrahera några värden från JSON.
Det första testet skulle vanligtvis vara att räkna antalet poster i matrisen, så låt oss börja med det.
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());
} }
Resultatet av ovanstående samtal skulle skriva ut 10
. Notera $
notation vilket betyder rotelementet.
I exemplet ovan, om vi ville få användarnamnet för alla poster, kan vi använda:
String usernames = response.jsonPath().getString('username'); System.out.println(usernames);
Detta skulle skriva ut matrisen som:
[Bret, Antonette, Samantha, Karianne, Kamren, Leopoldo_Corkery, Elwyn.Skiles, Maxime_Nienow, Delphine, Moriah.Stanton]
Om vi sedan vill få användarnamnet för den första posten kan vi använda:
String usernames = response.jsonPath().getString('username[0]');
Detta skulle skriva ut det första användarnamnet:
Bret
Med hjälp av en lista kan vi använda:
List jsonResponse = response.jsonPath().getList('username'); System.out.println(jsonResponse.get(0));
Detta skulle skriva ut det första användarnamnet:
Bret
Om man tittar på ovanstående JSON-struktur är företaget faktiskt en karta. Om vi bara hade en post kunde vi använda:
Response response = doGetRequest('https://jsonplaceholder.typicode.com/users/1'); Map company = response.jsonPath().getMap('company'); System.out.println(company.get('name'));
som skulle skriva ut:
Romaguera-Crona
Men om svaret returnerar en matris och vi vill extrahera det första företagsnamnet kan vi använda:
Response response = doGetRequest('https://jsonplaceholder.typicode.com/users/'); Map company = response.jsonPath().getMap('company[0]'); System.out.println(company.get('name'));
Alternativt kan vi använda:
Response response = doGetRequest('https://jsonplaceholder.typicode.com/users/'); List
som båda kommer att skriva ut:
Romaguera-Crona