Apidog

Plataforma de desarrollo de API colaborativa todo en uno

Diseño de API

Documentación de API

Depuración de API

Simulación de API

Prueba automatizada de API

Introducción a las pruebas de API con Rest Assured para principiantes

Aprende lo básico de REST Assured para pruebas API con esta guía para principiantes. Automatiza pruebas, escribe scripts y mejora la eficiencia.

Daniel Costa

Daniel Costa

Updated on April 15, 2025

En el mundo del desarrollo de software, las API (Interfaces de Programación de Aplicaciones) se han convertido en la columna vertebral de las aplicaciones modernas. A medida que estas API crecen en complejidad e importancia, la necesidad de metodologías de prueba robustas y eficientes nunca ha sido más crítica. Entra Rest Assured, una biblioteca basada en Java que ha revolucionado la forma en que abordamos las pruebas de API.

Rest Assured ha ganado una inmensa popularidad entre los desarrolladores y los profesionales de QA por su simplicidad y potencia en la automatización de pruebas de API REST. Su sintaxis expresiva y su perfecta integración con Java la convierten en una opción ideal para los equipos que buscan implementar estrategias integrales de pruebas de API.

En esta guía completa, profundizaremos en las pruebas de API con Rest Assured, cubriendo todo, desde la configuración básica hasta las técnicas avanzadas, e incluso exploraremos cómo se compara con otras herramientas en el panorama de las pruebas de API.

¿Qué es Rest Assured en las pruebas de API?

Rest Assured es una biblioteca basada en Java diseñada específicamente para probar API RESTful. Proporciona un lenguaje específico del dominio (DSL) para realizar solicitudes HTTP y validar respuestas. Las características clave incluyen:

  • API fluida para facilitar la escritura de pruebas
  • Soporte para análisis XML y JSON
  • Integración con herramientas del ecosistema Java (TestNG, JUnit, etc.)
  • Amplias capacidades de validación

¿Qué es la API REST en las pruebas?

REST (Transferencia de Estado Representacional) API es un estilo arquitectónico para diseñar aplicaciones en red. En el contexto de las pruebas, las pruebas de API REST implican:

  1. Verificar el manejo correcto de los métodos HTTP (GET, POST, PUT, DELETE, etc.)
  2. Validar los códigos de estado de respuesta
  3. Comprobar la estructura y el contenido de la carga útil de la respuesta
  4. Probar el comportamiento de la API en diferentes escenarios (entradas válidas/no válidas, autenticación, etc.)
  5. Verificar los cambios de estado después de las operaciones de la API

¿Cuál es la diferencia entre Postman y Rest Assured?

Si bien ambas herramientas se utilizan para las pruebas de API, tienen diferentes propósitos:

Característica Postman Rest Assured
Interfaz Basada en GUI Basada en código
Lenguaje JavaScript Java
Curva de aprendizaje Más baja Más pronunciada
Automatización Posible con Newman Nativa
Integración CI/CD Requiere configuración adicional Perfecta
Flexibilidad de scripting Limitada al scripting de Postman Ecosistema Java completo

Rest Assured se prefiere normalmente cuando necesita integrar pruebas de API en su marco de automatización de pruebas basado en Java o cuando necesita escenarios de prueba más complejos.

¿Cuál es la diferencia entre TestNG y Rest Assured?

TestNG y Rest Assured tienen diferentes propósitos, pero a menudo se usan juntos:

Característica TestNG Rest Assured
Propósito principal Marco de pruebas Biblioteca de pruebas de API
Alcance Pruebas de propósito general Específico para pruebas de API
Características Organización de pruebas, ejecución paralela, informes Solicitudes HTTP, validación de respuestas
Soporte de idiomas Java Java

Puede usar TestNG para estructurar y ejecutar sus pruebas de Rest Assured, combinando las fortalezas de ambas herramientas. Por ejemplo:

import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;

public class CombinedTest {

    @BeforeClass
    public void setup() {
        baseURI = "https://api.example.com";
        basePath = "/v1";
    }

    @Test(groups = "smoke")
    public void testGetUser() {
        given()
            .pathParam("id", 1)
        .when()
            .get("/users/{id}")
        .then()
            .statusCode(200)
            .body("name", notNullValue());
    }

