Aserciones en JMeter para Validación de Pruebas Funcionales y de Rendimiento

Las aserciones en Apache JMeter son componentes fundamentales para verificar que las respuestas del servidor coincidan con los resultados esperados durante la ejecución de pruebas de carga o funcionales. A continuación, se detallan los tipos de aserciones más utilizados y cómo implementarlos correctamente.

  1. Diferencias entre los Modos de Coincidencia de Texto

Al configurar una aserción de respuesta (Response Assertion), existen varias reglas de coincidencia que determinan cómo se evalúa el contenido:

  • Substring: Es la opción por defecto. Verifica si una cadana de texto específica está presente dentro de la respuesta. No admite expresiones regulares y es sensible a mayúsculas y minúsculas.
  • Contains (Contiene): Similar a Substring, pero permite el uso de expresiones regulares (Regex). Permite definir múltiples patrones para validar la presencia de diversos elementos.
  • Equals (Igual a): Compara la respuesta completa contra el patrón definido. Para que la aserción sea exitosa, la respuesta debe ser idéntica carácter por carácter al valor esperado.
  • Matches (Coincide): Utiliza expresiones regulares para validar que toda la respuesta coincida con el patrón establecido.
  1. Aserción de Duración (Duration Assertion)

Este componente se utiliza para validar los niveles de servicio (SLA) en términos de tiempo de respuesta. Define un límite en milisegundos; si el servidor tarda más tiempo del especificado en responder, la muestra se marcará como fallida. Es una herramienta esencial para identificar degradaciones de rendimiento bajo carga.

  1. Aserción de Tamaño (Size Assertion)

Permite validar el tamaño de la respeusta (en bytes). Es útil para asegurar que el servidor no está devolviendo cuerpos de respuesta vacíos o inusualmente grandes, lo que podría indicar errores en la lógica del backend o problemas de transferencia de datos.

  1. Aserciones mediante Scrpiting con BeanShell

Para escenarios complejos donde las aserciones estándar no son suficientes, JMeter permite el uso de BeanShell para programar lógica de validación personalizada. Mediante el objeto prev, podemos acceder a los datos de la respuesta previa.

Ejemplo básico de validación de texto:


String respuestaServidor = prev.getResponseDataAsString();
String palabraClave = "PROCESO_COMPLETADO";

if (!respuestaServidor.contains(palabraClave)) {
   Failure = true;
   FailureMessage = "Validación fallida: No se encontró el texto '" + palabraClave + "' en el cuerpo de la respuesta.";
}
   

Validación avanzada de estructura JSON:

Si trabajas con APIs REST, puedes procesar objetos JSON complejos utilizando bibliotecas como FastJSON para validar campos específicos:


import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONArray;

try {
   String jsonRaw = prev.getResponseDataAsString();
   JSONObject jsonRespuesta = JSONObject.parseObject(jsonRaw);

   // Validar código de estado personalizado en el cuerpo
   Integer codEstado = jsonRespuesta.getInteger("status_code");
   if (codEstado != 200) {
       Failure = true;
       FailureMessage = "El código de estado del negocio es incorrecto: " + codEstado;
   }

   // Validar existencia de datos en una lista
   JSONArray items = jsonRespuesta.getJSONArray("results");
   if (items == null || items.size() == 0) {
       log.warn("La lista de resultados está vacía");
   } else {
       for (int i = 0; i < items.size(); i++) {
           JSONObject item = items.getJSONObject(i);
           if (!item.containsKey("id_transaccion")) {
               Failure = true;
               FailureMessage = "Error en el formato: Falta el campo id_transaccion en el índice " + i;
           }
       }
   }
} catch (Exception e) {
   Failure = true;
   FailureMessage = "Error al procesar el JSON: " + e.getMessage();
}
   
  1. Aserción de JSON Path

La aserción JSON Path es una forma eficiente de validar valores específicos en una respuesta JSON sin necesidad de escribir scripts extensos. Utiliza una sintaxis similar a XPath para navegar por la estructura del documento. Por ejemplo, la expresión $.data.user.name permite extraer y comparar directamente el nombre del usuario dentro de un objeto anidado. Es recomendable instalar plugins adicionales de JMeter para ampliar las capacidades de esta aserción, permitiendo validaciones contra expresiones regulares o tipos de datos específicos.

Etiquetas: JMeter testing performance-testing beanshell jsonpath

Publicado el 7-14 21:00