Partilhar via


Biblioteca de cliente do Azure Load Testing para JavaScript - versão 1.0.1

O Teste de Carga do Azure fornece biblioteca de cliente em JavaScript ao usuário pela 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.

Por favor, confie muito em nossos documentos de cliente REST para usar esta biblioteca

Documentação

Vários documentos estão disponíveis para ajudá-lo a começar

Primeiros passos

Ambientes atualmente suportados

Pré-requisitos

  • Você deve ter um de assinatura do Azure e de Recursos de Serviço de Teste de Carga do Azure para usar este pacote.

Instalar o pacote @azure-rest/load-testing

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

npm install @azure-rest/load-testing

Criar e autenticar um cliente AzureLoadTesting

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

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

Após a configuração, você pode escolher qual tipo de credencial de @azure/identity usar. Como exemplo, DefaultAzureCredential pode ser usado para autenticar o cliente.

Defina os valores do ID do cliente, ID do locatário e 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());

Conceitos-chave

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

Teste

Um teste especifica o script de teste e as definições de configuração 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 métricas de recursos 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 recursos no painel de 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. Existem 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.

Motor de teste

Um mecanismo de teste é a infraestrutura de computação que executa o script de teste Apache JMeter. Você pode dimensionar seu 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 Apache JMeter, a configuração do YAML de teste de carga, a lista de componentes do aplicativo a serem monitorados e os resultados do teste.

Ponto final Data-Plane

O plano de dados dos recursos de Teste de Carga do Azure pode ser endereçado 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 arquivo .jmx para 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);
}

Solução de problemas

Registo

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 tempo de execução chamando setLogLevel no @azure/logger:

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

setLogLevel("info");

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

Próximos passos

Os exemplos do SDK 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.

Contribuição

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

  1. Garfo
  2. Crie sua ramificação de recursos (git checkout -b my-new-feature)
  3. Confirme as alterações (git commit -am 'Add some feature')
  4. Empurrar para o ramo (git push origin my-new-feature)
  5. Criar novo Pull Request