    @Test(groups = "regression")
    public void testCreateUser() {
        String newUser = "{\"name\":\"John Doe\",\"email\":\"john@example.com\"}";
        
        given()
            .contentType("application/json")
            .body(newUser)
        .when()
            .post("/users")
        .then()
            .statusCode(201)
            .body("id", notNullValue());
    }
}

Este ejemplo utiliza anotaciones de TestNG para organizar las pruebas y Rest Assured para la lógica real de las pruebas de API.

Comenzando con las pruebas de API con Rest Assured

Antes de sumergirnos en las complejidades de Rest Assured, configuremos nuestro entorno de desarrollo para asegurarnos de que estamos listos para comenzar a probar.

Configurando su entorno

Instalar Java: Rest Assured requiere Java 8 o superior. Descargue e instale el JDK más reciente del sitio web de Oracle o use OpenJDK.

Elegir un IDE: Si bien puede usar cualquier editor de texto, un Entorno de Desarrollo Integrado (IDE) puede aumentar significativamente su productividad. Las opciones populares incluyen:

  • IntelliJ IDEA
  • Eclipse
  • Visual Studio Code con extensiones de Java

Configurar un proyecto Maven: Maven ayudará a administrar nuestras dependencias. Cree un nuevo proyecto Maven en su IDE o use la línea de comandos:

mvn archetype:generate -DgroupId=com.example -DartifactId=rest-assured-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Agregar dependencia de Rest Assured: Abra su archivo pom.xml y agregue la siguiente dependencia:

<dependencies>
    <dependency>
        <groupId>io.rest-assured</groupId>
        <artifactId>rest-assured</artifactId>
        <version>4.4.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>7.4.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest</artifactId>
        <version>2.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Esto incluye Rest Assured, TestNG para la organización de pruebas y Hamcrest para matchers adicionales.

Actualizar Maven: Ejecute mvn clean install para descargar las dependencias.

Con estos pasos completados, ¡ahora está listo para comenzar a escribir pruebas de Rest Assured!

Conceptos básicos de las pruebas de API con Rest Assured

Rest Assured sigue una sintaxis Given-When-Then, inspirada en el desarrollo impulsado por el comportamiento (BDD). Esta estructura hace que las pruebas sean legibles e intuitivas, incluso para aquellos que no están familiarizados con la base de código.

La estructura Given-When-Then

  • Given: Configure las precondiciones de la prueba (por ejemplo, parámetros, encabezados, autenticación)
  • When: Realice la acción de la API (GET, POST, PUT, DELETE, etc.)
  • Then: Afirme la respuesta (código de estado, contenido del cuerpo, encabezados)

Analicemos un ejemplo simple:

import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
import org.testng.annotations.Test;

public class SimpleTest {
    @Test
    public void testGetRequest() {
        given()
            .baseUri("https://api.example.com")
        .when()
            .get("/users")
        .then()
            .statusCode(200)
            .body("data.size()", greaterThan(0))
            .body("data[0].id", notNullValue())
            .body("data[0].email", containsString("@"));
    }
}

Esta prueba hace lo siguiente:

  1. Establece el URI base para la API
  2. Envía una solicitud GET al endpoint "/users"
  3. Afirma que:
  • El código de estado es 200
  • La respuesta contiene una matriz de datos no vacía
  • El primer usuario en la matriz tiene un ID no nulo
  • El correo electrónico del primer usuario contiene un símbolo "@"

Comprendiendo la sintaxis de Rest Assured

Rest Assured utiliza una interfaz fluida, que le permite encadenar llamadas a métodos. Aquí hay un desglose de algunos métodos comunes:

  • given(): Inicia la especificación de la prueba
  • baseUri(), basePath(): Establece la URL base y la ruta para la solicitud
  • param(), queryParam(): Agrega parámetros de consulta
  • header(), headers(): Establece los encabezados de la solicitud
  • body(): Establece el cuerpo de la solicitud
  • when(): Marca el inicio de la sección de solicitud
  • get(), post(), put(), delete(): Métodos HTTP
  • then(): Inicia la sección de validación
  • statusCode(): Afirma el código de estado de la respuesta
  • body(): Valida el cuerpo de la respuesta

Técnicas avanzadas de pruebas de API con Rest Assured

A medida que se sienta más cómodo con Rest Assured, querrá explorar sus características más avanzadas para crear conjuntos de pruebas robustos e integrales.

Manejo de la autenticación en las pruebas de API con Rest Assured

Muchas API requieren autenticación. Rest Assured admite varios métodos de autenticación:

Autenticación básica

given()
    .auth().basic("username", "password")
.when()
    .get("/secure-endpoint")
.then()
    .statusCode(200);

OAuth 2.0

given()
    .auth().oauth2("your_access_token")
.when()
    .get("/oauth2-protected-endpoint")
.then()
    .statusCode(200);

Autenticación personalizada

Para las API con esquemas de autenticación personalizados, puede agregar encabezados manualmente:

given()
    .header("X-API-Key", "your-api-key")
.when()
    .get("/custom-auth-endpoint")
.then()
    .statusCode(200);

Parametrización de pruebas en las pruebas de API con Rest Assured

Las pruebas parametrizadas le permiten ejecutar la misma prueba con diferentes entradas, lo que aumenta su cobertura de prueba:

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class ParameterizedTest {

    @DataProvider(name = "userIds")
    public Object[][] createUserIds() {
        return new Object[][] {{1}, {2}, {3}, {4}, {5}};
    }

    @Test(dataProvider = "userIds")
    public void testMultipleUsers(int userId) {
        given()
            .pathParam("id", userId)
        .when()
            .get("https://api.example.com/users/{id}")
        .then()
            .statusCode(200)
            .body("id", equalTo(userId))
            .body("name", notNullValue());
    }
}

Esta prueba se ejecutará cinco veces, una vez para cada ID de usuario proporcionado por el proveedor de datos.

Validación de respuestas JSON en las pruebas de API con Rest Assured

Rest Assured proporciona potentes capacidades de análisis JSON utilizando JSONPath:

given()
.when()
    .get("https://api.example.com/users/1")
.then()
    .statusCode(200)
    .body("name", equalTo("John Doe"))
    .body("email", endsWith("@example.com"))
    .body("roles", hasItems("user", "admin"))
    .body("address.city", equalTo("New York"))
    .body("phoneNumbers.size()", greaterThanOrEqualTo(1));

Esta prueba valida varios aspectos de la respuesta JSON, incluidos los objetos y matrices anidados.

Manejo de respuestas XML

Si bien JSON es más común, algunas API todavía usan XML. Rest Assured también puede manejar respuestas XML:

given()
.when()
    .get("https://api.example.com/data.xml")
.then()
    .statusCode(200)
    .body("root.data.name", equalTo("Test Name"))
    .body("root.data.value", equalTo("100"));

Carga y descarga de archivos

Rest Assured puede manejar operaciones de archivos:

Carga de archivos

File fileToUpload = new File("path/to/file.txt");

given()
    .multiPart("file", fileToUpload)
.when()
    .post("/upload")
.then()
    .statusCode(200)
    .body("message", equalTo("File uploaded successfully"));

Descarga de archivos

byte[] downloadedFile = given()
.when()
    .get("/download/file.pdf")
.then()
    .statusCode(200)
    .extract().asByteArray();

// Now you can write the byte array to a file or process it further

Usando Apidog con las pruebas de API con Rest Assured

Si bien Rest Assured es poderoso por sí solo, puede mejorar su flujo de trabajo de pruebas de API incorporando Apidog, una plataforma de documentación y pruebas de API. Aquí le mostramos cómo puede usar Apidog junto con Rest Assured:

Diseñar API: Use APIdog para diseñar y documentar sus API antes de la implementación. Esto ayuda a crear una especificación clara para desarrolladores y testers.

Generar pruebas: APIdog puede generar casos de prueba basados en las especificaciones de su API. Si bien estas no son directamente pruebas de Rest Assured, pueden servir como un modelo de qué probar.

Implementar pruebas: Traduzca los casos de prueba generados por APIdog en pruebas de Rest Assured. Esto asegura que sus pruebas cubran todos los comportamientos especificados.

Colaborar: Comparta las especificaciones de la API y los resultados de las pruebas con su equipo a través de las funciones de colaboración de APIdog. Esto mantiene a todos alineados con el comportamiento esperado de la API.

Mantener la documentación: A medida que actualice sus pruebas de Rest Assured, asegúrese de que la documentación de APIdog permanezca sincronizada. Esto ayuda a mantener una documentación de API precisa y actualizada.

Cómo integrar la API REST con Apidog

La integración de una API REST con Apidog implica algunos pasos básicos. Aquí hay un proceso detallado paso a paso para integrar la API REST con Apidog:

button
Sign up Apidog Account

2. Haga clic en "Nuevo proyecto" y asigne un nombre a su proyecto.

