En este tutorial aprenderá a crear las pruebas de un API usando Postman.
Las pruebas del API usando Postman.
En particular Ud. debe:
Las colecciones construidas para las prueba del API de este tutorial pueden ser consultadas en este enlace:
Para realizar las pruebas el API debe estar en ejecución. Recuerde que esto lo puede hacer desde una terminal con el comando npm run start:dev
.
Iniciaremos con la prueba para crear un museo. Cuando se realizó la documentacioń del diseño del API en Postman, en el workspace en la sección Collections debió quedar la colección documentada junto con los requests. Así que aprovecharemos esa colección y las peticiones para la prueba del API.
Iniciaremos agregando un nuevo museo. Para esto abrimos la petición Add a museum
. Vamos a la sección Tests y agregamos lo siguiente:
var data = pm.response.json()
pm.globals.set("museum_id", data.id);
pm.test("Status code is 201", function () {
pm.response.to.have.status(201);
});
En esta prueba estamos guardando la respuesta que envía el API en la variable data. Luego seteamos la variable global museum_id
con el valor que haya en el atributo id de la respuesta, y esperamos que el código HTTP retornado sea el 201.
Nos aseguramos que en el body de la petición estén los datos necesarios para crear el museo.
Importante: si ha habido alguna actualización en la implementación, esos cambios deben reflejarse también en la documentación para que las peticiones se ejecuten correctamente.
Ahora hacemos click en el botón Send que enviará la petición al API y debemos obtener la siguiente respuesta.
Vemos que la petición se ejecutó correctamente ya que obtuvimos el código 201. También observamos que el API retornó el nuevo museo creado junto con el id asignado por la base de datos. También observamos que las pruebas se ejecutaron bien al ver el resultado en la pestaña Test Results (1/1):
Abrimos la petición Get all museums
. El siguiente será el contenido de la prueba:
pm.test('Number of museums > ' + 0, function () {
var data = pm.response.json()
pm.expect(data.length).to.greaterThan(0)
});
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
Luego de haber agregado un museo, esperamos que el número de museos sea mayor que cero y que el código de respuesta del API sea 200.
Ejecutamos la prueba y esperamos que se obtenga la lista de museos y que las pruebas pasen correctamente:
Abrimos la petición Get one museum
. El siguiente será el contenido de la prueba:
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
En la URL de la petición tenemos la variable {{museum_id}}. Recuerde que esta variable fue seteada cuando se creó un nuevo museo. Entonces esperamos que ese museo exista en la base de datos y que el código de respuesta del API sea 200.
Abrimos la petición Get an invalid museum
. El siguiente será el contenido de la prueba:
pm.test("Status code is 404", function () {
pm.response.to.have.status(404);
});
pm.test("Get expected error message", function () {
var data = pm.response.json();
pm.expect(data.message).to.eql("The museum with the given id was not found");
});
Esperamos que el código de respuesta del API sea 404 y que obtengamos el mensaje descriptivo del error.
Abrimos la petición Update a museum
. El siguiente será el contenido de la prueba:
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
Esperamos que el código de respuesta del API sea 200.
Abrimos la petición Update an invalid museum
. El siguiente será el contenido de la prueba:
pm.test("Status code is 404", function () {
pm.response.to.have.status(404);
});
pm.test("Get expected error message", function () {
var data = pm.response.json();
pm.expect(data.message).to.eql("The museum with the given id was not found");
});
Esperamos que el código de respuesta del API sea 404 y que obtengamos el mensaje descriptivo del error.
Abrimos la petición Delete a museum
. El siguiente será el contenido de la prueba:
pm.test("Status code is 204", function () {
pm.response.to.have.status(204);
});
Esperamos que el código de respuesta del API sea 204.
Abrimos la petición Delete an invalid museum. El siguiente será el contenido de la prueba:
pm.test("Status code is 404", function () {
pm.response.to.have.status(404);
});
pm.test("Get expected error message", function () {
var data = pm.response.json();
pm.expect(data.message).to.eql("The museum with the given id was not found");
});
Esperamos que el código de respuesta del API sea 404 junto con el mensaje descriptivo del error.
En la documentación del API también se incluyeron las colecciones para la asociación entre los museos y las obras de arte (Museums-Artworks).
Para esta prueba debemos iniciar creando un museo. Esta petición ya la creamos anteriormente; así que solo debemos duplicarla y arrastrarla a la nueva colección Museums-Artworks.
Luego debemos crear dos obras de arte. Esto lo hacemos porque la primera obra de arte se asociará al museo y la segunda obra de arte servirá para la actualización de las obras de ese museo.
El proceso de crear una obra de arte (persistencia, servicio y controlador) no se incluye en este tutorial por simplicidad sin embargo en el repositorio que acompaña a este tutorial se puede consultar:
https://github.com/MISW4403-Diseno-y-construccion-de-APIs/MISW4403_202214_Controladores
Simplemente asumiremos que los ids de las obras de arte quedarán almacenados en las variables {{artwork_id_1}} y {{artwork_id_2}}.
Abrimos la petición Add an artwork to a museum. El siguiente será el contenido de la prueba:
pm.test("Status code is 201", function () {
pm.response.to.have.status(201);
});
Esperamos que el código de respuesta del API sea 201.
Abrimos la petición Add an invalid artwork to a museum. El siguiente será el contenido de la prueba:
pm.test("Status code is 404", function () {
pm.response.to.have.status(404);
});
pm.test("Get expected error message", function () {
var data = pm.response.json();
pm.expect(data.message).to.eql("The artwork with the given id was not found");
});
Esperamos que el código de respuesta del API sea 404 junto con el mensaje de error.
Abrimos la petición Add an artwork to an invalid museum. El siguiente será el contenido de la prueba:
pm.test("Status code is 404", function () {
pm.response.to.have.status(404);
});
pm.test("Get expected error message", function () {
var data = pm.response.json();
pm.expect(data.message).to.eql("The museum with the given id was not found");
});
Esperamos que el código de respuesta del API sea 404 junto con el mensaje de error.
Abrimos la petición Get an artwork of a museum. El siguiente será el contenido de la prueba:
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
Esperamos que el código de respuesta del API sea 200.
Abrimos la petición Get an invalid artwork of a museum. El siguiente será el contenido de la prueba:
pm.test("Status code is 404", function () {
pm.response.to.have.status(404);
});
pm.test("Get expected error message", function () {
var data = pm.response.json();
pm.expect(data.message).to.eql("The artwork with the given id was not found");
});
Esperamos que el código de respuesta del API sea 404 junto con el mensaje de error.
Abrimos la petición Get an artwork of an invalid museum. El siguiente será el contenido de la prueba:
pm.test("Status code is 404", function () {
pm.response.to.have.status(404);
});
pm.test("Get expected error message", function () {
var data = pm.response.json();
pm.expect(data.message).to.eql("The museum with the given id was not found");
});
Esperamos que el código de respuesta del API sea 404 junto con el mensaje de error.
Abrimos la petición Get an artwork non-associated to a museum. El siguiente será el contenido de la prueba:
pm.test("Status code is 412", function () {
pm.response.to.have.status(412);
});
pm.test("Get expected error message", function () {
var data = pm.response.json();
pm.expect(data.message).to.eql("The artwork with the given id is not associated to the museum");
});
Esperamos que el código de respuesta del API sea 412 junto con el mensaje de error.
Abrimos la petición Get all artwork of a museum. El siguiente será el contenido de la prueba:
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
Esperamos que el código de respuesta del API sea 200.
Abrimos la petición Get all artwork of an invalid museum. El siguiente será el contenido de la prueba:
pm.test("Status code is 404", function () {
pm.response.to.have.status(404);
});
pm.test("Get expected error message", function () {
var data = pm.response.json();
pm.expect(data.message).to.eql("The museum with the given id was not found");
});
Esperamos que el código de respuesta del API sea 404 junto con el mensaje de error.
Abrimos la petición Update artworks of a museum. El siguiente será el contenido de la prueba:
pm.test("Status code is 201", function () {
pm.response.to.have.status(200);
});
Esperamos que el código de respuesta del API sea 200.
Abrimos la petición Update invalid artworks of a museum. El siguiente será el contenido de la prueba:
pm.test("Status code is 404", function () {
pm.response.to.have.status(404);
});
pm.test("Get expected error message", function () {
var data = pm.response.json();
pm.expect(data.message).to.eql("The artwork with the given id was not found");
});
Esperamos que el código de respuesta del API sea 404 junto con el mensaje de error.
Abrimos la petición Update artworks of an invalid museum. El siguiente será el contenido de la prueba:
pm.test("Status code is 404", function () {
pm.response.to.have.status(404);
});
pm.test("Get expected error message", function () {
var data = pm.response.json();
pm.expect(data.message).to.eql("The museum with the given id was not found");
});
Esperamos que el código de respuesta del API sea 404 junto con el mensaje de error.
Abrimos la petición Delete an artwork of a museum. El siguiente será el contenido de la prueba:
pm.test("Status code is 204", function () {
pm.response.to.have.status(204);
});
Esperamos que el código de respuesta del API sea 204.
Abrimos la petición Delete an artwork of an invalid museum. El siguiente será el contenido de la prueba:
pm.test("Status code is 404", function () {
pm.response.to.have.status(404);
});
pm.test("Get expected error message", function () {
var data = pm.response.json();
pm.expect(data.message).to.eql("The museum with the given id was not found");
});
Esperamos que el código de respuesta del API sea 404 junto con el mensaje de error.
Abrimos la petición Delete an invalid artwork of a museum. El siguiente será el contenido de la prueba:
pm.test("Status code is 404", function () {
pm.response.to.have.status(404);
});
pm.test("Get expected error message", function () {
var data = pm.response.json();
pm.expect(data.message).to.eql("The artwork with the given id was not found");
});
Esperamos que el código de respuesta del API sea 404 junto con el mensaje de error.
Abrimos la petición Delete an artwork non-associated to a museum. El siguiente será el contenido de la prueba:
pm.test("Status code is 412", function () {
pm.response.to.have.status(412);
});
pm.test("Get expected error message", function () {
var data = pm.response.json();
pm.expect(data.message).to.eql("The artwork with the given id is not associated to the museum");
});
Esperamos que el código de respuesta del API sea 412 junto con el mensaje de error.
La colección se puede completar con las operaciones para borrar las dos obras de arte creadas inicialmente junto con el museo.
Una vez que todas las pruebas se han especificado y estás se han ejecutado correctamente es el momento de exportar las colecciones. Una colección se representa como un archivo JSON que se puede guardar en el repositorio del proyecto.
Seleccione una colección, haga clic derecho > Export. Escoja la opción Collection v2.1 y haga clic en el botón Export.
Guarde la colección en la carpeta collections
del repositorio.