Prueba de regresión simple de web service con JMeter

Autor
Damian
Terlecki
6 minutos de lectura
Pruebas

JMeter viene de serie con muchos samplers potentes que nos permiten escribir un plan de pruebas y ejecutarlo en diferentes entornos. Obtener los datos de entrada directamente de la base de datos, que pueden variar entre entornos, simplifica mucho la preparación de los casos de prueba.

Aunque le falta algo de IntelliSense, acostumbrarse a JMeter lleva algo de tiempo. Sin embargo, puedes crear una prueba bastante sencilla que, en muchos casos, te aportará mucho valor. Aquí te muestro cómo preparar una prueba que detecte regresiones en los endpoints de lectura de un web service.

Plan de prueba JMeter

Regresión en API versionada

En su forma más simple, puedes buscar regresiones comparando las respuestas del web service para el mismo id de recurso. Para esto, necesitarás algunos datos de entrada. Lo más habitual es alimentar estos datos mediante variables de usuario en el Test Plan, un archivo CSV o un sampler JDBC/HTTP.

Variables de usuario en JMeter Sampler JDBC en JMeter

Teniendo los datos de entrada, simplemente añade el controlador ForEach y dos samplers HTTP para ambas versiones del endpoint de la API. Bajo el primer sampler, añado una Response Assertion que desactiva la comprobación de estado. Esto me permite ignorar el estado de la respuesta y luego confiar en mis propias aserciones. Con un Regular Expression Extractor, extraigo los datos de la respuesta a una variable.

Controlador ForEach en JMeter Extractor de Expresiones Regulares en JMeter

En el segundo sampler, reutilizo una Response Assertion y comparo la segunda respuesta con la variable del primer sampler. Esto me ayuda a detectar cualquier cambio en las respuestas entre dos versiones del mismo endpoint. En el View Results Tree, puedo comprobar rápidamente las aserciones fallidas.

Response Assertion en JMeter

No todas las diferencias son regresiones. Esta prueba es válida para optimizaciones de rendimiento. Para cambios funcionales, quizá quieras hacer algunos ajustes para adaptarla a tus necesidades: verifica el código de respuesta en vez de los datos, cambia el alcance del REGEX o usa JSON Extractor para comparar solo las partes relevantes de la respuesta.

Regresión en API sin versionar

Otro enfoque es comparar los resultados de los samplers guardados en un archivo. Esto es especialmente útil cuando:

  • tienes una API sin versionar;
  • tus cambios se despliegan tras flags internos;
  • o simplemente quieres detectar regresiones aunque no haya cambios externos en el endpoint.

El plan de prueba es muy sencillo si no necesitas postprocesar la respuesta. Usa el View Results Tree para guardar los resultados iniciales en un archivo. Luego, ejecútalo de nuevo tras un despliegue o cambiar el flag y haz un diff entre ambos archivos.

Si quieres la misma lógica de extracción, usa un sampler JSR223 sencillo. En el script muestra la respuesta extraída con la línea vars["responseV1"] y añade un View Results Tree bajo este sampler.

View Results Tree en JMeter

Para comparar los contenidos, ejecuta los thread groups consecutivamente (a nivel de Test Plan) para que el archivo se guarde en un grupo y se verifique en otro. Hacer el diff es tan fácil como usar el comando OS Process Sampler diff sobre ambos archivos. No olvides configurar el código de retorno esperado. Si prefieres una ruta independiente del sistema operativo, incluye cualquier otro sampler (por ejemplo, un Debug Sampler) con:

  • dos preprocessors User Parameters que extraigan el contenido de los archivos a una variable: ${__FileToString(testResults1.xml)};
  • una Response Assertion que compare ambas variables.
OS Process Sampler en JMeter User Parameters en JMeter

El plan descrito se ejecutó en JMeter 5.4.3 con respuestas simuladas por jwebserver de Java 18. Puedes encontrar los archivos fuente relevantes al final de la página. Siéntete libre de usarlos como punto de partida para tus propias pruebas de regresión.