Pruebas automatizadas con Postman

Iniciado por ANTRAX, Noviembre 01, 2021, 02:30:04 PM

Tema anterior - Siguiente tema

0 Miembros y 2 Visitantes están viendo este tema.


Para continuar con los posts sobre Postman, vamos a ver como realizar pequeños scripts automatizados utilizando alguno de los snippets que trae Postman, además veremos como ejecutar los tests de todos los métodos de una sola vez.

Para este ejemplo, utilizaremos las mismas peticiones que veniamos usando en posts anteriores, y ejecutaremos scripts en los métodos GET y POST.

Para empezar, debemos ir a la pestaña TESTS dentro de algún método. En este caso, el método GET. A la derecha, veremos una lista de snippets. Estos snippets son porciones de códigos reusables. Es decir, que podemos usarlos en cualquiera de nuestras peticiones y sirven para ahorrarnos el trabajo de tener que escribirlas nosotros. Estos Snippets estan hechos en Javascript, asique cualquiera con conocimientos en este lenguaje puede escribir sus propios scripts automatizados o editar los existentes para hacerlos más avanzados o más puntuales. Sino, simplemente con utilizar los existentes podemos hacer varias pruebas.

A continuación, voy a usar el más común de todos, que es para asegurarnos si este GET devuelve un valor 200. Simplemente clickeamos el Snippet y automaticamente se colocará el código en Javascript de mi test.


Para probarlo, simplemente clickeamos en SEND, para enviar la petición y podremos ver en el tab de Test Results, como salió la ejecución de dicho script


En este caso, pasó correctamente. Ahora agregaremos algunos más, para poder ver como se vería una ejecución con varios tests


En este caso agregué 3 tests, el primero es para ver si la ejecución devuelve un 200, el segundo es para ver si esta petición demora menos de 200ms y el tercero es para ver si ese status 200 trae un mensaje "Creado"

Actualmente falla el segundo, porque demora 696ms y el test esperaba que fuese menor a 200ms, es por ello que lo marca en rojo

El tercero también falla, porque la petición devuelve un "OK" y la respuesta que estabamos esperando era un "Created"

Como se ve en el listado de snippets, hay muchos más, podemos evaluar la estructura de un modelo, el contenido del body, podemos almacenar una respuesta en una variable (por si trabajamos con tokents) y a ese token enviarlo a una variable de entorno, etc.

Además, se pueden crear casos negativos, es decir, se podría crear un método GET que no funcione, es decir, apuntando a una URL que no exista y validar si esta devuelve un 404, de esta forma podríamos hacer pruebas de casos negativos cuando una URL no funciona y ver que el mensaje de error sea el correcto.

Ahora, lo que haremos será crear estos mismos test en el POST de crear mascota y vamos a agregarle un validador de JSON, para corroborar que la mascota que yo estoy creando, se cree verdaderamente con ese nombre.


Y si vemos el resultados de los test, tendremos lo siguiente:


Como se puede ver, pasan todos los tests, excepto el del tiempo.

Lo ideal acá, es preguntarle a un desarrollador cual debería ser el tiempo de carga esperado para cada API, y aplicarlo en el test. En este ejemplo, vamos a dejarlo tal cual, para poder ver un caso de error cuando algo falla.

Una vez que ya tenemos creados todos los tests para todos los métodos, veremos como correrlos a todos juntos. Para ello, clickeamos la carpeta que contiene a todos nuestros métodos y luego damos click en RUN


Esta parte es muy importante, ya que podemos cambiar el orden de ejecución (simplemente arrastrando el médoto). Esto sirve por ejemplo, cuando una petición X, necesita un token que lo genera la petición Y, entonces ejecutamos la petición Y, guardamos ese token en una variable y luego lo utilizamos en X.

Otra cosa importante, es que se puede ejecutar esta misma prueba varias veces, modificando el parámetro que viene en el input "Iterations", y también podemos ponerles un tiempo en milisegundos del delay que debería tener una ejecución de otra.

En este caso yo ejecutaré el GET y el POST, que fue en donde yo coloqué los tests. Cuando ya tengo todo configurado, simplemente debemos clickear el botón azul de RUN


Y como se puede ver en la siguiente captura, podemos ver el resultado de todas las ejecuciones, con sus respectivos mensajes de error (en caso de que alguno falle)


Esto es todo por ahora! Pueden probar y comentar como les va con sus tests automatizados de API.

