Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
- Bu paketi kullanmak için bir Azure aboneliği ve Azure Yük Testi Hizmeti Kaynağı sahip olmanız gerekir.
@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
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
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:
İ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.
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
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çin
- Çatalı oluşturma
- Özellik dalınızı oluşturma (
git checkout -b my-new-feature) - Değişikliklerinizi işleme (
git commit -am 'Add some feature') - Dala gönderme (
git push origin my-new-feature) - Yeni Çekme İsteği oluştur
Azure SDK for JavaScript