Aracılığıyla paylaş


JavaScript için Azure Load Testing istemci kitaplığı - sürüm 1.0.1

Azure Load Testing, kullanıcıya Azure Load Testing hizmetiyle yerel olarak etkileşim kurabileceği JavaScript'te istemci kitaplığı sağlar. Azure Yük Testi, yüksek ölçekli yük oluşturmanızı sağlayan tam olarak yönetilen bir yük testi hizmetidir. Hizmet, nerede barındırıldığına bakılmaksızın uygulamalarınız için trafiğin simülasyonunu oluşturur. Geliştiriciler, test ediciler ve kalite güvencesi (QA) mühendisleri bunu uygulama performansını, ölçeklenebilirliğini veya kapasitesini iyileştirmek için kullanabilir.

Bu kitaplığı kullanmak için REST istemci belgelerimize

Belge

Başlamanıza yardımcı olacak çeşitli belgeler mevcuttur

Başlarken

Şu anda desteklenen ortamlar

  • Node.js LTS sürümleri

Önkoşullar

@azure-rest/load-testing paketini yükleme

npmile JavaScript için AzureLoadTesting istemcisi REST istemci kitaplığını yükleyin:

npm install @azure-rest/load-testing

AzureLoadTesting istemcisi oluşturma ve kimliğini doğrulama

Azure Active Directory (AAD) belirteci kimlik bilgilerini kullanmak için, @azure/kimlik kitaplığından alınan istenen kimlik bilgisi türünün bir örneğini sağlayın.

AAD ile kimlik doğrulaması yapmak için önce npm yüklemeniz @azure/identity

Kurulumdan sonra, @azure/identity hangi tür kimlik bilgisi kullanılacağını seçebilirsiniz. Örneğin, istemcinin kimliğini doğrulamak için DefaultAzureCredential kullanılabilir.

AAD uygulamasının istemci kimliği, kiracı kimliği ve istemci gizli dizisi değerlerini ortam değişkenleri olarak ayarlayın: 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());

Temel kavramlar

Aşağıdaki bileşenler Azure Yük Testi Hizmeti'ni oluşturur. JavaScript için Azure Load Test istemci kitaplığı, ayrılmış bir istemci nesnesi kullanarak bu bileşenlerin her biriyle etkileşim kurmanızı sağlar.

Test

Test, test betiğini ve yük testi çalıştırmaya yönelik yapılandırma ayarlarını belirtir. Azure Yük Testi kaynağında bir veya daha fazla test oluşturabilirsiniz.

Uygulama Bileşeni

Azure tarafından barındırılan bir uygulama için yük testi çalıştırdığınızda, farklı Azure uygulama bileşenleri (sunucu tarafı ölçümleri) için kaynak ölçümlerini izleyebilirsiniz. Yük testi çalışırken ve testi tamamladıktan sonra Azure Yük Testi panosunda kaynak ölçümlerini izleyebilir ve analiz edebilirsiniz.

Ölçüm

Yük testi sırasında Azure Load Testing, test yürütmesi hakkındaki ölçümleri toplar. İki tür ölçüm vardır:

  1. İstemci tarafı ölçümleri, test altyapısı tarafından bildirilen ayrıntıları sağlar. Bu ölçümler sanal kullanıcı sayısını, istek yanıt süresini, başarısız isteklerin sayısını veya saniyedeki istek sayısını içerir.

  2. Sunucu tarafı ölçümleri Azure tarafından barındırılan uygulamalar için kullanılabilir ve Azure uygulama bileşenleriniz hakkında bilgi sağlar. Ölçümler veritabanı okuma sayısı, HTTP yanıtlarının türü veya kapsayıcı kaynağı tüketimi için olabilir.

Test Altyapısı

Test altyapısı, Apache JMeter test betiğini çalıştıran bilgi işlem altyapısıdır. Test altyapılarının sayısını yapılandırarak yük testinizin ölçeğini genişletebilirsiniz. Test betiği, belirtilen sayıda test motoru arasında paralel olarak çalışır.

Test Çalıştırması

Test çalıştırması, yük testinin bir yürütmesini temsil eder. Apache JMeter betiğini çalıştırmayla ilişkili günlükleri, yük testi YAML yapılandırmasını, izlenecek uygulama bileşenlerinin listesini ve testin sonuçlarını toplar.

Data-Plane Uç Noktası

Azure Yük Testi kaynaklarının veri düzlemi aşağıdaki URL biçimi kullanılarak adreslenebilir:

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

İlk GUID 00000000-0000-0000-0000-000000000000, Azure Yük Testi kaynağına erişmek için kullanılan benzersiz tanımlayıcıdır. Bunu kaynağın Azure bölgesi olan aaa izler.

Veri düzlemi uç noktası Denetim Düzlemi API'lerinden alınır.

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

Yukarıdaki örnekte, eusEast USAzure bölgesini temsil eder.

Örnekler

Yük testi oluşturma

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 dosyasını teste yükleme

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

Test Çalıştırma ve Ölçümleri Getirme

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

Sorun giderme

Günlük tutmak

Günlüğe kaydetmeyi etkinleştirmek, hatalarla ilgili yararlı bilgilerin ortaya çıkmasına yardımcı olabilir. HTTP isteklerinin ve yanıtlarının günlüğünü görmek için AZURE_LOG_LEVEL ortam değişkenini infoolarak ayarlayın. Alternatif olarak, @azure/loggersetLogLevel çağrılarak günlükler çalışma zamanında etkinleştirilebilir:

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

setLogLevel("info");

Günlükleri etkinleştirme hakkında daha ayrıntılı yönergeler için@azure/günlükçü paketi belgelerine bakabilirsiniz.

Sonraki adımlar

Azure Yükleme Testi JavaScript SDK örnekleri SDK'nın GitHub deposunda kullanılabilir. Bu örnekler, yaygın olarak karşılaşılan ek senaryolar için örnek kod sağlar.

bkz.azure yük testi örneklerini .

Katkıda

Bu depoya katkıda bulunma hakkında ayrıntılı bilgi içinkatkıda bulunma kılavuzuna bakın.

  1. Çatalı oluşturma
  2. Özellik dalınızı oluşturma (git checkout -b my-new-feature)
  3. Değişikliklerinizi işleme (git commit -am 'Add some feature')
  4. Dala gönderme (git push origin my-new-feature)
  5. Yeni Çekme İsteği oluştur