Integración de API de Pruebas de Carga

Esta guía explica cómo usar el Cliente API de LoadFocus, tanto a través de la interfaz de línea de comandos (CLI) como usando directamente la biblioteca JavaScript en tus aplicaciones.

Tabla de Contenidos

Instalación

Instalación Global

npm install -g @loadfocus/loadfocus-api-client

Instalación en Proyecto Local

npm install @loadfocus/loadfocus-api-client

Configuración

Antes de usar el Cliente API de LoadFocus, necesitas configurar tus credenciales de API.

Configuración CLI

# Establecer clave API e ID de equipo
loadfocus-api config set apikey YOUR_API_KEY
loadfocus-api config set teamid YOUR_TEAM_ID
# Verificar configuración
loadfocus-api config show

Configuración JavaScript

const { configManager } = require('@loadfocus/loadfocus-api-client');
// Establecer configuración
configManager.set('apikey', 'YOUR_API_KEY');
configManager.set('teamid', 'YOUR_TEAM_ID');
// Verificar configuración
console.log(configManager.get('apikey')); // Debería imprimir tu clave API
console.log(configManager.isConfigured()); // Debería imprimir true si toda la configuración requerida está establecida

Interfaz de Línea de Comandos (CLI)

El Cliente API de LoadFocus proporciona un CLI completo para interactuar con la API de LoadFocus.

Ejecución de Pruebas JMeter

Ejecutar una Prueba

# Ejecutar una prueba por nombre
loadfocus-api jmeter execute --name "My JMeter Test"
# Ejecutar una prueba con parámetros específicos
loadfocus-api jmeter execute --name "My JMeter Test" --threads 50 --rampup 30 --duration 300

Ejecutar una Prueba y Esperar a que Complete

# Ejecutar una prueba y esperar a que complete
loadfocus-api jmeter run-test --name "My JMeter Test"
# Ejecutar una prueba con umbrales
loadfocus-api jmeter run-test --name "My JMeter Test" --thresholds "avgresponse<=200,errors==0,p95<=250"
# Ejecutar una prueba con timeout y intervalo de consulta personalizados
loadfocus-api jmeter run-test --name "My JMeter Test" --waitTimeout 1800 --pollInterval 15

Monitoreo de Estado de Pruebas

# Verificar estado de una prueba por nombre e ID
loadfocus-api jmeter status --name "My JMeter Test" --id 12345
# Obtener una lista de ejecuciones de prueba recientes
loadfocus-api jmeter runs --limit 10

Recuperación de Resultados

# Obtener resultados para una prueba específica
loadfocus-api jmeter results --name "My JMeter Test" --id 12345
# Obtener resultados con métricas específicas
loadfocus-api jmeter results --name "My JMeter Test" --id 12345 --include samples,avgresponse,errors

Trabajo con Umbrales

El comando run-test soporta evaluación de umbrales para determinar automáticamente si una prueba pasa o falla basándose en métricas de rendimiento.

# Ejecutar una prueba con múltiples umbrales
loadfocus-api jmeter run-test --name "My JMeter Test" --thresholds "avgresponse<=200,errors==0,p95<=250,hitspersec>=10"

Operadores de umbral soportados:

  • <= - Menor o igual que
  • < - Menor que
  • >= - Mayor o igual que
  • > - Mayor que
  • == - Igual a
  • != - No igual a

Formatos de Salida

# Obtener resultados en formato JSON
loadfocus-api jmeter run-test --name "My JMeter Test" --format json > results.json
# Salida con formato legible por defecto
loadfocus-api jmeter run-test --name "My JMeter Test"

Uso de la Biblioteca JavaScript

El Cliente API de LoadFocus también puede usarse directamente como una biblioteca JavaScript en tus aplicaciones.

Configuración Básica

// Importar el Cliente API de LoadFocus
const loadfocus = require('@loadfocus/loadfocus-api-client');
// Acceder a componentes específicos
const { JMeterClient, configManager } = loadfocus;

Cliente JMeter

// Crear un cliente JMeter
const jmeterClient = new loadfocus.JMeterClient();
// O con configuración explícita
const jmeterClient = new loadfocus.JMeterClient({
apikey: 'YOUR_API_KEY',
teamid: 'YOUR_TEAM_ID'
});

Ejecución de Pruebas

async function executeTest() {
try {
const result = await jmeterClient.execute({
testrunname: 'My JMeter Test',
threads: 50,
rampup: 30,
duration: 300
});
console.log('Test execution started:', result);
return result.testrunid;
} catch (error) {
console.error('Error executing test:', error);
}
}

