Šioje API testavimo pamokoje apžvelgsime, kaip išanalizuoti JSON atsakymą ir išgauti informaciją naudojant „REST“ užtikrintą biblioteką.
Testuodami API, paprastai pateikiate užklausą ištekliui (pvz., Naudodami GET arba POST užklausą). Serveris grįžta su atsakymu, tada jūs darote keletą teiginių apie atsakymą.
Šiai pamokai aš naudosiu JSONPlaceholder kuri yra netikra internetinė REST API testavimui ir prototipų kūrimui. „JSONPlaceholder“ yra nemokama internetinė „REST“ paslauga, kuria galite naudotis visada, kai jums reikia suklastotų duomenų.
Tiksliau, naudosiu vartotojų galinį tašką jsonplaceholder .
Pateikdami GET užklausą aukščiau nurodytam ištekliui, gausime JSON atsakymą, kuriame yra vartotojų sąrašas. Šis sąrašas pateikiamas kaip JSON masyvas. Kiekvieno masyvo struktūra yra tokia:
{
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'
} }
Todėl atsakant į masyvą bus dešimt įrašų, kurių kiekvienas turi tą pačią JSON struktūrą, tačiau skirtingas reikšmes.
Susijęs:
Dabar pradėkime nuo kai kurių reikšmių analizavimo ir ištraukimo iš JSON.
Pirmasis bandymas paprastai būtų suskaičiuoti masyvo įrašų skaičių, todėl pradėkime nuo to.
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());
} }
Ankstesnio skambučio rezultatas atspausdins 10
Atkreipkite dėmesį į $
žymėjimas, kuris reiškia šaknies elementą.
Ankstesniame pavyzdyje, jei norėtume gauti visų įrašų vartotojo vardą, galėtume naudoti:
String usernames = response.jsonPath().getString('username'); System.out.println(usernames);
Tai masyvą atspausdins taip:
[Bret, Antonette, Samantha, Karianne, Kamren, Leopoldo_Corkery, Elwyn.Skiles, Maxime_Nienow, Delphine, Moriah.Stanton]
Jei tada norime gauti pirmojo įrašo, kurį galėtume naudoti, vartotojo vardą:
String usernames = response.jsonPath().getString('username[0]');
Tai atspausdins pirmąjį vartotojo vardą:
Bret
Naudodami sąrašą galime naudoti:
List jsonResponse = response.jsonPath().getList('username'); System.out.println(jsonResponse.get(0));
Tai atspausdins pirmąjį vartotojo vardą:
Bret
Žvelgiant į aukščiau pateiktą JSON struktūrą, įmonė iš tikrųjų yra žemėlapis. Jei turėtume tik vieną įrašą, galėtume naudoti:
Response response = doGetRequest('https://jsonplaceholder.typicode.com/users/1'); Map company = response.jsonPath().getMap('company'); System.out.println(company.get('name'));
kuris atspausdintų:
Romaguera-Crona
Bet jei atsakymas pateikia masyvą ir mes norime išgauti pirmąjį įmonės pavadinimą, galime naudoti:
Response response = doGetRequest('https://jsonplaceholder.typicode.com/users/'); Map company = response.jsonPath().getMap('company[0]'); System.out.println(company.get('name'));
Arba mes galime naudoti:
Response response = doGetRequest('https://jsonplaceholder.typicode.com/users/'); List
abu atspausdins:
Romaguera-Crona