Saltar al contenido

Cómo probar la API con un ejemplo

¿Qué declaran los demás?

No dudes le permite probar las API REST utilizando bibliotecas java y se integra bien con Maven. Tiene técnicas de emparejamiento muy efectivas, por lo que es bastante fácil confirmar los resultados esperados. Rest Assured tiene métodos para recuperar 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, API Automation Testing es todavía nuevo y especializado. Las complejidades de JSON mantienen las pruebas de API sin auditar. Pero eso no lo hace tan importante en el proceso de prueba. El framework Rest Assured.io se hace muy simple usando los elementos básicos de java, lo que lo convierte en algo muy deseable de aprender.

En este tutorial, aprenderá,

¿Por qué necesita rehabilitación?

Imagina que abres la vista del mapa de Google y miras a dónde quieres ir, ves restaurantes cercanos de inmediato, ves opciones para desplazarte; de varios 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? Usan las API de exposición de estos proveedores. Ahora, si se le pide que pruebe este tipo de configuración, incluso antes de que se cree o desarrolle la interfaz de usuario, probar las API es extremadamente importante y probarlas repetidamente, con diferentes combinaciones de datos, es un escenario muy adecuado para la automatización.

Anteriormente, usamos lenguajes dinámicos como groovy, ruby ​​para lograr esto, y fue un desafío. Entonces, las pruebas de API no se probaron funcionalmente.

Pero al usar Rest Assured, las API son pruebas automatizadas, lanzando aplicaciones https simples con personalizaciones fáciles de usar, si se tiene un conocimiento básico de Java. Es necesario comprender las pruebas de API y las pruebas de integración, pero después de eso, la automatización Rest Assured brinda muy buena confianza para el fin de semana y las pruebas de front-end pueden centrarse directamente en la interfaz de usuario y las operaciones del lado del cliente. Rest Assured es de código abierto con muchos métodos adicionales y se están agregando bibliotecas como una excelente opción para la automatización de API.

Una guía paso a paso para configurar Rest Assured.io

Paso 1) Instale Java. Consulte este guía

Paso 2) Descargue IDE para comenzar: eclipse

Paso 3) Instale Maven y configure su eclipse. Referir aquí.

Configuración de descanso asegurado

  1. Cree Project Maven en su IDE. Estamos usando Intellij, pero encontrará una estructura similar a cualquier IDE que esté usando.
  2. Abra su POM.xml

Estructura del proyecto

Para Rest Assured.io: Para la versión de Java <9 usuario:

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 Rest Assured.io: para usuarios de Java 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 han descargado correctamente,

  1. Haga un edificio de maven para importar todas las dependencias, nuevamente obtendrá ayuda de un guru99 basado en maven.
  2. Aún así, verá errores, luego limpie maven e instale maven después, y debería compilarse sin ningún error.
  3. Puede agregar las siguientes líneas a su clase java y ver que no haya errores de compilación.

import io.restassured.RestAssured.*;
import io.restassured.matcher.RestAssuredMatchers.*;
import org.hamcrest.Matchers.*;
        

El primer guión sencillo de Rest Assured

Sintaxis:

La sintaxis de Rest Assured.io es la más hermosa, ya que es un BDD muy comprensible y comprensible.


Given(). 
        param("x", "y"). 
        header("z", "w").
when().
Method().
Then(). 
        statusCode(XXX).
        body("x, ”y", equalTo("z"));

Explicación:

CódigoExplicación
Dado ()La palabra clave ‘dado’, le permite establecer el fondo, aquí pasa los encabezados de la solicitud, el parámetro de consulta y ruta, el cuerpo, las cookies. Esto es opcional si la solicitud no incluye estos elementos.
Cuándo ()la palabra clave “cuando” marca la base de su historia. Por ejemplo, ‘cuando’ reciba / publique / publique algo, haga otra cosa.
Método () Reemplace esto con cualquiera de las operaciones CRUD (buscar / publicar / agregar / eliminar)
Luego () Sus condiciones de aserción y matriz van aquí

Ahora que tiene algo de configuración y antecedentes en la sintaxis, creemos nuestra primera prueba simple. Está bien si la estructura le parece nueva hasta ahora, a medida que interprete el código en cada línea, lo dominará.

¿Qué obtendrás?

Abra su navegador y presione – http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Asegúrese de ver algo como se muestra a continuación.

En caso de que reciba un error del navegador cuando intente responder a la solicitud,

  1. Vea si está usando Https o Http. Su navegador puede tener configuraciones para no abrir sitios web inseguros.
  2. Vea si tiene algún proxy o firewall que evite que su navegador abra sitios web.

*Nota – No usó ningún encabezado aquí, ni cuerpo, ni cookie. Era una URL y también obtiene contenido de la API y no publica ni actualiza ningún contenido existente, por lo que es una llamada GET. Recuerde esto para comprender mejor nuestra primera prueba.

Propósito de su prueba:

El objetivo del script es imprimir el mismo resultado en su consola IDE que lo que encontró en el navegador a través de Rest Assured.

Codifiquemos esto con los pasos a continuación:

Conseguir que el cuerpo responda

Paso 1) Crea una clase llamada “myFirstRestAssuredClass”

Paso 2) Crea un método llamado “getResponseBody”