Monitoreo de Estado de Pruebas

async function checkTestStatus(testName, testId) {
try {
const status = await jmeterClient.getStatus({
testrunname: testName,
testrunid: testId
});
console.log('Test status:', status);
return status.state;
} catch (error) {
console.error('Error checking test status:', error);
}
}

Recuperación de Resultados

async function getTestResults(testName, testId) {
try {
const labels = await jmeterClient.getLabels({
testrunname: testName,
testrunid: testId
});
console.log('Test labels:', labels);
const allResults = [];
for (const label of labels) {
const labelResults = await jmeterClient.getResults({
testrunname: testName,
testrunid: testId,
filter: label
});
allResults.push({
label,
results: labelResults
});
}
console.log('Test results:', allResults);
return allResults;
} catch (error) {
console.error('Error retrieving test results:', error);
}
}

Ejemplo Completo

Aquí hay un ejemplo completo que ejecuta una prueba, espera a que complete y recupera los resultados:

const { JMeterClient, configManager } = require('@loadfocus/loadfocus-api-client');
// Configurar
configManager.set('apikey', 'YOUR_API_KEY');
configManager.set('teamid', 'YOUR_TEAM_ID');
// Crear cliente
const jmeterClient = new JMeterClient();
async function runCompleteTest() {
try {
console.log('Executing test...');
const executeResult = await jmeterClient.execute({
testrunname: 'My JMeter Test'
});
const testId = executeResult.testrunid;
console.log(`Test execution started with ID: ${testId}`);
console.log('Waiting for test to complete...');
let completed = false;
while (!completed) {
const status = await jmeterClient.getStatus({
testrunname: 'My JMeter Test',
testrunid: testId
});
console.log(`Current state: ${status.state}`);
if (status.state === 'finished') {
completed = true;
} else if (status.state === 'failed' || status.state === 'error') {
throw new Error(`Test failed with state: ${status.state}`);
} else {
await new Promise(resolve => setTimeout(resolve, 10000));
}
}
console.log('Getting test results...');
const labels = await jmeterClient.getLabels({
testrunname: 'My JMeter Test',
testrunid: testId
});
const allResults = [];
for (const label of labels) {
const labelResults = await jmeterClient.getResults({
testrunname: 'My JMeter Test',
testrunid: testId,
filter: label
});
allResults.push({
label,
results: labelResults
});
}
console.log('Test results:', JSON.stringify(allResults, null, 2));
return allResults;
} catch (error) {
console.error('Error running test:', error);
}
}
runCompleteTest();

Uso Avanzado

Configuración HTTP Personalizada

Puedes personalizar el cliente HTTP usado por el Cliente API de LoadFocus:

const { JMeterClient } = require('@loadfocus/loadfocus-api-client');
const jmeterClient = new JMeterClient({
apikey: 'YOUR_API_KEY',
teamid: 'YOUR_TEAM_ID',
httpOptions: {
timeout: 30000,
retries: 3,
headers: {
'User-Agent': 'My Custom Application'
}
}
});

Manejo de Errores

El Cliente API de LoadFocus proporciona información detallada de errores:

try {
const result = await jmeterClient.execute({
testrunname: 'My JMeter Test'
});
} catch (error) {
if (error.response) {
console.error('API Error:', error.response.status, error.response.data);
} else if (error.request) {
console.error('Network Error:', error.request);
} else {
console.error('Request Error:', error.message);
}
}

Solución de Problemas

Problemas Comunes

  1. Errores de Autenticación:

    • Asegúrate de que tu clave API e ID de equipo estén correctamente configurados
    • Verifica que tu clave API tenga los permisos necesarios
  2. Fallos en la Ejecución de Pruebas:

    • Verifica que el nombre de la prueba exista en tu cuenta de LoadFocus
    • Comprueba si has alcanzado el límite de pruebas concurrentes de tu cuenta
  3. Problemas de Timeout:

    • Para pruebas de larga duración, aumenta el parámetro waitTimeout
    • Considera implementar un mecanismo de consulta en lugar de esperar sincrónicamente
  4. Problemas de Recuperación de Resultados:

    • Asegúrate de que la prueba haya completado antes de recuperar resultados
    • Verifica que el ID de la prueba sea correcto

Depuración

Habilita el registro de depuración para información más detallada:

// En tu código JavaScript
process.env.DEBUG = 'true';
// O al usar el CLI
DEBUG=true loadfocus-api jmeter run-test --name "My JMeter Test"

Para ayuda adicional, consulta la documentación de la API de LoadFocus o contacta soporte.