Delen via


Azure Load Testing-clientbibliotheek voor JavaScript - versie 1.0.1

Azure Load Testing biedt een clientbibliotheek in JavaScript voor de gebruiker waarmee ze systeemeigen kunnen communiceren met de Azure Load Testing-service. Azure Load Testing is een volledig beheerde service voor belastingstests waarmee u grootschalige belasting kunt genereren. De service simuleert verkeer voor uw toepassingen, ongeacht waar ze worden gehost. Ontwikkelaars, testers en QA-technici (Quality Assurance) kunnen deze gebruiken om de prestaties, schaalbaarheid of capaciteit van toepassingen te optimaliseren.

Vertrouw sterk op onze REST-clientdocumenten om deze bibliotheek te gebruiken

Documentatie

Er is diverse documentatie beschikbaar om u te helpen aan de slag te gaan

Slag

Momenteel ondersteunde omgevingen

Voorwaarden

Het @azure-rest/load-testing-pakket installeren

Installeer de REST-clientbibliotheek van de AzureLoadTesting-client voor JavaScript met npm:

npm install @azure-rest/load-testing

Een AzureLoadTesting-client maken en verifiëren

Als u een AAD-tokenreferenties (Azure Active Directory) wilt gebruiken, geeft u een exemplaar op van het gewenste referentietype dat is verkregen uit de @azure/identity-bibliotheek.

Als u zich wilt verifiëren met AAD, moet u eerst npm@azure/identity installeren

Na de installatie kunt u kiezen welk type referentie uit @azure/identity te gebruiken. Als voorbeeld kan DefaultAzureCredential- worden gebruikt om de client te verifiëren.

Stel de waarden van de client-id, tenant-id en clientgeheim van de AAD-toepassing in als omgevingsvariabelen: 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());

Sleutelbegrippen

De volgende onderdelen vormen de Azure Load Testing Service. Met de Azure Load Test-clientbibliotheek voor JavaScript kunt u met elk van deze onderdelen communiceren via het gebruik van een toegewezen clientobject.

Test

Een test geeft het testscript en de configuratie-instellingen voor het uitvoeren van een belastingstest op. U kunt een of meer tests maken in een Azure Load Testing-resource.

App-onderdeel

Wanneer u een belastingstest uitvoert voor een door Azure gehoste toepassing, kunt u metrische resourcegegevens bewaken voor de verschillende Azure-toepassingsonderdelen (metrische gegevens aan de serverzijde). Terwijl de belastingstest wordt uitgevoerd en na voltooiing van de test, kunt u de metrische resourcegegevens bewaken en analyseren in het dashboard Azure Load Testing.

Statistieken

Tijdens een belastingstest verzamelt Azure Load Testing metrische gegevens over de testuitvoering. Er zijn twee soorten metrische gegevens:

  1. Metrische gegevens aan de clientzijde geven u details die door de testengine zijn gerapporteerd. Deze metrische gegevens omvatten het aantal virtuele gebruikers, de reactietijd van de aanvraag, het aantal mislukte aanvragen of het aantal aanvragen per seconde.

  2. Metrische gegevens aan de serverzijde zijn beschikbaar voor door Azure gehoste toepassingen en bieden informatie over uw Azure-toepassingsonderdelen. Metrische gegevens kunnen zijn voor het aantal databaseleesbewerkingen, het type HTTP-antwoorden of het verbruik van containerresources.

Test-engine

Een testengine is de computerinfrastructuur waarop het Apache JMeter-testscript wordt uitgevoerd. U kunt de belastingstest uitschalen door het aantal testengines te configureren. Het testscript wordt parallel uitgevoerd voor het opgegeven aantal testengines.

Testuitvoering

Een testuitvoering vertegenwoordigt één uitvoering van een belastingstest. Hiermee worden de logboeken verzameld die zijn gekoppeld aan het uitvoeren van het Apache JMeter-script, de YAML-configuratie van de belastingtest, de lijst met app-onderdelen die moeten worden bewaakt en de resultaten van de test.

Data-Plane-eindpunt

Gegevensvlak van Azure Load Testing-resources kan worden adresseerbaar met behulp van de volgende URL-indeling:

00000000-0000-0000-0000-000000000000.aaa.cnt-prod.loadtesting.azure.com

De eerste GUID-00000000-0000-0000-0000-000000000000 is de unieke id die wordt gebruikt voor toegang tot de Azure Load Testing-resource. Dit wordt gevolgd door aaa de Azure-regio van de resource.

Het eindpunt van het gegevensvlak wordt verkregen uit Besturingsvlak-API's.

voorbeeld:1234abcd-12ab-12ab-12ab-123456abcdef.eus.cnt-prod.loadtesting.azure.com

In het bovenstaande voorbeeld vertegenwoordigt eus de Azure-regio East US.

Voorbeelden

Een belastingstest maken

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-bestand uploaden naar een 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
  );

Een test uitvoeren en metrische gegevens ophalen

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);
}

Probleemoplossing

Logboekregistratie

Het inschakelen van logboekregistratie kan helpen nuttige informatie over fouten te ontdekken. Als u een logboek met HTTP-aanvragen en -antwoorden wilt zien, stelt u de omgevingsvariabele AZURE_LOG_LEVEL in op info. U kunt logboekregistratie ook tijdens runtime inschakelen door setLogLevel aan te roepen in de @azure/logger:

import { setLogLevel } from "@azure/logger";

setLogLevel("info");

Voor meer gedetailleerde instructies over het inschakelen van logboeken, kunt u de @azure/logger pakketdocumentenbekijken.

Volgende stappen

Azure Loading Testing JavaScript SDK-voorbeelden zijn beschikbaar in de GitHub-opslagplaats van de SDK. Deze voorbeelden bevatten voorbeeldcode voor aanvullende scenario's die vaak worden aangetroffen.

Zie Azure Load Testing-voorbeelden.

Bijdragen

Zie de gids bijdragenvoor meer informatie over het bijdragen aan deze opslagplaats.

  1. Fork het
  2. Uw functiebranch maken (git checkout -b my-new-feature)
  3. Uw wijzigingen doorvoeren (git commit -am 'Add some feature')
  4. Pushen naar de vertakking (git push origin my-new-feature)
  5. Nieuwe pull-aanvraag maken