RESTO-asegurado: consejos útiles

En este artículo, he reunido algunos consejos útiles sobre el uso de REST-asegurado, una de las bibliotecas Java más comunes para automatizar las pruebas REST-API.

Todos los ejemplos son vitales, se recopilan de mi práctica de realizar revisiones de código en más de 50 proyectos con pruebas automáticas.

Lleva los puntos finales a un lugar separado


Parece que esto es obvio. Pero no, a menudo tiene que ver el código con puntos finales codificados en la solicitud.

Es mejor poner puntos finales en las constantes estáticas de la clase final. Al mismo tiempo, se debe evitar la "interfaz constante" antipatrón; esta es una mala práctica.

No olvide que REST-Assured le permite realizar parámetros de ruta, por ejemplo:

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

Además, si en muchas consultas usa la misma ruta base, será una buena práctica colocarla en una constante de hotel y pasarla a basePath, por ejemplo:

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

Lo mismo se aplica al host y al puerto de la aplicación bajo prueba.

ContentType / Accept


Estos encabezados se utilizan en casi todas las solicitudes HTTP. Los autores asegurados por REST, al darse cuenta de esto, hicieron posible instalarlos llamando a métodos especiales:

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

Es una buena práctica establecer estos encabezados en una especificación o globalmente. Esto aumentará la legibilidad de su código.

StatusCode, etc.


REST -ured proporciona una sintaxis conveniente para verificar cada componente de la respuesta HTTP, pero en la práctica continúa encontrando un código similar:

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

Especificaciones de uso


La duplicación de código es mala. Use especificaciones para reducir la duplicación. En REST-asegurado, puede crear especificaciones para solicitud y respuesta. En la especificación de la solicitud, publicamos todo lo que se puede duplicar en las solicitudes.

 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); 

En la especificación de la respuesta, hacemos todas las comprobaciones que se duplican de una solicitud a otra.

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

Puede crear varias especificaciones para diferentes tipos de solicitudes / respuestas y utilizarlas en la situación correcta.

No escriba sus muletas para transformar objetos.


No debe convertir sus POJO a JSON utilizando Jackson ObjectMapper y luego transferir la cadena resultante al cuerpo de la solicitud. RESTO-asegurado hace un gran trabajo de esto. Para esto, se usa el mismo Jackson o Gson, dependiendo de lo que esté en el classpath. JAXB se usa para convertir a XML. El formato original se determina automáticamente por el valor de Content-Type.

 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); 

Además, REST-asegurado hace un gran trabajo al convertir HashMap a JSON y viceversa.

Aprovecha el poder de Groovy


La biblioteca con REST asegurada está escrita en Groovy y le permite aplicar varios métodos desde Groovy a la respuesta JSON / XML recibida. Por ejemplo:

 //  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"); 

El uso de métodos de Groovy puede reducir en gran medida la cantidad de código que escribe para encontrar el valor requerido de la respuesta.

Eso es todo, si tiene más consejos y ejemplos, escríbalos en los comentarios.

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


All Articles