Add New Project Name

3. Cree una nueva API.

Create a New API

4. Ahora haga clic en el botón "Agregar endpoint" y complete los siguientes detalles para el endpoint "Obtener todos los libros": En este caso,

URL: http://localhost:5000/books

Método: GET

Nombre del endpoint: Obtener todos los libros

Add Endpoint

5. Especifique cualquier parámetro de consulta o encabezado que pueda requerir su endpoint haciendo clic en los botones "Agregar parámetro" o "Agregar encabezado".

Add Parameter

6. Haga clic en el botón "Enviar" para probar su endpoint y asegurarse de que funciona correctamente. Una vez que su endpoint funcione como se espera, haga clic en el botón "Guardar APICase" para agregarlo a su proyecto Apidog.

Save APICase

7. Ahora puede usar Apidog para probar su endpoint y generar documentación para su API de Flask.

Generate Your Flask API

8. Defina los pasos de prueba de su caso de prueba y seleccione los endpoints que desea incluir en las pruebas. Personalice los casos de prueba según sus necesidades.

Customize the Test Cases

9. Una vez que pruebe los casos, puede publicarlos en la web o exportarlos a un archivo PDF o Markdown.

Export Test Cases

Apidog ofrece numerosas opciones de personalización para ayudar a los usuarios a utilizar y probar sus API de acuerdo con sus requisitos específicos.

Mejores prácticas para las pruebas de API con Rest Assured

Para aprovechar al máximo las pruebas de API con Rest Assured, considere estas mejores prácticas:

Organice sus pruebas: Use TestNG o JUnit para estructurar sus pruebas lógicamente. Agrupe las pruebas relacionadas y use las anotaciones apropiadas para la configuración y el desmontaje.

Reutilice el código: Cree métodos de utilidad para operaciones comunes para mantener sus pruebas DRY (No se repita). Por ejemplo:

public class TestUtils {
    public static RequestSpecification getBaseRequestSpec() {
        return given()
            .baseUri("https://api.example.com")
            .contentType(ContentType.JSON)
            .accept(ContentType.JSON);
    }
}

Luego úselo en sus pruebas:

@Test
public void testSomething() {
    TestUtils.getBaseRequestSpec()
        .when()
            .get("/endpoint")
        .then()
            .statusCode(200);
}

Use el registro: Habilite el registro para depurar problemas más fácilmente. Rest Assured proporciona varias opciones de registro:

given()
    .log().all()  // Log all request details
.when()
    .get("/endpoint")
.then()
    .log().ifValidationFails()  // Log response if assertion fails
    .statusCode(200);

Valide los esquemas: Use la validación de esquema JSON para asegurarse de que las estructuras de respuesta sean correctas:

given()
.when()
    .get("/users")
.then()
    .assertThat()
    .body(matchesJsonSchemaInClasspath("user-schema.json"));

Maneje datos específicos del entorno: Use archivos de propiedades o variables de entorno para administrar diferentes entornos:

public class Config {
    public static String getBaseUrl() {
        return System.getProperty("api.baseUrl", "https://api.example.com");
    }
}

Luego use esto en sus pruebas:

@Test
public void testEndpoint() {
    given()
        .baseUri(Config.getBaseUrl())
    .when()
        .get("/users")
    .then()
        .statusCode(200);
}

Use la extracción de respuesta: Para validaciones complejas, extraiga la respuesta y realice afirmaciones:

Response response = given()
    .when()
        .get("/users")
    .then()
        .extract().response();

JsonPath jsonPath = response.jsonPath();
List<String> names = jsonPath.getList("name");
Assert.assertTrue(names.contains("John Doe"));

Implemente matchers personalizados: Para validaciones específicas, cree matchers Hamcrest personalizados:

public class CustomMatchers {
    public static Matcher<String> isValidEmail() {
        return new TypeSafeMatcher<String>() {
            @Override
            protected boolean matchesSafely(String item) {
                return item.matches("^[A-Za-z0-9+_.-]+@(.+)$");
            }

            @Override
            public void describeTo(Description description) {
                description.appendText("should be a valid email");
            }
        };
    }
}

Úselo en sus pruebas:

given()
.when()
    .get("/users/1")
.then()
    .body("email", CustomMatchers.isValidEmail());

Use proveedores de datos para pruebas integrales: Aproveche los proveedores de datos de TestNG para probar múltiples escenarios:

