Performance Rest - Mirror Strategy
Diseño de pruebas de performance en K6 para Rest
Importaciones
group
ycheck
dek6
son funciones que permiten estructurar las pruebas y validar respuestas respectivamente.http
dek6
se utiliza para realizar peticiones HTTP.Configuraciones específicas de
ACCOUNT_AGGREGATION_REST
son importadas desde un archivo de configuraciónconfig.js
.papaparse
biblioteca importada para analizar archivos CSV.SharedArray
dek6/data
permite compartir datos entre diferentes VUs (Unidades Virtuales) durante una prueba.
import { group, check } from 'k6';
import http from 'k6/http';
import { ACCOUNT_AGGREGATION_REST } from '../../../../config.js';
import papaparse from '../../../../../../../../../modules/papaparse.js';
import { SharedArray } from 'k6/data';
Configuración y Datos
La constante
url
se construye combinando dos propiedades del objetoACCOUNT_AGGREGATION_REST
.Las
params
se extraen directamente deACCOUNT_AGGREGATION_REST
.Se definen las
options
para la ejecución de las pruebas basándose enACCOUNT_AGGREGATION_REST.testOptions
.Se utiliza
papaparse
para analizar un archivo CSV que contiene datos de prueba y se almacena en una estructura de datosSharedArray
.
const url = `${ACCOUNT_AGGREGATION_REST.uri}${ACCOUNT_AGGREGATION_REST.account.details}`;
const params = ACCOUNT_AGGREGATION_REST.params;
export const options = {
rps: ACCOUNT_AGGREGATION_REST.testOptions.rps,
//discardResponseBodies: TEST_OPTIONS_INTEGRATION.discardResponseBodies,
scenarios: {
Scenario_AccountDetails: {
exec: 'accountDetailsSuccessRestTask',
executor: ACCOUNT_AGGREGATION_REST.testOptions.executor,
vus: ACCOUNT_AGGREGATION_REST.testOptions.vus,
iterations: ACCOUNT_AGGREGATION_REST.testOptions.iterations,
maxDuration: ACCOUNT_AGGREGATION_REST.testOptions.maxDuration,
}
}
};
const csvData = new SharedArray('accountsTestData', function () {
return papaparse.parse(open(`${ACCOUNT_AGGREGATION_REST.testDataPath}/accountsTestData.csv`), { header: true }).data;
});
Función de Prueba
La función
accountDetailsSuccessRestTask()
define un escenario de prueba:Selecciona aleatoriamente una cuenta del archivo CSV para posteriormente setearla como número de cuenta.
Se utiliza la función
group
para agrupar las acciones dentro de una etiqueta llamada 'AccountDetails'.Dentro de este grupo, se crea una carga útil (payload) con un número de cuenta aleatoria tomada del csv y se realiza una solicitud HTTP POST a la URL definida anteriormente con dicha carga útil y los parámetros especificados.
Utiliza la función
check
para verificar si la respuesta HTTP tiene un estado de200
.
export function accountDetailsSuccessRestTask() {
const randomAccount = csvData[Math.floor(Math.random() * csvData.length)];
group('AccountDetails', function () {
const payload = JSON.stringify({
"accountNumber": randomAccount.account
});
const response = http.post(url, payload, params);
check(response, {
'status is 200': r => r.status === 200,
});
});
};