Compartilhar via


Biblioteca de clientes do Teste de Carga do Azure para JavaScript – versão 1.0.1

O Teste de Carga do Azure fornece biblioteca de clientes em JavaScript para o usuário pelo qual ele pode interagir nativamente com o serviço de Teste de Carga do Azure. O Teste de Carga do Azure é um serviço de teste de carga totalmente gerenciado que permite gerar carga de alta escala. O serviço simula o tráfego para seus aplicativos, independentemente de onde eles estão hospedados. Desenvolvedores, testadores e engenheiros de garantia de qualidade (QA) podem usá-lo para otimizar o desempenho, a escalabilidade ou a capacidade do aplicativo.

Confie fortemente em nossos documentos de cliente REST para usar essa biblioteca

Documentação

Várias documentações estão disponíveis para ajudá-lo a começar

Introdução

Ambientes com suporte no momento

Pré-requisitos

Instalar o pacote @azure-rest/load-testing

Instale a biblioteca de clientes REST do cliente do AzureLoadTesting para JavaScript com npm:

npm install @azure-rest/load-testing

Criar e autenticar um cliente AzureLoadTesting

Para usar umade credencial de token Azure Active Directory (AAD), forneça uma instância do tipo de credencial desejado obtido da biblioteca de de @azure/identidade.

Para autenticar com o AAD, primeiro você deve npm instalar @azure/identity

Após a instalação, você pode escolher qual tipo de de credencial usar. Por exemplo, DefaultAzureCredential pode ser usado para autenticar o cliente.

Defina os valores da ID do cliente, da ID do locatário e do segredo do cliente do aplicativo AAD como variáveis de ambiente: 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());

Principais conceitos

Os componentes a seguir compõem o Serviço de Teste de Carga do Azure. A biblioteca de clientes do Teste de Carga do Azure para JavaScript permite que você interaja com cada um desses componentes por meio do uso de um objeto cliente dedicado.

Teste

Um teste especifica o script de teste e as configurações para executar um teste de carga. Você pode criar um ou mais testes em um recurso de Teste de Carga do Azure.

Componente do aplicativo

Ao executar um teste de carga para um aplicativo hospedado no Azure, você pode monitorar as métricas de recurso para os diferentes componentes do aplicativo do Azure (métricas do lado do servidor). Enquanto o teste de carga é executado e, após a conclusão do teste, você pode monitorar e analisar as métricas de recurso no painel do Teste de Carga do Azure.

Métricas

Durante um teste de carga, o Teste de Carga do Azure coleta métricas sobre a execução do teste. Há dois tipos de métricas:

  1. As métricas do lado do cliente fornecem detalhes relatados pelo mecanismo de teste. Essas métricas incluem o número de usuários virtuais, o tempo de resposta da solicitação, o número de solicitações com falha ou o número de solicitações por segundo.

  2. As métricas do lado do servidor estão disponíveis para aplicativos hospedados no Azure e fornecem informações sobre seus componentes de aplicativo do Azure. As métricas podem ser para o número de leituras de banco de dados, o tipo de respostas HTTP ou o consumo de recursos de contêiner.

Mecanismo de teste

Um mecanismo de teste é a infraestrutura de computação que executa o script de teste do Apache JMeter. Você pode escalar horizontalmente o teste de carga configurando o número de mecanismos de teste. O script de teste é executado em paralelo no número especificado de mecanismos de teste.

Execução de teste

Uma execução de teste representa uma execução de um teste de carga. Ele coleta os logs associados à execução do script Do Apache JMeter, a configuração yaml de teste de carga, a lista de componentes de aplicativo a serem monitorados e os resultados do teste.

ponto de extremidade Data-Plane

O plano de dados dos recursos do Teste de Carga do Azure é endereçável usando o seguinte formato de URL:

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

O primeiro GUID 00000000-0000-0000-0000-000000000000 é o identificador exclusivo usado para acessar o recurso de Teste de Carga do Azure. Isso é seguido por aaa que é a região do Azure do recurso.

O ponto de extremidade do plano de dados é obtido das APIs do Plano de Controle.

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

No exemplo acima, eus representa a região do Azure East US.

Exemplos

Criando um teste de carga

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: {} },
  },
});

Carregando o arquivo .jmx em um teste

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

Executando um teste e buscando métricas

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

Solucionando problemas

Log

Habilitar o registro em log pode ajudar a descobrir informações úteis sobre falhas. Para ver um log de solicitações e respostas HTTP, defina a variável de ambiente AZURE_LOG_LEVEL como info. Como alternativa, o registro em log pode ser habilitado em runtime chamando setLogLevel no @azure/logger:

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

setLogLevel("info");

Para obter instruções mais detalhadas sobre como habilitar logs, você pode examinar os documentos do pacote @azure/agente.

Próximas etapas

Os exemplos do SDK do JavaScript de Teste de Carregamento do Azure estão disponíveis para você no repositório GitHub do SDK. Esses exemplos fornecem código de exemplo para cenários adicionais comumente encontrados.

Consulte exemplos de Teste de Carga do Azure.

Contribuindo

Para obter detalhes sobre como contribuir para este repositório, consulte o guia de contribuição .

  1. Bifurcar
  2. Criar seu branch de recursos (git checkout -b my-new-feature)
  3. Confirmar suas alterações (git commit -am 'Add some feature')
  4. Enviar por push para o branch (git push origin my-new-feature)
  5. Criar nova solicitação de pull