Diseño de pruebas de performance en K6 para gRPC
Asimismo, encontrarás el diseño de las pruebas de performance de los siguientes componentes
...
Account
...
Card
...
Importaciones
group
ycheck
dek6
son funciones que permiten estructurar las pruebas y validar respuestas respectivamente.grpc
dek6/net/grpc
: Proporciona funcionalidades para hacer llamadas gRPC.Configuraciones específicas de
ACCOUNT_AGGREGATION_REST
son importadas desde un archivo de configuraciónconfig.js
.papaparse biblioteca importada para analizar archivos CSV.
SharedArray de k6/data permite compartir datos entre diferentes VUs (Unidades Virtuales) durante una prueba.
Code Block |
---|
import { check } from 'k6';
import grpc from 'k6/net/grpc';
import { ACCOUNT_AGGREGATION_GRPC } from '../../../../config.js';
import papaparse from '../../../../../../../../../modules/papaparse.js';
import { SharedArray } from 'k6/data'; |
Configuración del cliente gRPC y Datos
Se crea una nueva instancia del cliente gRPC y se cargan las definiciones desde el archivo proto mediante la configuración importada.
Code Block |
---|
const client = new grpc.Client();
client.load([ACCOUNT_AGGREGATION_GRPC.protoPath], ACCOUNT_AGGREGATION_GRPC.protoFile); |
Se definen las opciones que k6
empleará al ejecutar la prueba, tales como número de usuarios virtuales, iteraciones, duración máxima, entre otros.
Code Block |
---|
export const options = {
rps: ACCOUNT_AGGREGATION_GRPC.testOptions.rps,
//discardResponseBodies: TEST_OPTIONS_INTEGRATION.discardResponseBodies,
scenarios: {
Scenario_BalanceDetails: {
exec: 'balanceDetailsSuccessGrpcTask',
executor: ACCOUNT_AGGREGATION_GRPC.testOptions.executor,
vus: ACCOUNT_AGGREGATION_GRPC.testOptions.vus,
iterations: ACCOUNT_AGGREGATION_GRPC.testOptions.iterations,
maxDuration: ACCOUNT_AGGREGATION_GRPC.testOptions.maxDuration,
}
}
}; |
El archivo CSV es cargado en memoria a través de un SharedArray
. Con el uso de papaparse
, se analiza este archivo para luego acceder a la información que contiene.
Code Block |
---|
const csvData = new SharedArray('accountsTestData', function () {
return papaparse.parse(open(`${ACCOUNT_AGGREGATION_GRPC.testDataPath}/accountsTestData.csv`), { header: true }).data;
}); |
Función de Prueba
La función
balanceDetailsSuccessGrpcTask()
define un escenario de prueba:Selecciona aleatoriamente una cuenta del archivo CSV para posteriormente setearla como número de cuenta.
Una vez seleccionado el número de cuenta, se establece una conexión gRPC usando las configuraciones definidas. Posteriormente, se invoca un servicio gRPC usando este número de cuenta.
Después de obtener la respuesta de la llamada gRPC, utiliza la función
check
para verificar que el estado de la respuesta sea "OK" para gRPC, lo que sería equivalente a un estado HTTP de 200.Una vez finalizada la verificación, se cierra la conexión gRPC.
Code Block |
---|
export function balanceDetailsSuccessGrpcTask() {
const randomAccount = csvData[Math.floor(Math.random() * csvData.length)];
const data = {
"accountNumber": randomAccount.account
};
client.connect(ACCOUNT_AGGREGATION_GRPC.uri, {
plaintext: ACCOUNT_AGGREGATION_GRPC.plainText
});
const response = client.invoke(ACCOUNT_AGGREGATION_GRPC.service + ACCOUNT_AGGREGATION_GRPC.balance.balances, data);
check(response, {
'status is OK': (r) => r && r.status === grpc.StatusOK,
});
client.close();
}; |