No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Probando el status code

6/17
Recursos

¿Cómo trabajar con los status code en una API?

Los status code son fundamentales al momento de validar una API, ya que determinan cómo responde el servidor a las solicitudes que realizamos. Aprender a trabajar con ellos no solo nos ayudará a identificar respuestas exitosas, sino también a manejar respuestas fallidas de manera efectiva.

¿Cómo crear una prueba de status code exitoso?

Crear una prueba para validar un status code exitoso en Cypress es una tarea sencilla y esencial. Seguir estos pasos te permitirá comprender cómo funciona este proceso:

  1. Crear un archivo de prueba: Crea un nuevo archivo en tu carpeta de integración, nombrándolo status.spec.js.

  2. Definir el describe: Inicia usando describe para agrupar tus pruebas. Por ejemplo:

    describe('Probando statuses', () => {
        // contenido de las pruebas
    });
    
  3. Escribir una función it: Dentro de describe, utiliza it para definir la prueba que validará un status code exitoso:

    it('debe de validar el status code exitoso', () => {
        cy.request('/employees').its('status').should('equal', 200);
    });
    

    En este ejemplo, comprobamos que la respuesta del servidor es un status code 200, lo que indica una solicitud exitosa.

¿Cómo tratar un status code fallido?

Manejar un status code fallido es vital para identificar situaciones donde la solicitud no se ha completado correctamente:

  1. Configurar Cypress para manejar errores: A veces, Cypress termina una prueba si el status code no es exitoso. Para probar manualmente estos casos, se debe desactivar esta función:

    it('debe manejar un status code fallido', () => {
        cy.request({
            url: '/employees/4',
            failOnStatusCode: false
        }).its('status').should('equal', 404);
    });
    

    Aquí, estamos verificando que el status code 404 sea bien gestionado sin que Cypress detenga la prueba. El status 404 indica que el recurso no ha sido encontrado.

¿Qué otras validaciones son posibles con status codes?

Además de los status codes 200 y 404, puedes explorar otros códigos de estado como:

  • 201 – Created: Indica que la solicitud fue exitosa y se creó un nuevo recurso.
  • 400 – Bad Request: Señala que la solicitud fue incorrecta o no pudo ser procesada por el servidor.
  • 401 – Unauthorized: Indica que no se ha proporcionado la autenticación necesaria.
  • 500 – Internal Server Error: Se produce un error en el servidor.

Te invito a experimentar con estos y otros status codes en tus pruebas para entender cómo afectan tus solicitudes y respuestas en la API.

Continúa fortaleciendo tus habilidades en la validación de APIs y prepárate para la siguiente lección, donde aprenderás a probar el cuerpo de las respuestas para evitar errores a pesar de obtener un status code exitoso. ¡Sigue esforzándote y sumergiéndote en el fascinante mundo de la tecnología!

Aportes 7

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Request

.
📚 Documentación
.
Tomando como referencia la lista de argumentos que se envían como opciones podemos adicionar más elementos a nuestra request.
.
Si necesitamos enviar datos, como lo es una creación, tenemos la siguiente definición:

cy.request('POST', 'URL', { name: 'Fionna Delahunty', email: '[email protected]'})

Una buena practica cuando se está creando datos en la base de datos por una prueba automatizada es limpiar la base de datos, si tú objetivo es simplemente validar que el empleado se crea bien, entonces no lo necesitas para más adelante por eso es mejor borrarlo enseguida. Ahora imagínalo en un pipeline de Integración Continua, crearía demasiados usuarios, y eso para la base de datos y otros servicios no sería óptimo.
Acá un ejemplo:

it("should validate 201 Created status code when creating a new employee and 200 Ok status code when deleting the just created employee", function () {
    cy.request("POST", "employees", {
      name: "Joe",
      lastname: "Doe",
      email: "[email protected]",
    }).as("createdEmployee");

    cy.get("@createdEmployee").its("status").should("eq", 201);

    cy.get("@createdEmployee")
      .its("body")
      .its("id")
      .then((createdEmployeeId) => {
        cy.request("DELETE", `employees/${createdEmployeeId}`)
          .its("status")
          .should("eq", 200);
      });
  });
 it('Debe de validar el status code exitoso de la creacion', () => {
        cy.request({method: 'POST', url: 'employees'})
            .its('status')
            .should('eq', 201)
    })

 it('Debe de validar el status code exitoso de la actualizacion', () => {
                cy.request({method: 'PUT', url: 'employees/5'})
                    .its('status')
                    .should('eq', 200)
     })
 it('Debe de validar el status code exitoso de la eliminacion', () => {
                         cy.request({method: 'DELETE', url: 'employees/5'})
                             .its('status')
                             .should('eq', 200)
      })
