REST-Assured general
REST-Assured es una libreria basada en Java creada por JayWay Company para agilizar
las pruebas y validacion de Restful Web Services. Sirve como un catalizador eficiente
para automatizar el proceso de prueba de APIs REST.
REST-Assured puede ser instalado facilmente agregando la dependencia de Maven:
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>5.1.1</version>
<scope>test</scope>
</dependency>
Se requiere un framework de pruebas como JUnit o TestNG como ejecutor de pruebas.
El siguiente ejemplo de código demuestra el uso de JUnit. Ahora, echemos un vistazo a
un caso de prueba basado en REST-Assured:
public class UsersTest {
@Before
public void setup() {
RestAssured.baseURI = "https://jsonplaceholder.typicode.com/";
@Test
public void getAllUsersAndThenGetFirstUserById() {
Response responseAllUsers =
given()
.when()
.get("/users")
.then()
.statusCode(200)
.extract()
.response();
int firstUserId = responseAllUsers.jsonPath().getInt("id[0]");
Response responseFirstUser =
given()
.pathParam("id", firstUserId)
.when()
.get("/users/{id}")
.then()
.statusCode(200)
.extract()
.response();
Assert.assertEquals(responseFirstUser.jsonPath().getString("name"),
"Leanne Graham");
Assert.assertEquals(responseFirstUser.jsonPath().getString("email"),
"[email protected]");
Podemos ver que las pruebas basadas en REST-Assured están escritas en un formato
estilo BDD, siguiendo la estructura Dado-Entonces-Entonces. Sin embargo, a diferencia
de Karate, estas pruebas están incrustadas dentro del código Java. En otras palabras,
para ver los casos de prueba implementados, hay que profundizar en las pruebas de la
API y examinar el código. Por defecto, REST-Assured no utiliza archivos .feature,
aunque puede integrarse con herramientas como Cucumber u otros marcos BDD.
REST-Assured maneja las etapas del esquema de pruebas de API de la siguiente manera
(utilizando el ejemplo del marco de pruebas JUnit):
Fondo
Podemos utilizar simplemente la anotación @Before:
@Before
public void setup() {
RestAssured.baseURI = "https://jsonplaceholder.typicode.com";
Proporcionar los parámetros de la petición
Esta etapa está dividida en 2 partes por las palabras clave given() y when().
1. Con given(), podemos proporcionar el tipo de contenido y el cuerpo de la
petición, si es necesario. Es posible pasar cargas JSON o XML a un objeto
String:
public void createUser() {
String body = "{\"name\": \"Test User\"," +
"\"username\": \"testuser\", " +
"\"email\": \"[email protected]\"," +
"\"address\": " +
"{ \"street\": \"Has No Name\"," +
"\"suite\": \"Apt. 123\"," +
"\"city\": \"Electri\"," +
"\"zipcode\": \"54321-6789\"}}";
Response response =
given()
.contentType(ContentType.JSON)
.body(body)
Un enfoque más preciso es utilizar el mapeo de objetos cuando se trabaja con REST-
Assured. Defina el esquema de carga útil de la solicitud en la clase adecuada:
public static class User {
private String name;
private String username;
public User(String name, String username) {
this.name = name;
this.username = username;
}
public String getName() {
return name;
public void setName(String name) {
this.name = name;
public String getUsername() {
return username;
public void setUsername(String job) {
this.username = username;
A continuación, puede simplemente pasar una nueva instancia de la clase en la carga
útil de la solicitud:
@Test
public void createUser() {
User user = new User("Test User", "testuser");
Response response =
given()
.contentType(ContentType.JSON)
.body(user)
Alternativamente, podemos importar la carga útil directamente desde un archivo:
@Test
public void createUserXML() {
File xmlDataInFile = new File("src/test/resources/user.xml");
Response response =
given()
.contentType(ContentType.XML)
.body(xmlDataInFile)
1. Con when() necesitamos especificar la ruta y el método:
.when()
.get("/users")
La ruta en REST-Assured también acepta variables:
int firstUserId = 123;
*********************
.pathParam("id", firstUserId)
.when()
.get("/users/{id}")
Validación de la respuesta