рдмрд╛рдХреА рдХрд╛ рдЖрд╢реНрд╡рд╛рд╕рди рджрд┐рдпрд╛: рдЙрдкрдпреЛрдЧреА рд╕реБрдЭрд╛рд╡

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ REST- рдЖрд╢реНрд╡рд╛рд╕рди, REST-API рдкрд░реАрдХреНрд╖рдг рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрдо рдЬрд╛рд╡рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд╕реБрдЭрд╛рд╡ рдПрдХрддреНрд░ рдХрд┐рдП рд╣реИрдВред

рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рд╡реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде 50 рд╕реЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХреЛрдб-рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдореЗрд░реЗ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдПрдХ рдЕрд▓рдЧ рд╕реНрдерд╛рди рдкрд░ рдПрдВрдб-рдкреЙрдЗрдВрдЯ рд▓реЗрдВ


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИред рд▓реЗрдХрд┐рди рдирд╣реАрдВ, рдХрд╛рдлреА рдмрд╛рд░ рдЖрдкрдХреЛ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╣рд╛рд░реНрдб-рдХреЛрдбреЗрдб рдПрдВрдб-рдкреЙрдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХреЛрдб рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ред

рдЕрдВрддрд┐рдо рд╡рд░реНрдЧ рдХреЗ рд╕реНрдерд┐рд░ рд╕реНрдерд┐рд░рд╛рдВрдХ рдореЗрдВ рдЕрдВрдд-рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд░рдЦрдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред рдЗрд╕реА рд╕рдордп, рдПрдВрдЯреАрдкреИрдЯрд░реНрди "рдирд┐рд░рдВрддрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕" рд╕реЗ рдмрдЪрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдпрд╣ рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ REST- рдЖрд╢реНрд╡рд╕реНрдд рдЖрдкрдХреЛ рдкрде рдкреИрд░рд╛рдореАрдЯрд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

public final class EndPoints { public static final String users = "/users/{id}"; ... } given().pathParams("id", someId).get(EndPoints.users)...; //   given().get(EndPoints.users, someId).... 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдХрдИ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдЖрдзрд╛рд░ рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рд╣реЛрдЯрд▓ рдХреЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдореЗрдВ рд░рдЦрдиреЗ рдФрд░ рдЗрд╕реЗ рдореВрд▓ рдЖрдзрд╛рд░ рдкрд░ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 //   url  http://host:port/appname/rest/someEndpoints private static final basePath = "/appname/rest/"; .. //       , //      : RestAssured.basePath = basePath; //     : given().basePath(basePath)... //    ,     

рдкрд░реАрдХреНрд╖рдг рдХреЗ рддрд╣рдд рдЖрд╡реЗрджрди рдХреЗ рдореЗрдЬрдмрд╛рди рдФрд░ рдмрдВрджрд░рдЧрд╛рд╣ рдкрд░ рднреА рдпрд╣реА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред

ContentType / Accept


рдпреЗ рд╣реЗрдбрд░ рд▓рдЧрднрдЧ рд╕рднреА HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред REST- рдЖрд╢реНрд╡рд╕реНрдд рд▓реЗрдЦрдХреЛрдВ рдиреЗ рдЗрд╕реЗ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реБрдП, рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рдпрд╛:

 //   : given().header("content-type", "application/json").header("accept", "application/json")...; //   : given().contentType(ContentType.JSON).accept(ContentType.JSON)...; 

рдЗрди рд╣реЗрдбрд░ рдХреЛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдореЗрдВ рдпрд╛ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЖрдкрдХреЗ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдмрдврд╝реЗрдЧреАред

рд╕реНрдЯреЗрдЯрд╕рдХреЛрдб, рдЖрджрд┐ред


REST- рдЖрд╢реНрд╡рд╕реНрдд HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЖрдк рд╕рдорд╛рди рдХреЛрдб рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ:

 //   : Response response = given()...when().get(someEndpoint); Assert.assertEquals(200, response.then().extract().statusCode()); //   : given()...when().get(someEndpoint).then().statusCode(200); 

рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


рдХреЛрдб рджреЛрд╣рд░рд╛рд╡ рдмреБрд░рд╛ рд╣реИред рджреЛрд╣рд░рд╛рд╡ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред REST- рдЖрд╢реНрд╡рд╛рд╕рди рдореЗрдВ, рдЖрдк рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреБрд░реЛрдз рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рд╣рдордиреЗ рдЙрди рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 RequestSpecification requestSpec = new RequestSpecBuilder() .setBaseUri("http://localhost") .setPort(8080) .setAccept(ContentType.JSON) .setContentType(ContentType.ANY) ... .log(LogDetail.ALL) .build(); //       : RestAssured.requestSpecification = requestSpec; //   : given().spec(requestSpec)...when().get(someEndpoint); 

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рд╣рдо рд╕рднреА рдЪреЗрдХ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдиреБрд░реЛрдз рд╕реЗ рдЕрдиреБрд░реЛрдз рддрдХ рджреЛрд╣рд░рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

 ResponseSpecification responseSpec = new ResponseSpecBuilder() .expectStatusCode(200) .expectBody(containsString("success")) .build(); //       : RestAssured.responseSpecification = responseSpec; //   : given()...when().get(someEndpoint).then().spec(responseSpec)...; 

рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ / рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдмреИрд╕рд╛рдЦреА рди рд▓рд┐рдЦреЗрдВ


рдЖрдкрдХреЛ рдЕрдкрдиреЗ POJO рдХреЛ рдЬреИрдХреНрд╕рди ObjectMapper рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ JSON рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдореА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред REST- рдЖрд╢реНрд╡рд╕реНрдд рдЗрд╕ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЙрд╕реА рдЬреИрдХреНрд╕рди рдпрд╛ рдЧреЙрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рд╕рдкрд╛рде рдореЗрдВ рдХреНрдпрд╛ рд╣реИред JAXB рдХрд╛ рдЙрдкрдпреЛрдЧ XML рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореВрд▓ рдкреНрд░рд╛рд░реВрдк рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 given().contentType(ContentType.JSON).body(somePojo) .when().post(EndPoints.add) .then() .statusCode(201); //        : SomePojo pojo = given(). .when().get(EndPoints.get) .then().extract().body().as(SomePojo.class); 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, REST- рдЖрд╢реНрд╡рд╛рд╕рди рдиреЗ HashMap рдХреЛ JSON рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЧреНрд░реЛрд╡реА рдХреА рд╢рдХреНрддрд┐ рдХрд╛ рджреЛрд╣рди рдХрд░реЗрдВ


REST- рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЦреБрдж Groovy рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ рдФрд░ рдЖрдкрдХреЛ Groovy рд╕реЗ рдкреНрд░рд╛рдкреНрдд JSON / XML рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 //  find, findAll         ,  collect       . //  it         Map<String, ?> map = get(EndPoints.anyendpoint).path("rootelement.find { it.title =~ 'anythingRegExp'}"); //     ,     Map<String, ?> map = get(EndPoints.anyendpoint).path("rootelement.findAll { element -> element.title.length() > 4 }"); //     sum, max, min     ,        String expensiveCar = get(EndPoints.cars).path("cars.find { it.title == 'Toyota Motor Corporation'}.models.max { it.averagePrice }.title"); 

рдЧреНрд░реВрд╡реА рд╕реЗ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдЙрддреНрддрд░ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдореВрд▓реНрдп рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рд╕рдм, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдзрд┐рдХ рд╕реБрдЭрд╛рд╡ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВред

Source: https://habr.com/ru/post/hi421005/


All Articles