La clave aquí es la opción `failOnStatusCode: false`, que le dice a Cypress que no falle automáticamente si el código de estado no es 2xx. Esto te permite verificar manualmente el código de estado en la siguiente línea. `describe("Probando status", () => {  it("Validar el status code exitoso", () => {    ``//se valida que el status code sea 200``    cy.request("employees").its("status").should("eq", 200);  });  it("Validar el status code fallido", () => {    ``//se valida que el status code sea 404 fallido``    cy.request({url: "employees/6", failOnStatusCode: false}).its("status").should("eq", 404);  });});`
```js describe('Probando statuses', ()=>{ it('Debe de validar el status code exitoso',()=>{ cy.request('employees') .its('status') .should('eq', 200) }); it('Debe de validar el status code fallido',()=>{ cy.request({url:'employees/4', failOnStatusCode: false}) .its('status') .should('eq', 404) }); }); ```describe('Probando statuses', ()=>{     it('Debe de validar el status code exitoso',()=>{         cy.request('employees')        .its('status')        .should('eq',  200)    });     it('Debe de validar el status code fallido',()=>{        cy.request({url:'employees/4', failOnStatusCode: false})        .its('status')        .should('eq', 404)    });});
Pueden usar este codigo que testea un api en linea gratuita: ```js describe("Apis", () => { it("index - getAll", () => { cy.request("https://jsonplaceholder.typicode.com/todos").as("response"); cy.get("@response").its("body").as("body"); cy.get("@response").its("status").as("status"); cy.get("@status").should("eq", 200); cy.get("@body").should("not.be.empty"); cy.get("@body").its(0).as("firstItem"); cy.get("@firstItem").should("have.property", "userId").and("be.a", "number"); cy.get("@firstItem").should("have.property", "id").and("be.a", "number"); cy.get("@firstItem").should("have.property", "title").and("be.a", "string"); cy.get("@firstItem").should("have.property", "completed").and("be.a", "boolean"); }) }) ```
Pueden usar este mismo código para las pruebas, se testea una api en linea y gratuita: ```js describe("Apis", () => { it("index - getAll", () => { cy.request("https://jsonplaceholder.typicode.com/todos").as("response"); cy.get("@response").its("body").as("body"); cy.get("@response").its("status").as("status"); cy.get("@status").should("eq", 200); cy.get("@body").should("not.be.empty"); cy.get("@body").its(0).as("firstItem"); cy.get("@firstItem").should("have.property", "userId").and("be.a", "number"); cy.get("@firstItem").should("have.property", "id").and("be.a", "number"); cy.get("@firstItem").should("have.property", "title").and("be.a", "string"); cy.get("@firstItem").should("have.property", "completed").and("be.a", "boolean"); }) }) ```*describe*("Apis", () *=>* { *it*("index - getAll", () *=>* { *cy.request*("https://jsonplaceholder.typicode.com/todos")*.as*("response"); *cy.get*("@response")*.its*("body")*.as*("body"); *cy.get*("@response")*.its*("status")*.as*("status"); *cy.get*("@status")*.should*("eq", 200); *cy.get*("@body")*.should*("not.be.empty"); *cy.get*("@body")*.its*(0)*.as*("firstItem"); *cy.get*("@firstItem")*.should*("have.property", "userId")*.and*("be.a", "number"); *cy.get*("@firstItem")*.should*("have.property", "id")*.and*("be.a", "number"); *cy.get*("@firstItem")*.should*("have.property", "title")*.and*("be.a", "string"); *cy.get*("@firstItem")*.should*("have.property", "completed")*.and*("be.a", "boolean"); })})