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
- código-fonte
- documentação de referência da API
- documentação do produto
Introdução
Ambientes com suporte no momento
Pré-requisitos
- Você deve ter um de assinatura do Azure e recurso do Serviço de Teste de Carga do Azure para usar esse pacote.
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
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
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:
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.
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 .
- Bifurcar
- Criar seu branch de recursos (
git checkout -b my-new-feature
) - Confirmar suas alterações (
git commit -am 'Add some feature'
) - Enviar por push para o branch (
git push origin my-new-feature
) - Criar nova solicitação de pull
Azure SDK for JavaScript