En un próximo tutorial veremos como mostrar estos resultados en Newman, que es un visualizador de reportes en formato HTML, para mostrar los resultados de estas ejecuciones de una manera más formal.

Espero que les sirva!
ANTRAX


Para las pruebas automatizadas utilizo los mismos módulos de pruebas incluidas en las mismas aplicaciones y si no las tengo las fabrico en base al swagger o la documentación.

Muchas personas usan postman para documentar y testear las apis en diferentes ambientes y está bien, pero creo que para el trabajo de un proyecto estas pruebas deberían ir en el área de pruebas. Node, Java y similares ya tienen módulos para hacer este tipo de pruebas, por ejemplo Android Studio ya lo integra de manera nativa.
- No tienes permitido ver enlaces. Registrate o Entra a tu cuenta - No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Muchas gracias! Un paso mas cerca en la automatización


Justo en el laburo donde estoy ahora están medio plomo con pentest usando postman, no será exactamente lo mismo pero me guardo el post.

Saludos!



Muchas gracias! Muy bien explicado!




Muchas gracias por enseñarnos a automatizar con postman!

Agosto 07, 2024, 11:45:42 PM #12 Ultima modificación: Agosto 07, 2024, 11:47:16 PM por carlos.dimuro
Buenas noches comunidad!

Me surgió una duda que pienso, pienso y no puedo resolver, a ver si alguien puede ayudarme.

Estoy jugando con el Swagger del PetShop No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
He creado varios endpoints en Postman, y algunos requieren incluir IDs en la URL según la documentación porque son requeridos.

Contexto:
Tengo la URL base configurada en una variable de entorno dentro del ambiente de QA.
La ID también está almacenada como una variable de entorno dentro del mismo ambiente.

Problema:
En el endpoint definido para crear una nueva mascota, agregué el siguiente script en la sección de snippets:

Código: text
var response = pm.response.json();
var id = response.id;
pm.environment.set("ID", id);

Cuando ejecuto el endpoint, verifico la variable en el ambiente de QA, y veo que modifica el valor actual del "ID". Sin embargo, al usar el endpoint de búsqueda por ID, que utiliza esta variable, no me devuelve la mascota creada.

Pasos Intentados:

Repetí la operación anterior, pero la variable ya no se modifica.
Borré la variable, y al pegarle al endpoint de creación de mascota, se genera un nuevo ID, pero la variable no se actualiza con este nuevo ID.
¿Alguien ha tenido un problema similar o tiene alguna idea de por qué podría estar sucediendo esto?

¡Gracias de antemano!

Agosto 09, 2024, 07:39:39 AM #13 Ultima modificación: Agosto 09, 2024, 07:41:39 AM por carlos.dimuro
No tienes permitido ver enlaces. Registrate o Entra a tu cuentaBuenas noches comunidad!

Me surgió una duda que pienso, pienso y no puedo resolver, a ver si alguien puede ayudarme.

Estoy jugando con el Swagger del PetShop No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
He creado varios endpoints en Postman, y algunos requieren incluir IDs en la URL según la documentación porque son requeridos.

Contexto:
Tengo la URL base configurada en una variable de entorno dentro del ambiente de QA.
La ID también está almacenada como una variable de entorno dentro del mismo ambiente.

Problema:
En el endpoint definido para crear una nueva mascota, agregué el siguiente script en la sección de snippets:

Código: text
var response = pm.response.json();
var id = response.id;
pm.environment.set("ID", id);

Cuando ejecuto el endpoint, verifico la variable en el ambiente de QA, y veo que modifica el valor actual del "ID". Sin embargo, al usar el endpoint de búsqueda por ID, que utiliza esta variable, no me devuelve la mascota creada.

Pasos Intentados:

Repetí la operación anterior, pero la variable ya no se modifica.
Borré la variable, y al pegarle al endpoint de creación de mascota, se genera un nuevo ID, pero la variable no se actualiza con este nuevo ID.
¿Alguien ha tenido un problema similar o tiene alguna idea de por qué podría estar sucediendo esto?

¡Gracias de antemano!



Pude resolver mi duda o mejor dicho reestructurar las pegadas en los endpoints para que no me falle.
En primer lugar el PUT lo puse en la primer pegada, ahi corre este script:

Código: text
const id = pm.response.json().id;
pm.environment.set("ID", id);

efectivamente hace lo que espero, tomar el id que se crea en el endpoint y lo guarda en la variable del ambiente.
Después corre los metodos sin problemas y puedo repetir las pegadas automatizadas y da siempre el mismo resultado... hasta ahora. chau.