Поделиться через


Клиентская библиотека нагрузочного тестирования Azure для JavaScript версии 1.0.1

Нагрузочное тестирование Azure предоставляет клиентскую библиотеку в JavaScript пользователю, с помощью которого они могут взаимодействовать в собственном коде со службой нагрузочного тестирования Azure. Нагрузочное тестирование Azure — это полностью управляемая служба нагрузочного тестирования, которая позволяет создавать высокомасштабную нагрузку. Служба имитирует трафик для приложений независимо от того, где они размещаются. Разработчики, тестировщики и инженеры качества (QA) могут использовать его для оптимизации производительности приложений, масштабируемости или емкости.

Для использования этой библиотеки используется документация клиента REST

Документация

Доступны различные документы, которые помогут вам приступить к работе

Начало работы

Поддерживаемые в настоящее время среды

Необходимые условия

  • Для использования этого пакета необходимо иметь подписку Azure и ресурс службы нагрузочных тестов Azure.

Установка пакета @azure-rest/load-testing

Установите клиентскую клиентскую библиотеку REST AzureLoadTesting для JavaScript с npm:

npm install @azure-rest/load-testing

Создание и проверка подлинности клиента AzureLoadTesting

Чтобы использовать учетных данных маркера Azure Active Directory (AAD), укажите экземпляр требуемого типа учетных данных, полученного из библиотеки @azure/identity.

Чтобы выполнить проверку подлинности с помощью AAD, необходимо сначала npm установить @azure/identity

После установки можно выбрать тип учетных данных из @azure/identity использования. Например, DefaultAzureCredential можно использовать для проверки подлинности клиента.

Задайте значения идентификатора клиента, идентификатора клиента и секрета клиента приложения AAD в качестве переменных среды: 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());

Основные понятия

Следующие компоненты составляют службу нагрузочного тестирования Azure. Клиентская библиотека нагрузочного теста Azure для JavaScript позволяет взаимодействовать с каждым из этих компонентов с помощью выделенного клиентского объекта.

Тест

Тест задает скрипт теста и параметры конфигурации для выполнения нагрузочного теста. Вы можете создать один или несколько тестов в ресурсе Нагрузочного тестирования Azure.

Компонент приложения

При запуске нагрузочного теста для приложения, размещенного в Azure, можно отслеживать метрики ресурсов для различных компонентов приложения Azure (метрики на стороне сервера). Во время выполнения нагрузочного теста и после завершения теста можно отслеживать и анализировать метрики ресурсов на панели мониторинга нагрузочного тестирования Azure.

Метрика

Во время нагрузочного теста Azure Load Testing собирает метрики о выполнении теста. Существует два типа метрик:

  1. Метрики на стороне клиента предоставляют подробные сведения, сообщаемые тестовой подсистемой. Эти метрики включают количество виртуальных пользователей, время ответа запроса, количество неудачных запросов или количество запросов в секунду.

  2. Метрики на стороне сервера доступны для приложений, размещенных в Azure, и предоставляют сведения о компонентах приложений Azure. Метрики могут быть для количества операций чтения базы данных, типа http-ответов или потребления ресурсов контейнера.

Модуль тестирования

Модуль тестирования — это вычислительная инфраструктура, которая запускает скрипт тестирования Apache JMeter. Вы можете масштабировать нагрузочный тест, настроив количество тестовых модулей. Скрипт тестирования выполняется параллельно по указанному количеству тестовых ядр.

Тестовый запуск

Тестовый запуск представляет одно выполнение нагрузочного теста. Он собирает журналы, связанные со скриптом Apache JMeter, конфигурацией YAML нагрузочного теста, списком компонентов приложения для мониторинга и результатами теста.

Конечная точка Data-Plane

Плоскость данных ресурсов нагрузочного тестирования Azure можно адресировать с помощью следующего формата URL-адреса:

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

Первый идентификатор GUID 00000000-0000-0000-0000-000000000000 — это уникальный идентификатор, используемый для доступа к ресурсу Azure Load Testing. За этим следует aaa, который является регионом Azure ресурса.

Конечная точка плоскости данных получена из API плоскости управления.

Пример :1234abcd-12ab-12ab-12ab-123456abcdef.eus.cnt-prod.loadtesting.azure.com

В приведенном выше примере eus представляет регион Azure East US.

Примеры

Создание нагрузочного теста

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-файла в тест

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

Выполнение теста и получение метрик

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

Устранение неполадок

Лесозаготовка

Включение ведения журнала может помочь выявить полезные сведения о сбоях. Чтобы просмотреть журнал HTTP-запросов и ответов, задайте для переменной среды AZURE_LOG_LEVEL значение info. Кроме того, ведение журнала можно включить во время выполнения путем вызова setLogLevel в @azure/logger:

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

setLogLevel("info");

Дополнительные инструкции по включению журналов см. в документации по пакету @azure/loger.

Дальнейшие действия

Примеры пакета SDK javaScript для загрузки Azure доступны в репозитории GitHub пакета SDK. В этих примерах приведен пример кода для дополнительных сценариев, которые часто возникают.

См. примеры нагрузочного тестирования Azure.

Способствует

Дополнительные сведения об участии в этом репозитории см. в руководстве по.

  1. Вилку
  2. Создание ветви функций (git checkout -b my-new-feature)
  3. Фиксация изменений (git commit -am 'Add some feature')
  4. Отправка в ветвь (git push origin my-new-feature)
  5. Создание нового запроса на вытягивание