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:
https://github.com/Uniandes-isis2603/bookstore-back/tree/master/collections
Para realizar las pruebas el back debe estar en ejecución.
Las pruebas se harán sobre las mismas colecciones que se documentaron en la etapa de documentación del diseño del API. Para este tutorial tomaremos como referencia la colección de Autor.
Tenga en cuenta que el orden ejecución de las pruebas es importante. Por esta razón se inicia con la creación del recurso, posteriormente se ejecutan las operaciones para obtener el listado de recursos y un recurso en particular, se continúa con la edición de un recurso, y se finaliza con su eliminación. Recuerde que si creó las operaciones sin seguir este orden puede organizarlas posteriormente.
Iniciaremos con la prueba para crear un autor. Para esto abrimos la petición, vamos a la sección Tests y agregamos lo siguiente:
var data = pm.response.json()
pm.globals.set("author_id_1", 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 author_id_1
con el valor que haya en el atributo id de la respuesta, y esperamos que el código HTTP retornado sea el 201.
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.
Antes de ejecutar la prueba necesitamos verificar que estamos usando el entorno (environment) correcto. Un entorno es un conjunto de variables que se usan en los requests de Postman. Para nuestro caso específico necesitamos setear la variable baseUrl que es la que se usa en todas las peticiones.
Vaya a la opción Environments que está en el menú de la parte izquierda de Postman.
Luego haga clic en Import > File y busque en la carpeta del proyecto el archivo "collections/EntornoColecciones.postman_environment.json".
Con esto ya tendremos un valor para la variable baseUrl. Ahora, antes de ejecutar una petición verifique que la colección está seleccionada.
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 autor 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):
El siguiente será el contenido de la prueba:
pm.test('Number of authors > ' + 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 autor, esperamos que el número de autores 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 autores y que las pruebas pasen correctamente:
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 {{author_id_1}}. Recuerde que esta variable fue seteada cuando se creó un nuevo autor. Entonces esperamos que ese autor exista en la base de datos y que el código de respuesta del API sea 200.
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.apierror.message).to.eql("The author 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.
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.
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.apierror.message).to.eql("The autor 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.
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.
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.apierror.message).to.eql("The author 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 autores y los libros (AuthorBooks).
Para esta prueba debemos iniciar creando una editorial, dos libros y un autor. Esto lo hacemos porque el primer libro se asociará al autor y el segundo libro servirá para la actualización de los libros del autor.
El proceso de crear la editorial y los libros 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/Uniandes-isis2603/bookstore-back
Simplemente asumiremos que los ids de los libros quedaron almacenados en las variables {{book_id_1}} y {{book_id_2}}.
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.
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.apierror.message).to.eql("The book with the given id was not found");
});
Esperamos que el código de respuesta del API sea 404 junto con el mensaje de error.
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.
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.apierror.message).to.eql("The book with the given id was not found");
});
Esperamos que el código de respuesta del API sea 404 junto con el mensaje de error.
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.apierror.message).to.eql("The book is not associated to the author");
});
Esperamos que el código de respuesta del API sea 412 junto con el mensaje de error.
El siguiente será el contenido de la prueba:
pm.test('Number of books > ' + 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);
});
Esperamos que el código de respuesta del API sea 200.
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.
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.apierror.message).to.eql("The book with the given id was not found");
});
Esperamos que el código de respuesta del API sea 404 junto con el mensaje de error.
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.
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.apierror.message).to.eql("The book with the given id was not found");
});
Esperamos que el código de respuesta del API sea 404 junto con el mensaje de error.
La colección se puede completar con las operaciones para los libros y la editorial creadas inicialmente junto con el autor.
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.