Azure Load Testing ügyfélkódtár JavaScripthez – 1.0.0-s verzió
Az Azure Load Testing javaScript-ügyfélkódtárat biztosít a felhasználónak, amellyel natív módon kommunikálhat az Azure Load Testing szolgáltatással. Az Azure Load Testing egy teljes körűen felügyelt terheléstesztelési szolgáltatás, amellyel nagy léptékű terhelést hozhat létre. A szolgáltatás szimulálja az alkalmazások forgalmát, függetlenül attól, hogy hol vannak üzemeltetve. A fejlesztők, tesztelők és minőségbiztosítás (QA) mérnökei az alkalmazás teljesítményének, méretezhetőségének vagy kapacitásának optimalizálására használhatják.
A kódtár használatához erősen támaszkodjon REST-ügyfél-dokumentumainkra
Dokumentáció
Az első lépésekhez különböző dokumentáció áll rendelkezésre
Első lépések
Jelenleg támogatott környezetek
- Node.js 14.x.x vagy újabb verzió
Előfeltételek
- A csomag használatához Azure-előfizetéssel és Azure Load Test Service-erőforrással kell rendelkeznie.
Telepítse a(z) @azure-rest/load-testing
csomagot
Telepítse a JavaScripthez készült AzureLoadTesting ügyfél REST-ügyfélkódtárat a következővel npm
:
npm install @azure-rest/load-testing
Ügyfél létrehozása és hitelesítése AzureLoadTesting
Az Azure Active Directory-jogkivonat hitelesítő adatainak használatához adja meg a @azure/identitástárból beszerzett kívánt hitelesítőadat-típus egy példányát.
Az AAD-vel való hitelesítéshez először npm
telepítenie kell a @azure/identity
A beállítás után kiválaszthatja, hogy milyen típusú hitelesítő adatokat@azure/identity
használjon.
Példaként a DefaultAzureCredential használható az ügyfél hitelesítésére.
Állítsa be az AAD-alkalmazás ügyfélazonosítójának, bérlőazonosítójának és titkos ügyfélkulcsának értékeit környezeti változókként: 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());
Fő fogalmak
A következő összetevők alkotják az Azure Load Testing Service-t. A JavaScripthez készült Azure Load Test ügyfélkódtár lehetővé teszi ezen összetevők használatát egy dedikált ügyfélobjektum használatával.
Tesztelés
A teszt meghatározza a tesztszkriptet és a terhelési teszt futtatásának konfigurációs beállításait. Létrehozhat egy vagy több tesztet egy Azure Load Testing-erőforrásban.
Alkalmazásösszetevő
Amikor terhelési tesztet futtat egy Azure-ban üzemeltetett alkalmazáshoz, figyelheti a különböző Azure-alkalmazásösszetevők erőforrásmetrikáit (kiszolgálóoldali metrikák). Miközben a terhelési teszt fut, és a teszt befejezése után az Azure Load Testing irányítópultján figyelheti és elemezheti az erőforrásmetrikákat.
Mérőszámok
A terheléses teszt során az Azure Load Testing metrikákat gyűjt a teszt végrehajtásáról. Kétféle metrikát különböztetünk meg:
Az ügyféloldali metrikák a tesztmotor által jelentett adatokat adják meg. Ezek a metrikák közé tartozik a virtuális felhasználók száma, a kérelmek válaszideje, a sikertelen kérések száma vagy a kérések másodpercenkénti száma.
A kiszolgálóoldali metrikák elérhetők az Azure által üzemeltetett alkalmazásokhoz, és információkat nyújtanak az Azure-alkalmazás összetevőiről. A metrikák lehetnek az adatbázis-olvasások száma, a HTTP-válaszok típusa vagy a tárolóerőforrás-használat.
Tesztmotor
A tesztmotor olyan számítási infrastruktúra, amely az Apache JMeter tesztszkriptet futtatja. A terheléstesztet a tesztmotorok számának konfigurálásával skálázhatja fel. A tesztszkript párhuzamosan fut a megadott számú tesztmotoron.
Tesztfuttatás
A tesztfuttatás egy terhelési teszt egy végrehajtását jelenti. Összegyűjti az Apache JMeter-szkript futtatásához, a terhelésteszt YAML-konfigurációjához, a monitorozni kívánt alkalmazásösszetevők listájához és a teszt eredményeihez kapcsolódó naplókat.
Data-Plane végpont
Az Azure Load Testing-erőforrások adatsíkja a következő URL-formátumban címezhető:
00000000-0000-0000-0000-000000000000.aaa.cnt-prod.loadtesting.azure.com
Az első GUID 00000000-0000-0000-0000-000000000000
az Azure Load Testing-erőforrás eléréséhez használt egyedi azonosító. Ezt követi aaa
az erőforrás Azure-régiója.
Az adatsík végpontja a vezérlősík API-jaiból származik.
Példa:1234abcd-12ab-12ab-12ab-123456abcdef.eus.cnt-prod.loadtesting.azure.com
A fenti példában eus
az Azure-régiót East US
jelöli.
Példák
Terhelési teszt létrehozása
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: {} },
},
});
.jmx-fájl feltöltése tesztbe
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
);
Metrikák tesztelése és beolvasása
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);
}
Hibaelhárítás
Naplózás
A naplózás engedélyezése segíthet a hibákról szóló hasznos információk feltárásában. A HTTP-kérések és válaszok naplójának megtekintéséhez állítsa a környezeti változót a AZURE_LOG_LEVEL
értékre info
. A naplózás futásidőben is engedélyezhető a következő hívással setLogLevel
@azure/logger
:
import { setLogLevel } from "@azure/logger";
setLogLevel("info");
A naplók engedélyezésére vonatkozó részletesebb útmutatásért tekintse meg a @azure/logger csomag dokumentációt.
Következő lépések
Az Azure Loading Testing JavaScript SDK-mintái az SDK GitHub-adattárában érhetők el. Ezek a minták példakódot biztosítanak a gyakran előforduló további forgatókönyvekhez.
Lásd: Azure Load Testing-minták.
Közreműködés
Az adattárhoz való hozzájárulás részleteiért lásd a közreműködői útmutatót.
- Elágazás
- A funkcióág létrehozása (
git checkout -b my-new-feature
) - Módosítások véglegesítése (
git commit -am 'Add some feature'
) - Leküldés az ágra (
git push origin my-new-feature
) - Új lekéréses kérelem létrehozása
Azure SDK for JavaScript
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: