Saltar a contenido

Prueba de carga

AC-39 exige 200 req/s sostenidos durante 5 minutos contra el jar, primero con la base activa y luego con la base detenida, verificando que el p99 del servidor se mantenga bajo 20 ms. Script: tools/load/load.py.

Por qué mide con la métrica del servidor, no del cliente

El veredicto de AC-39 se mide con la métrica del servidor resolver.latencia (la métrica de éxito del SPEC), no con el ida y vuelta del cliente de carga. Por eso hay que pasar --admin-user/--admin-password: load.py necesita leer /actuator/prometheus antes y después de la corrida para calcular el delta de los buckets del histograma.

python tools/load/load.py --base-url http://localhost:8080 --api-key <clave-gateway> \
    --rps 200 --seconds 300 \
    --admin-user admin --admin-password <clave-admin>

Corrida con la base detenida

Para confirmar INV-O01/INV-O02 (la respuesta no espera a la base; la pérdida de auditoría se cuenta):

python tools/load/load.py --base-url http://localhost:8080 --api-key <clave-gateway> \
    --rps 200 --seconds 300 --db-down-check \
    --admin-user admin --admin-password <clave-admin>

Ambas corridas escriben reports/load-<timestamp>.md (resumen legible) y tools/reports/junit-load.xml (un testcase "AC-39 sustained load p99 under 20ms"). La corrida con la base detenida además imprime si auditoria_perdidas_total (de /actuator/prometheus) quedó en > 0.

Regla del veredicto (AC-39)

El testcase pasa si y solo si no hubo errores y el p99 del servidor (calculado del delta de los buckets de resolver_latencia_seconds_bucket entre el scrape de antes y el de después) es <= 20 ms.

Si la métrica del servidor no está disponible —no se pasaron credenciales de admin, o /actuator/prometheus no respondió durante la corrida— el testcase falla con un mensaje que dice que la métrica del servidor es obligatoria; nunca cae de vuelta al p50/p95/p99 del cliente. Esos valores del cliente se siguen informando en el reporte Markdown y en la salida estándar, pero son informativos únicamente: en un host compartido con el servidor incluyen el overhead propio del cliente de carga.

Antes del go-live de una entrega grande

Repetir la corrida desde otro host (no el mismo que corre el servidor), para que el ida y vuelta del cliente deje de compartir recursos con BeneficiosCenter y la lectura de /actuator/prometheus quede como confirmación independiente.

Corpus del simulador de gateway (AC-41)

Relacionado pero distinto de la prueba de carga: valida corrección funcional contra datos reales, no throughput.

python tools/gateway-sim/gateway_sim.py --base-url http://localhost:8080 --api-key <clave-gateway> \
    --corpus tools/gateway-sim/corpus/sample.jsonl

Ver el detalle en Simulador del gateway.

Dónde sigue

  • Las métricas expuestas por Actuator y cómo leerlas, en Despliegue.
  • El invariante que esta prueba verifica, en Invariantes.