Condividi tramite


Libreria client di Test di carico di Azure per Python - versione 1.0.0

Test di carico di Azure fornisce la libreria client in Python all'utente in cui possono interagire in modo nativo con il servizio Test di carico di Azure. Test di carico di Azure è un servizio di test del carico completamente gestito che consente di generare carico su larga scala. Il servizio simula il traffico per le applicazioni, indipendentemente dalla posizione in cui sono ospitate. Gli sviluppatori, i tester e i tecnici di qualità (QA) possono usarli per ottimizzare le prestazioni dell'applicazione, la scalabilità o la capacità.

Documentazione

La documentazione è disponibile per iniziare

Introduzione

Installazione del pacchetto

python -m pip install azure-developer-loadtesting

Prerequisiti

  • Python 3.7 o versione successiva è necessario per usare questo pacchetto.
  • È necessaria una sottoscrizione di Azure per usare questo pacchetto.
  • Istanza di LoadTesting per sviluppatori di Azure esistente.

Creare con una credenziale di Azure Active Directory

Per usare una credenziale token di Azure Active Directory (AAD), specificare un'istanza del tipo di credenziali desiderato ottenuto dalla libreria azure-identity .

Per eseguire l'autenticazione con AAD, è prima necessario installare pipazure-identity

Dopo la configurazione, è possibile scegliere il tipo di credenziali da azure.identity da usare.

Ad esempio, accedere tramite il comando dell'interfaccia az login della riga di comando di Azure e DefaultAzureCredential eseguirà l'autenticazione come utente.

Usare le credenziali del token restituite per autenticare il client.

Creare il client

Azure Developer LoadTesting SDK dispone di 2 sub-client del client principale (LoadTestingClient) per interagire con il servizio, "amministrazione" e "test_run".

from azure.developer.loadtesting import LoadTestAdministrationClient

# for managing authentication and authorization
# can be installed from pypi, follow: https://pypi.org/project/azure-identity/
# using DefaultAzureCredentials, read more at: https://learn.microsoft.com/en-us/python/api/azure-identity/azure.identity.defaultazurecredential?view=azure-python
from azure.identity import DefaultAzureCredential

client = LoadTestAdministrationClient(endpoint='<endpoint>', credential=DefaultAzureCredential())

<endpoint> fa riferimento all'endpoint/all'URL del piano dati della risorsa.

Concetti chiave

La libreria client di Test di carico di Azure per Python consente di interagire con ognuno di questi componenti tramite l'uso dei client. Esistono due client di primo livello che rappresentano i punti di ingresso principali per la libreria

  • LoadTestAdministrationClient (azure.developer.loadtesting.LoadTestAdministrationClient)
  • LoadTestRunClient (azure.developer.loadtesting.LoadTestRunClient)

Questi due client dispongono anche di controparti asincrone, che sono

  • LoadTestAdministrationClient (azure.developer.loadtesting.aio.LoadTestAdministrationClient)
  • LoadTestRunClient (azure.developer.loadtesting.aio.LoadTestRunClient)

Client di amministrazione dei test di carico

Viene LoadTestAdministrationClient usato per amministrare e configurare i test di carico, i componenti dell'app e le metriche.

Test

Un test specifica lo script di test e le impostazioni di configurazione per l'esecuzione di un test di carico. È possibile creare uno o più test in una risorsa test di carico di Azure.

Componente app

Quando si esegue un test di carico per un'applicazione ospitata in Azure, è possibile monitorare le metriche delle risorse per i diversi componenti dell'applicazione di Azure (metriche lato server). Durante l'esecuzione del test di carico e dopo il completamento del test, è possibile monitorare e analizzare le metriche delle risorse nel dashboard test di carico di Azure.

Metriche

Durante un test di carico, Test di carico di Azure raccoglie le metriche relative all'esecuzione del test. Esistono due tipi di metriche:

  1. Le metriche lato client forniscono i dettagli segnalati dal motore di test. Queste metriche includono il numero di utenti virtuali, il tempo di risposta della richiesta, il numero di richieste non riuscite o il numero di richieste al secondo.

  2. Le metriche lato server sono disponibili per le applicazioni ospitate in Azure e forniscono informazioni sui componenti dell'applicazione di Azure. Le metriche possono essere per il numero di letture del database, il tipo di risposte HTTP o l'utilizzo delle risorse del contenitore.

Test Run Client

Viene LoadTestRunClient usato per avviare e arrestare le esecuzioni di test corrispondenti a un test di carico. Un'esecuzione di test rappresenta un'esecuzione di un test di carico. Raccoglie i log associati all'esecuzione dello script Apache JMeter, la configurazione YAML del test di carico, l'elenco dei componenti dell'app da monitorare e i risultati del test.

endpoint Data-Plane

Il piano dati delle risorse di Test di carico di Azure è indirizzabile usando il formato URL seguente:

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

