Libreria client di Test di carico di Azure per JavaScript - versione 1.0.1
Test di carico di Azure fornisce la libreria client in JavaScript all'utente tramite cui può interagire in modo nativo con il servizio Test di carico di Azure. Test di carico di Azure è un servizio di test di carico completamente gestito che consente di generare un carico su larga scala. Il servizio simula il traffico per le applicazioni, indipendentemente dalla posizione in cui sono ospitate. Gli sviluppatori, i tester e gli ingegneri di controllo della qualità possono usarlo per ottimizzare le prestazioni, la scalabilità o la capacità dell'applicazione.
Documentazione
Per iniziare, sono disponibili varie documentazioni
Introduttiva
Ambienti attualmente supportati
Prerequisiti
- Per usare questo pacchetto, è necessario disporre di un di sottoscrizione di Azure
e risorsa del servizio di test di carico di Azure.
Installare il pacchetto @azure-rest/load-testing
Installare la libreria client REST del client AzureLoadTesting per JavaScript con npm
:
npm install @azure-rest/load-testing
Creare ed autenticare un client AzureLoadTesting
Per usare un
Per eseguire l'autenticazione con AAD, è prima necessario installare npm
@azure/identity
Dopo l'installazione, è possibile scegliere il tipo di credenziali da @azure/identity
da usare.
Ad esempio, è possibile usare DefaultAzureCredential per autenticare il client.
Impostare i valori dell'ID client, dell'ID tenant e del segreto client dell'applicazione AAD come variabili di ambiente: 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());
Concetti chiave
I componenti seguenti costituiscono il servizio Test di carico di Azure. La libreria client di test di carico di Azure per JavaScript consente di interagire con ognuno di questi componenti tramite l'uso di un oggetto client dedicato.
Test
Un test specifica lo script di test e le impostazioni di configurazione per l'esecuzione di un test di carico. È possibile creare uno o più test in una risorsa test di carico di Azure.
Componente dell'app
Quando si esegue un test di carico per un'applicazione ospitata in Azure, è possibile monitorare le metriche delle risorse per i diversi componenti dell'applicazione di Azure (metriche lato server). Durante l'esecuzione del test di carico e dopo il completamento del test, è possibile monitorare e analizzare le metriche delle risorse nel dashboard test di carico di Azure.
Metriche
Durante un test di carico, Test di carico di Azure raccoglie le metriche sull'esecuzione del test. Esistono due tipi di metriche:
Le metriche lato client forniscono i dettagli segnalati dal motore di test. Queste metriche includono il numero di utenti virtuali, il tempo di risposta della richiesta, il numero di richieste non riuscite o il numero di richieste al secondo.
Le metriche lato server sono disponibili per le applicazioni ospitate in Azure e forniscono informazioni sui componenti dell'applicazione Azure. Le metriche possono essere per il numero di letture di database, il tipo di risposte HTTP o il consumo di risorse del contenitore.
Motore di test
Un motore di test è un'infrastruttura di calcolo che esegue lo script di test di Apache JMeter. È possibile aumentare il numero di test di carico configurando il numero di motori di test. Lo script di test viene eseguito in parallelo nel numero specificato di motori di test.
Esecuzione test
Un'esecuzione di test rappresenta un'esecuzione di un test di carico. Raccoglie i log associati all'esecuzione dello script Apache JMeter, la configurazione YAML del test di carico, l'elenco dei componenti dell'app da monitorare e i risultati del test.
endpoint Data-Plane
Il piano dati delle risorse di Test di carico di Azure è indirizzabile usando il formato URL seguente:
00000000-0000-0000-0000-000000000000.aaa.cnt-prod.loadtesting.azure.com
Il primo GUID 00000000-0000-0000-0000-000000000000
è l'identificatore univoco usato per accedere alla risorsa test di carico di Azure. Questo è seguito da aaa
che è l'area di Azure della risorsa.
L'endpoint del piano dati viene ottenuto dalle API del piano di controllo.
Esempio di :1234abcd-12ab-12ab-12ab-123456abcdef.eus.cnt-prod.loadtesting.azure.com
Nell'esempio precedente eus
rappresenta l'area di Azure East US
.
Esempi
Creazione di un test di carico
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: {} },
},
});
Caricamento di un file jmx in un test
import { AzureLoadTestingClient, getLongRunningPoller, isUnexpected } from "@azure-rest/load-testing";
import AzureLoadTesting from "@azure-rest/load-testing";
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: AbortSignal.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
);
Esecuzione di un test e recupero di metriche
import { AzureLoadTestingClient, getLongRunningPoller, isUnexpected } from "@azure-rest/load-testing";
import AzureLoadTesting from "@azure-rest/load-testing";
import { DefaultAzureCredential } from "@azure/identity";
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: AbortSignal.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);
}
Risoluzione dei problemi
Registrazione
L'abilitazione della registrazione può aiutare a individuare informazioni utili sugli errori. Per visualizzare un log di richieste e risposte HTTP, impostare la variabile di ambiente AZURE_LOG_LEVEL
su info
. In alternativa, la registrazione può essere abilitata in fase di esecuzione chiamando setLogLevel
nel @azure/logger
:
import { setLogLevel } from "@azure/logger";
setLogLevel("info");
Per istruzioni più dettagliate su come abilitare i log, è possibile esaminare la documentazione del pacchetto @azure/logger.
Passaggi successivi
Gli esempi di JavaScript SDK di test di caricamento di Azure sono disponibili nel repository GitHub dell'SDK. Questi esempi forniscono codice di esempio per scenari aggiuntivi comunemente rilevati.
Vedere esempi di test di carico di Azure.
Contribuire
Per informazioni dettagliate sul contributo a questo repository, vedere la guida contribuire.
- Fork it
- Creare il ramo di funzionalità (
git checkout -b my-new-feature
) - Eseguire il commit delle modifiche (
git commit -am 'Add some feature'
) - Eseguire il push nel ramo (
git push origin my-new-feature
) - Creare una nuova richiesta pull
Azure SDK for JavaScript