Tutorial REST asegurado para pruebas de automatización de API (ejemplo)
¿Qué es Descanso Asegurado?
Está seguro Le permite probar API REST mediante bibliotecas de Java y se integra bien con Maven. Tiene técnicas de comparación muy eficientes, por lo que confirmar los resultados esperados también es bastante sencillo. Rest Assured tiene métodos para obtener datos de casi todas las partes de la solicitud y la respuesta, sin importar cuán complejas sean las estructuras JSON.
Para la comunidad de pruebas, las pruebas de automatización de API son todavía nuevas y de nicho. Las complejidades de JSON hacen que las pruebas de API sean inexploradas. Pero eso no las hace menos importantes en el proceso de prueba. El marco Rest Assured.io lo ha simplificado mucho utilizando los conceptos básicos de Java, lo que lo convierte en algo muy deseable de aprender.
¿Por qué necesitas Rest-Assured?
Imagine que abre la vista del mapa de Google y busca un lugar al que desea ir, inmediatamente ve restaurantes cercanos, ve opciones para viajar; de algunos de los principales proveedores de viajes y vea tantas opciones a su alcance. Todos sabemos que no son productos de Google, entonces, ¿cómo logra Google mostrarlo? Utilizan las API expuestas de estos proveedores. Ahora, si se le pide que pruebe este tipo de configuración, incluso antes de que se cree o esté en desarrollo la interfaz de usuario, probar las API se vuelve extremadamente importante y probarlas repetidamente, con diferentes combinaciones de datos, lo convierte en un caso muy adecuado para la automatización.
Anteriormente, usábamos lenguajes dinámicos como groovy y ruby para lograr esto, y era un desafío. Por lo tanto, las pruebas de API no fueron exploradas por las pruebas funcionales.
Pero usar Rest Assured, pruebas de automatización de API, enviar solicitudes https simples con personalizaciones fáciles de usar es simple si uno tiene conocimientos básicos de Java. Es necesario comprender las pruebas de API y las pruebas de integración, pero publique que la automatización Rest Assured brinda muy buena confianza en el backend, mientras que las pruebas de front-end pueden centrarse solo en la interfaz de usuario y las operaciones del lado del cliente. Rest Assured es un código abierto con muchos métodos adicionales y la adición de bibliotecas lo ha convertido en una excelente opción para la automatización de API.
Cómo configurar Rest Assured.io con Eclipse
Paso 1) Instalar Java. Consulte este guía
Paso 2) Descargue un IDE para comenzar: eclipse
Paso 3) Instale Maven y configure su eclipse. Consulte aquí.
Configuración Tenga la seguridad
- Cree un proyecto Maven en su IDE. Estamos usando Intellij, pero obtendrá una estructura similar en cualquier IDE que esté usando.
- Abre tu POM.xml

Para estar seguro.io: para Java versión < 9 usuarios:
Agregue la siguiente dependencia a su POM.xml:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>json-path</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>xml-path</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>json-schema-validator</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>
Para descansar asegurado.io: Para Java usuarios de la versión 9+:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured-all</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>
Solución de Problemas:
En caso de que vea errores y no esté seguro de si las dependencias se descargaron bien,
- Realice una compilación de Maven para importar todas las dependencias; nuevamente encontrará ayuda sobre la configuración de Maven en guru99.
- Aún así, ve errores, luego realiza una limpieza de Maven seguida de una instalación de Maven, y debería compilarse sin errores.
- Puede agregar las siguientes líneas en su clase Java y ver que no hay errores de compilación.
import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*;
Primer script simple de Descanso Asegurado
Sintaxis:
La sintaxis de Rest Assured.io es la parte más hermosa, ya que es muy parecida a BDD y comprensible.
Given(). param("x", "y"). header("z", "w"). when(). Method(). Then(). statusCode(XXX). body("x, ”y", equalTo("z"));
Explicación:
Código | Explicación |
---|---|
Dado() | La palabra clave "dada" le permite establecer un fondo; aquí puede pasar los encabezados de la solicitud, el parámetro de consulta y ruta, el cuerpo y las cookies. Esto es opcional si estos elementos no son necesarios en la solicitud. |
Cuando() | La palabra clave "cuándo" marca la premisa de su escenario. Por ejemplo, "cuando" obtengas/publices/pongas algo, haz otra cosa. |
Método() | Sustituya esto por cualquiera de las operaciones CRUD (obtener/publicar/poner/eliminar) |
Entonces() | Sus condiciones de afirmación y comparación van aquí |
Ahora que tiene la configuración y algunos conocimientos sobre la sintaxis, creemos nuestra primera prueba sencilla. Está bien si hasta ahora la estructura le parece nueva, a medida que codifique más interpretando cada línea, la dominará.
¿Qué vas a buscar?
Abra su navegador y presione – https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1
. Asegúrese de ver algo como lo siguiente.
En caso de que reciba un error en el navegador cuando intenta obtener una respuesta a la solicitud,
- Vea si ha utilizado Https o Http. Es posible que su navegador tenga configuraciones para no abrir sitios web inseguros.
- Vea si tiene algún proxy o firewall que impida que su navegador abra sitios web.
*Nota: – No usaste ningún encabezado aquí, ni cuerpo, ni cookies. Era una URL y también obtienes contenido de la API y no publicas ni actualizas ningún contenido existente, por lo que es una llamada GET. Recuerde esto para comprender mejor nuestra primera prueba.
El objetivo de su prueba:
El objetivo del script es imprimir el mismo resultado en su consola IDE que recibió en el navegador a través de Rest Assured.
Codifiquemos esto con los siguientes pasos:
Obteniendo el cuerpo de respuesta
Paso 1) Cree una clase llamada "myFirstRestAssuredClass"
Paso 2) Crea un método llamado "getResponseBody"
Paso 3) Similar a la estructura aprendida anteriormente, cuando y luego, escriba el siguiente código
dado(). -> No se requieren encabezados, ni consulta ni parámetro de ruta.
cuando(). -> Sin configuración de condición específica
conseguir('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1
'). ->solo es necesario proporcionar la URL
entonces(). -> No se requieren afirmaciones específicas
registro(). all() -> Una vez que se obtiene toda la respuesta, registre la respuesta, los encabezados, esencialmente todo lo que le devuelve la solicitud.
public static void getResponseBody(){ given().when().get("https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log() .all(); }
Ahora observe que la URL utilizada es larga y menos legible; si observa con atención, notará que se están utilizando 3 parámetros de consulta que son
- Identificación del cliente
- Contraseña
- Número_de_cuenta
No se preocupe, nos ayuda a pasar cada parte (consulta, ruta, parámetro de encabezado) por separado, lo que hace que el código sea más legible y fácil de mantener. Además, podemos parametrizar los datos de un archivo externo según sea necesario.
Para usar el parámetro de consulta, volvemos a nuestra definición de sintaxis y vemos que todos se pasan como parte de lo dado.
public static void getResponseBody(){ given().queryParam("CUSTOMER_ID","68195") .queryParam("PASSWORD","1234!") .queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log() .body(); }
**Tenga en cuenta que utilizamos "cuerpo" en lugar de "todos"; esto nos ayuda a extraer solo el cuerpo de la respuesta.
Salida:
Obtener el código de estado de respuesta
El siguiente método que programaremos será obtener el código de estado y también poner una aserción para validar el mismo.
Paso 1) Crea un método llamado getResponseStatus()
Paso 2) Utilice la misma estructura de solicitud utilizada anteriormente. Cópialo y pégalo.
Paso 3) En lugar de registrarlo, utilizamos el método incorporado 'getStatusCode' de Rest Assured para recuperar el valor del código de estado.
Paso 4) Para afirmar que su código de estado es 200, utilizamos las palabras clave: afirmarQue().statusCode(expectedCode)
**Nota: la URL es una variable que se utiliza por simplicidad. La URL contiene toda la URL de solicitud de API.
public static void getResponseStatus(){ int statusCode= given().queryParam("CUSTOMER_ID","68195") .queryParam("PASSWORD","1234!") .queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode(); System.out.println("The response status is "+statusCode); given().when().get(url).then().assertThat().statusCode(200); }
Salida:
Necesidad de Negocios
Una de las reglas básicas de la automatización es que debemos establecer puntos de control para que la prueba se realice sólo si se cumplen todas las condiciones requeridas. En las pruebas de API, la validación más básica es verificar si el código de estado de la solicitud está en formato 2XX.
El código completo, hasta ahora:
import java.util.ArrayList; import static io.restassured.RestAssured.*; import static java.util.concurrent.TimeUnit.MILLISECONDS; public class myFirstRestAssuredClass { final static String url="https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1"; public static void main(String args[]) { getResponseBody(); getResponseStatus(); ; } //This will fetch the response body as is and log it. given and when are optional here public static void getResponseBody(){ given().when().get(url).then().log() .all(); given().queryParam("CUSTOMER_ID","68195") .queryParam("PASSWORD","1234!") .queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log().body(); } public static void getResponseStatus(){ int statusCode= given().queryParam("CUSTOMER_ID","68195") .queryParam("PASSWORD","1234!") .queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode(); System.out.println("The response status is "+statusCode); given().when().get(url).then().assertThat().statusCode(200); } }
*Nota:
- 200 es una respuesta exitosa para este escenario. A veces, es necesario que la solicitud también falle y entonces podrías usar 4XX o 5XX. Intente cambiar el código de estado proporcionando parámetros no válidos y verifíquelo.
- Cuando afirmamos una condición, no se imprimirá en la consola a menos que haya un error.
Script para recuperar diferentes partes de una respuesta
La obtención del cuerpo de la respuesta y del código de estado de la respuesta ya se trata en el segmento anterior. Vale la pena señalar que para recuperar diferentes partes de la respuesta, la palabra clave "extraer" es muy importante.
Encabezamiento
Rest Assured es un lenguaje muy sencillo y recuperar encabezados es igual de simple. El nombre del método es encabezados(). Como antes, crearemos un método independiente para hacer lo mismo.
public static void getResponseHeaders(){ System.out.println("The headers in the response "+ get(url).then().extract() .headers()); }
Tenga en cuenta que aquí se omite 'given().when()' y que la línea de código comienza desde get(), esto se debe a que aquí no se realiza ninguna condición previa ni verificación para realizar la solicitud y obtener una respuesta. En tales casos, es opcional utilizar el mismo.
salida:
Necesidad de Negocios:
Muchas veces, necesitarás usar el token de autorización o una cookie de sesión para la solicitud posterior y, en la mayoría de los casos, estos detalles se devuelven como encabezados de la respuesta.
Tiempo de Respuesta
Para obtener el tiempo necesario para obtener la respuesta del backend u otros sistemas posteriores, Rest Assured proporciona un método llamado "timeIn" con una unidad de tiempo adecuada para obtener el tiempo necesario para devolver la respuesta.
public static void getResponseTime(){ System.out.println("The time taken to fetch the response "+get(url) .timeIn(TimeUnit.MILLISECONDS) + " milliseconds"); }
Salida:
Necesidad de Negocios:
Una característica muy importante al probar las API es su tiempo de respuesta, para medir el rendimiento de la aplicación. Tenga en cuenta que el tiempo necesario para su llamada puede tardar más o menos dependiendo de su velocidad de Internet, el rendimiento de la API en ese momento, la carga del servidor y otros factores que afectan el tiempo.
Content-Type
Puede obtener el tipo de contenido de la respuesta utilizando el método "contentType ()".
public static void getResponseContentType(){ System.out.println("The content type of response "+ get(url).then().extract() .contentType()); }
Salida
Necesidad de Negocios:
A veces, obtener el tipo de contenido es esencial para garantizar que no haya brechas de seguridad para amenazas de origen cruzado o simplemente para garantizar que el contenido pasado cumpla con los estándares de la API.
Obtener elemento JSON individual
A partir de la respuesta dada, se le pide que calcule el monto total, debe recuperar cada monto y resumirlo.
Pasos:
Paso 1) El campo de monto está dentro de una matriz con la clave "declaraciones" que a su vez está en la lista con la clave "resultado"
Paso 2) Rest Assured, proporciona un mecanismo para alcanzar los valores en la API utilizando "ruta"
Paso 3) La ruta para obtener los montos es “result.statements.AMOUNT”. Piense en ello como si fuera Xpath en Selenium.
Paso 4) Obtenga todas las cantidades de una colección y luego recorra todos los valores para calcular la suma
public static void getSpecificPartOfResponseBody(){ ArrayList<String> amounts = when().get(url).then().extract().path("result.statements.AMOUNT") ; int sumOfAll=0; for(String a:amounts){ System.out.println("The amount value fetched is "+a); sumOfAll=sumOfAll+Integer.valueOf(a); } System.out.println("The total amount is "+sumOfAll); }
Nota: Dado que el valor de la cantidad está en el tipo de datos de cadena, lo convertimos a un número entero y lo usamos para la suma.
Salida:
Resumen
- Rest Assured es un grupo de bibliotecas Java que nos permite automatizar Pruebas de API de descanso
- Tenga la seguridad de que es Java-basado y conocimiento del núcleo Java suficiente para aprenderlo
- Ayuda a recuperar valores de solicitud y respuesta de estructuras JSON complicadas.
- Tu API La solicitud se puede personalizar con una variedad de encabezados, consultas, parámetros de ruta y cualquier sesión o cookies que se establezcan.
- Ayuda a establecer declaraciones y condiciones de afirmación.
- Si bien Rest Assured es muy útil cuando la respuesta es de tipo JSON, es posible que sus métodos no funcionen perfectamente si el tipo de contenido es HTML o texto sin formato.