@DataProvider(name = "userRoles")
public Object[][] userRoles() {
    return new Object[][] {
        {"admin", 200},
        {"user", 403},
        {"guest", 401}
    };
}

@Test(dataProvider = "userRoles")
public void testAccessControl(String role, int expectedStatus) {
    given()
        .auth().oauth2(getTokenForRole(role))
    .when()
        .get("/admin-endpoint")
    .then()
        .statusCode(expectedStatus);
}

Implemente un mecanismo de reintento: Para pruebas inestables o redes poco confiables, implemente un mecanismo de reintento:

@Test(retryAnalyzer = RetryAnalyzer.class)
public void testWithRetry() {
    // Your test code here
}

public class RetryAnalyzer implements IRetryAnalyzer {
    private int retryCount = 0;
    private static final int MAX_RETRY_COUNT = 3;

    @Override
    public boolean retry(ITestResult result) {
        if (retryCount < MAX_RETRY_COUNT) {
            retryCount++;
            return true;
        }
        return false;
    }
}

Use especificaciones: Para expectativas consistentes de solicitud/respuesta, use especificaciones:

RequestSpecification requestSpec = new RequestSpecBuilder()
    .setBaseUri("https://api.example.com")
    .setContentType(ContentType.JSON)
    .build();

ResponseSpecification responseSpec = new ResponseSpecBuilder()
    .expectStatusCode(200)
    .expectContentType(ContentType.JSON)
    .build();

@Test
public void testWithSpecs() {
    given()
        .spec(requestSpec)
    .when()
        .get("/users")
    .then()
        .spec(responseSpec);
}

Conclusión

Las pruebas de API con Rest Assured ofrecen una forma poderosa y flexible de automatizar sus pruebas de API. Al combinarlo con herramientas como TestNG y APIdog, puede crear una estrategia integral de pruebas de API que se integra perfectamente con sus proyectos basados en Java.

Las ventajas clave de usar Rest Assured incluyen:

  1. Simplicidad: Su API fluida hace que escribir pruebas sea intuitivo y legible.
  2. Potencia: Proporciona amplias capacidades para la creación de solicitudes y la validación de respuestas.
  3. Integración: Funciona bien con el ecosistema Java, incluidas las herramientas de compilación y las canalizaciones CI/CD.
  4. Flexibilidad: Desde simples solicitudes GET hasta autenticación compleja y manejo de archivos, Rest Assured puede manejarlo todo.

A medida que las API continúan desempeñando un papel crucial en la arquitectura de software moderna, las pruebas de API robustas se vuelven cada vez más importantes. Rest Assured lo equipa con las herramientas para garantizar que sus API sean confiables, tengan un buen rendimiento y se comporten como se espera.

Recuerde, las pruebas de API efectivas no se tratan solo de encontrar errores; se trata de garantizar la calidad y la confiabilidad de todo su sistema. Con Rest Assured, tiene una herramienta versátil a su disposición para probar a fondo sus API y detectar problemas antes de que lleguen a producción.

A medida que continúe su viaje con Rest Assured, siga explorando sus características, manténgase actualizado con las últimas versiones y no dude en contribuir a la comunidad de código abierto. ¡Felices pruebas!

30 Mejores Alternativas a Postman en 2025 | Herramientas Gratuitas y de Código Abierto para Pruebas de APIReseñas de software

30 Mejores Alternativas a Postman en 2025 | Herramientas Gratuitas y de Código Abierto para Pruebas de API

En este artículo, exploraremos alternativas a Postman, sus características, ventajas y desventajas. Comprenderás mejor las opciones principales y elegirás la mejor herramienta para tus necesidades de desarrollo de API.

Daniel Costa

April 11, 2025

Las mejores herramientas de pruebas de automatización sin código de 2025Reseñas de software

Las mejores herramientas de pruebas de automatización sin código de 2025

Explora el poder de las herramientas de automatización de pruebas sin código y cómo revolucionan el control de calidad. Descubre cómo agilizan y facilitan las pruebas.

Daniel Costa

April 8, 2025

Herramientas gratuitas de IA de Google para transformar tus proyectosReseñas de software

Herramientas gratuitas de IA de Google para transformar tus proyectos

Explora 12 herramientas IA Google gratis. Gemini, traducción, voz, visión e infraestructura. ¡Transforma tus proyectos sin costo!

Daniel Costa

April 2, 2025