Megosztás a következőn keresztül:


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

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:

  1. 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.

  2. 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 USjelö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.

  1. Elágazás
  2. A funkcióág létrehozása (git checkout -b my-new-feature)
  3. Módosítások véglegesítése (git commit -am 'Add some feature')
  4. Leküldés az ágra (git push origin my-new-feature)
  5. Új lekéréses kérelem létrehozása