Paso 3) Similar a la estructura aprendida anteriormente, escriba y luego escriba el código a continuación

dado (). -> No se requieren encabezados, no hay problema ni parámetro de ruta.

Cuándo (). -> Sin configuración condicional específica

obtener (‘http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1‘). -> solo necesito proporcionar la URL

luego (). -> No se requieren confirmaciones específicas

Iniciar sesión (). all () -> Una vez que se recibe toda la respuesta, registro de respuestas, encabezados, básicamente todo lo que la aplicación te devuelve.

public static void getResponseBody(){
   given().when().get("http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log()
  .all();
 
}

Ahora tenga en cuenta que la URL utilizada es larga y más legible, si observa de cerca, notará que se están utilizando 3 parámetros de consulta que

  1. Identificación del cliente
  2. Contraseña
  3. Account_No

Rest Assured, nos ayuda a ejecutar cada sección (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 un parámetro de consulta, volvemos a nuestra definición de la sintaxis y vemos que todos se pasan como parte de un determinado.

public static void getResponseBody(){
 
   given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("http://demo.guru99.com/V4/sinkministatement.php").then().log()
           .body();
}

** Tenga en cuenta que usamos “cuerpo” en lugar de “todos”; esto solo nos ayuda a eliminar el cuerpo de la respuesta.

Producción:

Salida para getResponseBody

Obtener el código de estado de respuesta

El siguiente método que escribimos es obtener el código de estado y agregar una declaración para validar el mismo.

Paso 1) Crea un método llamado getResponseStatus ()

Paso 2) Utilice la misma estructura de aplicación utilizada anteriormente. Cópialo y pégalo.

Paso 3) En lugar de iniciar sesión, utilizamos el método integrado ‘getStatusCode’ de Rest Assured para obtener el valor del código de estado.

Paso 4) Para confirmar que su código de estado es 200, usamos las palabras clave – assertThat (). StatatCode (código de espera)

** Nota: una URL es una variable que se utiliza para simplificar. La URL conserva la URL completa de la aplicación API.

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1") .when().get("http://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

Producción:

Salida para getResponseStatus

Necesidad de Negocios

Una de las reglas básicas de la automatización es que debemos configurar puntos de control para que la prueba solo continúe si se cumplen todas las condiciones necesarias. 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.

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="http://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("http://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("http://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

}

* Nota:

  1. 200 es una respuesta exitosa a esta situación. A veces, también desea que la solicitud falle, y luego puede usar 4XX o 5XX. Intente cambiar el código de estado proporcionando parámetros no válidos y comprobando.
  2. Una vez que confirmemos una condición, no habrá impresión en la consola a menos que haya un error.

Script para obtener diferentes partes de la respuesta

El cuerpo de la respuesta presentada y el código de estado de la respuesta ya se tratan en el segmento anterior. Vale la pena señalar que la palabra clave “extracto” es muy importante para obtener diferentes partes de la respuesta.

Encabezamiento

Rest Assured es un lenguaje muy simple y obtener encabezados es igual de simple. El método se llama 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 ‘dado (). Cuando se omite () ‘aquí, y la línea de código comienza desde la recepción (), esto se debe a que aquí no se realiza ninguna condición previa o verificación para presionar la solicitud y obtener una respuesta. En tales casos, es opcional usar el mismo.

Producción:

Salida para getResponseHeader

Requisito de negocio:

Algunas veces, tendría que usar el token de autorización o la cookie de sesión para la solicitud posterior y, en su mayor parte, estos datos se devuelven como encabezados de respuesta.

Tiempo de respuesta

Para encontrar el tiempo para obtener la respuesta de la reserva u otros sistemas posteriores, Rest Assured proporciona un método llamado “timeIn” con un tiempo adecuado para devolver 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");
}

Producción:

Salida para getResponseTime

Requisito de negocio:

Un aspecto muy importante de las API de prueba es su tiempo de respuesta, para medir el rendimiento de la aplicación. Tenga en cuenta que el tiempo necesario para su llamada será más o menos dependiendo de la velocidad de Internet, el rendimiento de la API en ese momento, la carga del servidor y otros factores que afectan el tiempo.

Tipo de contenido

Puede recuperar 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());
}

Producción

Salida para getContentType

Requisito de negocio:

A veces es necesario obtener el tipo de contenido para garantizar que no haya brechas de seguridad en relación con las amenazas de origen cruzado o para garantizar que la ejecución del contenido cumpla con los estándares API.

Jet Element Single Fetch

A partir de la respuesta dada, se le pide que calcule la cantidad total, debe encontrar cada cantidad y resumirla.

Grados:

Paso 1) El campo de tamaño está dentro de una cadena con una clave “declaración” que a su vez se enumera con una clave de “resultado”

Paso 2) Rest Assured, proporciona un mecanismo para extraer los valores en la API usando “ruta”

Paso 3) La forma de lograr volúmenes es “result.statements.AMOUNT”. Piense en ello como Xpath en selenio.

Paso 4) Encuentre todas las cantidades en una colección y luego repita 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 un tipo de datos de cadena contiene el valor del tamaño, lo convertimos a un número entero y lo usamos para sumar.

Producción:

Salida para getSpecificPartOfResponse

Resumen:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *