Azure Load Testing-klientbibliotek för JavaScript – version 1.0.1
Azure Load Testing tillhandahåller klientbiblioteket i JavaScript till användaren som de kan interagera med internt med Azure Load Testing-tjänsten. Azure Load Testing är en fullständigt hanterad tjänst för belastningstestning som gör att du kan generera högskalig belastning. Tjänsten simulerar trafik för dina program, oavsett var de finns. Utvecklare, testare och kvalitetssäkringstekniker kan använda den för att optimera programmets prestanda, skalbarhet eller kapacitet.
Vi förlitar dig mycket på våra REST-klientdokument för att kunna använda det här biblioteket
Dokumentation
Det finns olika dokumentation som hjälper dig att komma igång
Komma igång
Miljöer som stöds för närvarande
Förutsättningar
- Du måste ha en Azure-prenumeration och Azure Load Test Service-resurs för att kunna använda det här paketet.
Installera @azure-rest/load-testing
-paketet
Installera Rest-klientbiblioteket för AzureLoadTesting för JavaScript med npm
:
npm install @azure-rest/load-testing
Skapa och autentisera en AzureLoadTesting
-klient
Om du vill använda en AAD-tokenautentiseringsuppgifter (Azure Active Directory)anger du en instans av önskad typ av autentiseringsuppgifter som hämtats från @azure/identitetsbiblioteket.
Om du vill autentisera med AAD måste du först npm
installera @azure/identity
Efter installationen kan du välja vilken typ av autentiseringsuppgifter från @azure/identity
att använda.
Till exempel kan StandardAzureCredential användas för att autentisera klienten.
Ange värdena för klient-ID, klient-ID och klienthemlighet för AAD-programmet som miljövariabler: 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());
Viktiga begrepp
Följande komponenter utgör Azure Load Testing Service. Med Azure Load Test-klientbiblioteket för JavaScript kan du interagera med var och en av dessa komponenter med hjälp av ett dedikerat klientobjekt.
Test
Ett test anger testskriptet och konfigurationsinställningarna för att köra ett belastningstest. Du kan skapa ett eller flera tester i en Azure Load Testing-resurs.
Appkomponent
När du kör ett belastningstest för ett Azure-värdbaserat program kan du övervaka resursmått för de olika Azure-programkomponenterna (mått på serversidan). När belastningstestet körs och när testet har slutförts kan du övervaka och analysera resursmåtten på instrumentpanelen för Azure Load Testing.
Metrik
Under ett belastningstest samlar Azure Load Testing in mått om testkörningen. Det finns två typer av mått:
Mått på klientsidan ger dig information som rapporterats av testmotorn. Dessa mått omfattar antalet virtuella användare, svarstiden för begäran, antalet misslyckade begäranden eller antalet begäranden per sekund.
Mått på serversidan är tillgängliga för Azure-värdbaserade program och ger information om dina Azure-programkomponenter. Mått kan vara för antalet databasläsningar, typen av HTTP-svar eller förbrukning av containerresurser.
Testmotor
En testmotor är databehandlingsinfrastruktur som kör Apache JMeter-testskriptet. Du kan skala ut belastningstestet genom att konfigurera antalet testmotorer. Testskriptet körs parallellt över det angivna antalet testmotorer.
Testkörning
En testkörning representerar en körning av ett belastningstest. Den samlar in loggarna som är associerade med körning av Apache JMeter-skriptet, YAML-konfigurationen för belastningstestet, listan över appkomponenter som ska övervakas och resultatet av testet.
Data-Plane slutpunkt
Dataplanet för Azure Load Testing-resurser kan adresseras med följande URL-format:
00000000-0000-0000-0000-000000000000.aaa.cnt-prod.loadtesting.azure.com
Den första GUID-00000000-0000-0000-0000-000000000000
är den unika identifierare som används för åtkomst till Azure Load Testing-resursen. Detta följs av aaa
som är Azure-regionen för resursen.
Dataplanets slutpunkt hämtas från API:er för kontrollplan.
exempel:1234abcd-12ab-12ab-12ab-123456abcdef.eus.cnt-prod.loadtesting.azure.com
I exemplet ovan representerar eus
Azure-regionen East US
.
Exempel
Skapa ett belastningstest
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: {} },
},
});
Ladda upp .jmx-filen till ett 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
);
Köra ett test och hämta mått
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);
}
Felsökning
Skogsavverkning
Aktivering av loggning kan hjälpa dig att hitta användbar information om fel. Om du vill se en logg med HTTP-begäranden och svar anger du AZURE_LOG_LEVEL
miljövariabeln till info
. Du kan också aktivera loggning vid körning genom att anropa setLogLevel
i @azure/logger
:
import { setLogLevel } from "@azure/logger";
setLogLevel("info");
Mer detaljerade anvisningar om hur du aktiverar loggar finns i @azure/logger-paketdokumenten.
Nästa steg
Azure Loading Testing JavaScript SDK-exempel är tillgängliga för dig på SDK:s GitHub-lagringsplats. Dessa exempel ger exempelkod för ytterligare scenarier som ofta påträffas.
Se Azure Load Testing-exempel.
Bidragande
Mer information om hur du bidrar till den här lagringsplatsen finns i bidragsguide.
- Förgrena den
- Skapa din funktionsgren (
git checkout -b my-new-feature
) - Genomför ändringarna (
git commit -am 'Add some feature'
) - Push-överför till grenen (
git push origin my-new-feature
) - Skapa ny pull-begäran
Azure SDK for JavaScript