QA - Test Automation

TEAMS QA

 
Somos un equipo de desarrollo de Software que trabaja con metodologías ágiles. 
Ágil, nos enfocamos en satisfacer al cliente mediante la entrega temprana y continua de un Software con valor, involucrando al dueño del producto o cliente desde la concepción de la idea hasta la implementación dada al consumidor. 

¿Cómo se cumple este objetivo?

Fomentando la calidad durante todo el proceso de desarrollo con el resto del equipo. Enfocándonos en prevenir defectos no solo detectarlos. Involucramos a cada integrante del equipo para que se entienda y se ponga en práctica nuestro objetivo.
Entendemos y participamos activamente en mantener el nivel de calidad y buscar mejorar continuamente por eso podemos afirmar.

“La calidad es responsabilidad de todos”

 Calidad más allá de un Software

También hablamos de la calidad en los procesos, calidad en la tecnología y herramientas utilizadas, calidad en la relación de los miembros del equipo. Todos estos elementos influyen en la calidad de los productos que cocreamos.

¡Elimine los riesgos y prepárate para el éxito!



Cypress

Pruebas de la API con Cypress

Actualmente hay muchas formas para realizar pruebas a las APIs pero quiero darle algunos tips que me han resultado muy útiles al usar cypress y HTTP request el cual provee cypress. Por cierto, para este post supondré que ya conoces de Node js, npm y de Rest APIs.

Primero empecemos con las variables de ambiente. Un caso de uso muy común para esta funcionalidad de cypress, es cuando ya conocemos un valor que se repite más de una vez. Un ejemplo puede ser la url de la API o también puede ser los credenciales de un usuario. 

En cypress.json la cual debe esta en la raíz donde creaste tu proyecto de cypress tendremos estos valores:

{
  “env”: {
    “customerId”: “13919113”
  }
}

En nuestro test case, tendremos el siguiente código:

describe(“Check customer”, () => {
  it(“verify that the customer exists”, () => {
    const customerId = Cypress.env(“customerId”);
    cy.log(customerId); // return => “13919113”
  });
});

Cypress nos permite cargar un conjunto de datos fijos en un json pero además podemos editar el contenido o un valor en específico para posteriormente ser utilizando en otro test case. 

Ejemplo para cargar un conjunto de datos:

En la línea 6 agregamos un assert con “expect” y se vería de esta forma:

 


De esta forma garantizamos tener casos de integración de nuestro sistema ya que los datos se almacenan en JSON que le indicamos en la carpeta “fixtures”.


Cypress también nos permite crear comandos ya sea para llamar un servicio de nuestro API. Para realizar esto, debemos ir a la carpeta de support y en el index.js agregar el comando que necesites, por ejemplo:


Para ejecutar este comando desde un test case, basta con solo llamarlo con “cy.getCustomer(id)” pero como se puede apreciar en la imagen, el comando que agregamos retorna un json la cual es la respuesta del API que consultamos. Para poder consultar y validar se debe hacer de esta forma:

 

 

Incluso dentro de un comando puedes llamar nuevamente como una función recursiva. 

 

const maxRetry = 50;
Cypress.Commands.add(“checkIfExists”, (json) => {
cy.request({
  method: “POST”,
  headers: {
    Authorization: tokenUser,
  },
  url: `${baseURL}api/exist`,
  body: json,
  failOnStatusCode: false,
}).then((resp) => {
  if (resp….) {
    if (maxRetry === 0) {
      throw “Agoto la cantidad de intentos…”;
    }
    cy.wait(2000); // se espera 2 segundo.
    cy.checkIfExists(json);
    maxRetry = maxRetry – 1;
  } else {
    return resp;
  }
});
});



Optimizando nuestras pruebas y rendimiento

Implementar  la integración de los sistemas en sí, probando varias partes al mismo tiempo fue bastante complejo debido a que anteriormente esto se realizaba de forma manual y no automatizada. Luego, la automatización, prueba partes pequeñas de la aplicación que necesitan integrarse para probar funcionalidades completas de la aplicación. Esta integración añade complejidad al proceso de automatización pero también es la que le da solidez a las pruebas.

Al realizar una automatización de casos se está simulando la ejecución de la aplicación de forma parcial o completa en un ambiente o laboratorio de QA. Al realizar estas corridas automatizadas se puede probar la integración de lo que se está desarrollando y no solo una parte pequeña como una función o un método.

Así, cada vez que el sistema tiene una característica nueva logramos probar que esta característica se integre correctamente y  el sistema en general siga funcionando como lo venía haciendo, es decir que los cambios no generan ninguna regresión.  

Otra parte importante cuando el equipo de desarrollo libera nuevos requerimientos es la inclusión de casos adicionales para garantizar la cobertura de la aplicación.

Mediante la ejecución de las pruebas se permite saber que el sistema con la característica nueva que se implementó siga funcionando de la manera correcta tanto en tiempo, lógica y lo visual que ve el usuario. 

Cuando estuvimos creando las pruebas de performance para un proyecto, identificar al número de usuarios con el que la aplicación se comportaba de forma eficiente representó algunos retos que requerían simular la carga y monitorear y analizar los resultados obtenidos.

 

Pruebas Funcionales

Pruebas de rendimiento que realizamos para determinar lo rápido que se realiza una tarea en un sistema bajo ciertas condiciones, estas pruebas son de mucha utilidad para validar otros atributos de la calidad del sistema tales como: 

  • Escalibilidad
  • Fiabilidad
  • Uso de recursos

Jmeter, nos permite facilitar la gestión integral de los procesos de pruebas de rendimiento, diseñada para analizar, medir el rendimiento, funciona a nivel de protocolo. Una de muchas herramientas para software que dominan nuestros ingenieros.