Il primo GUID è l'identificatore univoco 00000000-0000-0000-0000-000000000000 usato per accedere alla risorsa Test di carico di Azure. Questo è seguito da aaa quale è l'area di Azure della risorsa.

L'endpoint del piano dati viene ottenuto dalle API del piano di controllo.

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

Nell'esempio precedente rappresenta eus l'area East USdi Azure .

Esempio

Creazione di un test di carico

from azure.developer.loadtesting import LoadTestAdministrationClient
from azure.identity import DefaultAzureCredential
from azure.core.exceptions import HttpResponseError
import os

TEST_ID = "some-test-id"  
DISPLAY_NAME = "my-load-test"  

# set SUBSCRIPTION_ID as an environment variable
SUBSCRIPTION_ID = os.environ["SUBSCRIPTION_ID"]  

client = LoadTestAdministrationClient(endpoint='<endpoint>', credential=DefaultAzureCredential())

try:
    result = client.create_or_update_test(
        TEST_ID,
        {
            "description": "",
            "displayName": "My New Load Test",
            "loadTestConfig": {
                "engineInstances": 1,
                "splitAllCSVs": False,
            },
            "passFailCriteria": {
                "passFailMetrics": {
                    "condition1": {
                        "clientmetric": "response_time_ms",
                        "aggregate": "avg",
                        "condition": ">",
                        "value": 300
                    },
                    "condition2": {
                        "clientmetric": "error",
                        "aggregate": "percentage",
                        "condition": ">",
                        "value": 50
                    },
                    "condition3": {
                        "clientmetric": "latency",
                        "aggregate": "avg",
                        "condition": ">",
                        "value": 200,
                        "requestName": "GetCustomerDetails"
                    }
                }
            },
            "secrets": {
                "secret1": {
                    "value": "https://sdk-testing-keyvault.vault.azure.net/secrets/sdk-secret",
                    "type": "AKV_SECRET_URI"
                }
            },
            "environmentVariables": {
                "my-variable": "value"
            }
        }
    )
    print(result)
except HttpResponseError as e:
     print('Service responded with error: {}'.format(e.response.json()))

Caricamento di file con estensione jmx in un test

from azure.developer.loadtesting import LoadTestAdministrationClient
from azure.identity import DefaultAzureCredential
from azure.core.exceptions import HttpResponseError

TEST_ID = "some-test-id"  
FILE_NAME = "some-file-name.jmx"  

client = LoadTestAdministrationClient(endpoint='<endpoint>', credential=DefaultAzureCredential())

try:

    # uploading .jmx file to a test
    resultPoller = client.begin_upload_test_file(TEST_ID, FILE_NAME, open("sample.jmx", "rb"))

    # getting result of LRO poller with timeout of 600 secs
    validationResponse = resultPoller.result(600)
    print(validationResponse)
    
except HttpResponseError as e:
    print("Failed with error: {}".format(e.response.json()))

Esecuzione di un test

from azure.developer.loadtesting import LoadTestRunClient
from azure.identity import DefaultAzureCredential
from azure.core.exceptions import HttpResponseError

TEST_ID = "some-test-id"  
TEST_RUN_ID = "some-testrun-id" 
DISPLAY_NAME = "my-load-test-run"  

client = LoadTestRunClient(endpoint='<endpoint>', credential=DefaultAzureCredential())

try:
    testRunPoller = client.begin_test_run(
    TEST_RUN_ID,
        {
            "testId": TEST_ID,
            "displayName": "My New Load Test Run",
        }
    )

    #waiting for test run status to be completed with timeout = 3600 seconds
    result = testRunPoller.result(3600)
    
    print(result)
except HttpResponseError as e:
    print("Failed with error: {}".format(e.response.json()))

Passaggi successivi

Altri esempi sono disponibili qui.

Contributo

In questo progetto sono benvenuti i contributi e i suggerimenti. Per la maggior parte dei contenuti è necessario sottoscrivere un contratto di licenza di collaborazione (CLA, Contributor License Agreement) che stabilisce che l'utente ha il diritto di concedere, e di fatto concede a Microsoft i diritti d'uso del suo contributo. Per informazioni dettagliate, vedere https://cla.microsoft.com.

Quando si invia una richiesta pull, un bot CLA determina automaticamente se è necessario specificare un contratto CLA e completare la richiesta pull in modo appropriato (ad esempio con un'etichetta e un commento). Seguire le istruzioni specificate dal bot. È sufficiente eseguire questa operazione una sola volta per tutti i repository che usano il contratto CLA Microsoft.

Questo progetto ha adottato il Codice di comportamento di Microsoft per l'open source. Per altre informazioni, vedere Code of Conduct FAQ (Domande frequenti sul Codice di comportamento) oppure contattare opencode@microsoft.com per eventuali altre domande o commenti.

Risoluzione dei problemi

Altre informazioni sono presto disponibili...