Biblioteca cliente de Azure Load Testing para JavaScript: versión 1.0.0
Azure Load Testing proporciona biblioteca cliente en JavaScript al usuario mediante la cual puede interactuar de forma nativa con el servicio Azure Load Testing. Azure Load Testing es un servicio de prueba de carga totalmente administrado que permite generar una carga a gran escala. El servicio simula el tráfico de las aplicaciones, independientemente del lugar en que se hospeden. Los desarrolladores, evaluadores e ingenieros de control de calidad (QA) pueden usarlo para optimizar el rendimiento, la escalabilidad o la capacidad de las aplicaciones.
Confíe en gran medida en nuestros documentos de cliente REST para usar esta biblioteca.
Documentación
Hay varias documentación disponibles para ayudarle a empezar.
Introducción
Entornos admitidos actualmente
- Node.js versión 14.x.x o superior
Requisitos previos
- Debe tener una suscripción de Azure y un recurso de Azure Load Test Service para usar este paquete.
Instalar el paquete @azure-rest/load-testing
Instale la biblioteca cliente REST de AzureLoadTesting para JavaScript con npm
:
npm install @azure-rest/load-testing
Creación y autenticación de un AzureLoadTesting
cliente
Para usar una credencial de token de Azure Active Directory (AAD), proporcione una instancia del tipo de credencial deseado obtenido de la biblioteca de @azure/identidad .
Para autenticarse con AAD, primero npm
debe instalar @azure/identity
Después de la instalación, puede elegir qué tipo de credencial@azure/identity
usar.
Por ejemplo, Se puede usar DefaultAzureCredential para autenticar al cliente.
Establezca los valores del identificador de cliente, el identificador de inquilino y el secreto de cliente de la aplicación de AAD como variables de entorno: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET
import AzureLoadTesting, { AzureLoadTestingClient } from "@azure-rest/load-testing";
import { DefaultAzureCredential } from "@azure/identity";
const Client: AzureLoadTestingClient = AzureLoadTesting(Endpoint, new DefaultAzureCredential());
Conceptos clave
Los siguientes componentes componen el servicio Azure Load Testing. La biblioteca cliente de Prueba de carga de Azure para JavaScript permite interactuar con cada uno de estos componentes mediante el uso de un objeto de cliente dedicado.
Prueba
Una prueba especifica el script de prueba y las opciones de configuración para ejecutar una prueba de carga. Puede crear una o varias pruebas en un recurso de Azure Load Testing.
Componente de aplicación
Al ejecutar una prueba de carga para una aplicación hospedada en Azure, puede supervisar las métricas de recursos de los distintos componentes de la aplicación de Azure (métricas del lado servidor). Mientras se ejecuta la prueba de carga y después de la finalización de la prueba, puede supervisar y analizar las métricas de recursos en el panel Azure Load Testing.
Métricas
Durante una prueba de carga, Azure Load Testing recopila métricas sobre la ejecución de pruebas. Existen dos tipos de métricas:
Las métricas del cliente proporcionan los detalles notificados por el motor de prueba. Estas métricas incluyen el número de usuarios virtuales, el tiempo de respuesta de la solicitud, el número de solicitudes con error o el número de solicitudes por segundo.
Las métricas del lado servidor están disponibles para las aplicaciones hospedadas en Azure y proporcionan información sobre los componentes de las aplicaciones de Azure. Las métricas pueden ser para el número de lecturas de base de datos, el tipo de respuestas HTTP o el consumo de recursos de contenedor.
Motor de pruebas
Un motor de prueba es la infraestructura informática que ejecuta el script de prueba de Apache JMeter. Puede escalar horizontalmente la prueba de carga configurando el número de motores de pruebas. El script de prueba se ejecuta en paralelo en el número especificado de motores de pruebas.
Serie de pruebas
Una serie de pruebas representa la ejecución de una prueba de carga. Recopila los registros asociados a la ejecución del script de Apache JMeter, la configuración de YAML de prueba de carga, la lista de componentes de la aplicación que se va a supervisar y los resultados de la prueba.
punto de conexión de Data-Plane
El plano de datos de los recursos de Azure Load Testing se puede direccionable mediante el siguiente formato de dirección URL:
00000000-0000-0000-0000-000000000000.aaa.cnt-prod.loadtesting.azure.com
El primer GUID 00000000-0000-0000-0000-000000000000
es el identificador único que se usa para acceder al recurso de Azure Load Testing. Esto va seguido de aaa
la región de Azure del recurso.
El punto de conexión del plano de datos se obtiene de las API del plano de control.
Ejemplo:1234abcd-12ab-12ab-12ab-123456abcdef.eus.cnt-prod.loadtesting.azure.com
En el ejemplo anterior, eus
representa la región East US
de Azure .
Ejemplos
Creación de una prueba de carga
import { AzureLoadTestingClient } from "@azure-rest/load-testing";
import AzureLoadTesting from "@azure-rest/load-testing";
import { DefaultAzureCredential } from "@azure/identity";
var TEST_ID = "some-test-id";
var DISPLAY_NAME = "my-load-test";
const client: AzureLoadTestingClient = AzureLoadTesting("<Endpoint>", new DefaultAzureCredential());
await client.path("/tests/{testId}", TEST_ID).patch({
contentType: "application/merge-patch+json",
body: {
displayName: DISPLAY_NAME,
description: "",
loadTestConfiguration: {
engineInstances: 1,
splitAllCSVs: false,
},
secrets: {},
environmentVariables: {},
passFailCriteria: { passFailMetrics: {} },
},
});
Carga del archivo .jmx en una prueba
import { AzureLoadTestingClient, getLongRunningPoller, isUnexpected } from "@azure-rest/load-testing";
import AzureLoadTesting from "@azure-rest/load-testing";
import { AbortController } from "@azure/abort-controller";
import { DefaultAzureCredential } from "@azure/identity";
import { createReadStream } from "fs";
const client: AzureLoadTestingClient = AzureLoadTesting("<Endpoint>", new DefaultAzureCredential());
var TEST_ID = "some-test-id";
const readStream = createReadStream("./sample.jmx");
const fileUploadResult = await client
.path("/tests/{testId}/files/{fileName}", TEST_ID, "sample.jmx")
.put({
contentType: "application/octet-stream",
body: readStream,
});
if (isUnexpected(fileUploadResult)) {
throw fileUploadResult.body.error;
}
let fileValidateResult;
const fileValidatePoller = await getLongRunningPoller(client, fileUploadResult);
try{
fileValidateResult = await fileValidatePoller.pollUntilDone({
abortSignal: AbortController.timeout(120*1000), // timeout of 120 seconds
});} catch (ex: any) {
new Error("Error in polling file Validation" + ex.message); //polling timed out
}
if (fileValidatePoller.getOperationState().status != "succeeded" && fileValidateResult)
throw new Error(
"There is some issue in validation, please make sure uploaded file is a valid JMX." +
fileValidateResult.body.validationFailureDetails
);
Ejecución de una prueba y captura de métricas
import { AzureLoadTestingClient, getLongRunningPoller, isUnexpected } from "@azure-rest/load-testing";
import AzureLoadTesting from "@azure-rest/load-testing";
import { DefaultAzureCredential } from "@azure/identity";
import { AbortController } from "@azure/abort-controller";
const client: AzureLoadTestingClient = AzureLoadTesting("<Endpoint>", new DefaultAzureCredential());
var TEST_ID = "some-test-id";
var DISPLAY_NAME = "my-load-test";
var TEST_RUN_ID = "some-test-run-id";
// Creating/Updating the test run
const testRunCreationResult = await client.path("/test-runs/{testRunId}", TEST_RUN_ID).patch({
contentType: "application/merge-patch+json",
body: {
testId: TEST_ID,
displayName: DISPLAY_NAME,
},
});
if (isUnexpected(testRunCreationResult)) {
throw testRunCreationResult.body.error;
}
if (testRunCreationResult.body.testRunId === undefined)
throw new Error("Test Run ID returned as undefined.");
const testRunPoller = await getLongRunningPoller(client, testRunCreationResult);
let testRunResult;
try {
testRunResult = await testRunPoller.pollUntilDone({
abortSignal: AbortController.timeout(60000), // timeout of 60 seconds
});
} catch (ex: any) {
new Error("Error in polling test run completion" + ex.message); //polling timed out
}
if (testRunPoller.getOperationState().status != "succeeded")
throw new Error("There is some issue in running the test, Error Response : " + testRunResult);
if (testRunResult) {
let testRunStarttime = testRunResult.body.startDateTime;
let testRunEndTime = testRunResult.body.endDateTime;
// get list of all metric namespaces and pick the first one
const metricNamespaces = await client
.path("/test-runs/{testRunId}/metric-namespaces", TEST_RUN_ID)
.get();
if (isUnexpected(metricNamespaces)) {
throw metricNamespaces.body.error;
}
const metricNamespace = metricNamespaces.body.value[0];
if (metricNamespace.name === undefined) {
throw "No Metric Namespace name is defined.";
}
// get list of all metric definitions and pick the first one
const metricDefinitions = await client
.path("/test-runs/{testRunId}/metric-definitions", TEST_RUN_ID)
.get({
queryParameters: {
metricNamespace: metricNamespace.name,
},
});
if (isUnexpected(metricDefinitions)) {
throw metricDefinitions.body.error;
}
const metricDefinition = metricDefinitions.body.value[0];
if (metricDefinition.name === undefined) {
throw "No Metric Namespace name is defined.";
}
// fetch client metrics using metric namespace and metric name
const metricsResult = await client.path("/test-runs/{testRunId}/metrics", TEST_RUN_ID).post({
queryParameters: {
metricname: metricDefinition.name,
metricNamespace: metricNamespace.name,
timespan: testRunStarttime + "/" + testRunEndTime,
},
});
console.log(metricsResult);
console.log(testRunResult);
}
Solución de problemas
Registro
La habilitación del registro puede ayudar a descubrir información útil sobre los errores. Para ver un registro de solicitudes y respuestas HTTP, establezca la variable de entorno AZURE_LOG_LEVEL
en info
. Como alternativa, el registro se puede habilitar en tiempo de ejecución llamando a setLogLevel
en @azure/logger
:
import { setLogLevel } from "@azure/logger";
setLogLevel("info");
Para obtener instrucciones más detalladas sobre cómo habilitar los registros, consulte los documentos del paquete @azure/logger.
Pasos siguientes
Los ejemplos del SDK de JavaScript de pruebas de carga de Azure están disponibles en el repositorio de GitHub del SDK. Estos ejemplos proporcionan código de ejemplo para escenarios adicionales que se suelen encontrar.
Consulte ejemplos de Azure Load Testing.
Contribuir
Para más información sobre cómo contribuir a este repositorio, consulte la guía de contribución.
- Bifurcarlo
- Creación de la rama de características (
git checkout -b my-new-feature
) - Confirmar los cambios (
git commit -am 'Add some feature'
) - Inserción en la rama (
git push origin my-new-feature
) - Creación de una nueva solicitud de incorporación de cambios
Azure SDK for JavaScript