Python용 Azure Load Testing 클라이언트 라이브러리 - 버전 1.0.0

Azure Load Testing은 Azure Load Testing 서비스와 기본적으로 상호 작용할 수 있는 Python의 클라이언트 라이브러리를 사용자에게 제공합니다. Azure Load Testing은 대규모 부하를 생성할 수 있는 완전 관리형 부하 테스트 서비스입니다. 서비스는 호스팅되는 위치에 관계없이 애플리케이션에 대한 트래픽을 시뮬레이션합니다. 개발자, 테스터 및 QA(품질 보증) 엔지니어는 이를 사용하여 애플리케이션 성능, 확장성 또는 용량을 최적화할 수 있습니다.

설명서

시작하는 데 도움이 되는 다양한 설명서를 사용할 수 있습니다.

시작

패키지 설치

python -m pip install azure-developer-loadtesting

필수 조건

  • 이 패키지를 사용하려면 Python 3.7 이상이 필요합니다.
  • 이 패키지를 사용하려면 Azure 구독 이 필요합니다.
  • 기존 Azure 개발자 LoadTesting 인스턴스입니다.

Azure Active Directory 자격 증명을 사용하여 만들기

AAD(Azure Active Directory) 토큰 자격 증명을 사용하려면 azure-identity 라이브러리에서 가져온 원하는 자격 증명 유형의 인스턴스를 제공합니다.

AAD를 사용하여 인증하려면 먼저 pip 설치를 수행해야 합니다. azure-identity

설치 후 azure.identity에서 사용할 자격 증명 유형을 선택할 수 있습니다.

예를 들어 Azure CLI az login 명령을 통해 로그인하면 DefaultAzureCredential 이 해당 사용자로 인증됩니다.

반환된 토큰 자격 증명을 사용하여 클라이언트를 인증합니다.

클라이언트 만들기

Azure Developer LoadTesting SDK에는 '관리' 및 'test_run' 서비스와 상호 작용할 수 있는 주 클라이언트(LoadTestingClient)의 하위 클라이언트가 2개 있습니다.

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> 는 리소스의 데이터 평면 엔드포인트/URL을 나타냅니다.

주요 개념

Python용 Azure 부하 테스트 클라이언트 라이브러리를 사용하면 클라이언트를 사용하여 이러한 각 구성 요소와 상호 작용할 수 있습니다. 라이브러리의 주요 진입점인 두 개의 최상위 클라이언트가 있습니다.

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

이 두 클라이언트에는 비동기 클라이언트도 있습니다.

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

부하 테스트 관리 클라이언트

LoadTestAdministrationClient 부하 테스트, 앱 구성 요소 및 메트릭을 관리하고 구성하는 데 사용됩니다.

테스트

테스트는 부하 테스트를 실행하기 위한 테스트 스크립트 및 구성 설정을 지정합니다. Azure Load Testing 리소스에서 하나 이상의 테스트를 만들 수 있습니다.

앱 구성 요소

Azure 호스트 애플리케이션에 대한 부하 테스트를 실행하는 경우 다양한 Azure 애플리케이션 구성 요소에 대한 리소스 메트릭(서버 쪽 메트릭)을 모니터링할 수 있습니다. 부하 테스트가 실행되는 동안 및 테스트가 완료된 후 Azure Load Testing 대시보드에서 리소스 메트릭을 모니터링하고 분석할 수 있습니다.

메트릭

부하 테스트 중에 Azure Load Testing은 테스트 실행에 대한 메트릭을 수집합니다. 다음과 같이 두 가지 유형의 메트릭이 있습니다.

  1. 클라이언트 쪽 메트릭은 테스트 엔진에서 보고한 세부 정보를 제공합니다. 이러한 메트릭에는 가상 사용자 수, 요청 응답 시간, 실패한 요청 수 또는 초당 요청 수가 포함됩니다.

  2. 서버 쪽 메트릭은 Azure 호스트 애플리케이션에 사용할 수 있으며 Azure 애플리케이션 구성 요소에 대한 정보를 제공합니다. 메트릭은 데이터베이스 읽기 수, HTTP 응답 유형 또는 컨테이너 리소스 사용량에 대한 것일 수 있습니다.

테스트 실행 클라이언트

LoadTestRunClient 부하 테스트에 해당하는 테스트 실행을 시작하고 중지하는 데 사용됩니다. 테스트 실행은 부하 테스트를 한 번 실행하는 것을 나타냅니다. Apache JMeter 스크립트 실행, 부하 테스트 YAML 구성, 모니터링할 앱 구성 요소 목록 및 테스트 결과와 관련된 로그를 수집합니다.

Data-Plane 엔드포인트

Azure Load Testing 리소스의 데이터 평면은 다음 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을 나타냅니다.

예제

부하 테스트 만들기

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

테스트에 .jmx 파일 업로드

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

테스트 실행

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

다음 단계

추가 샘플은 여기에서 찾을 수 있습니다.

참여

이 프로젝트에 대한 기여와 제안을 환영합니다. 대부분의 경우 기여하려면 권한을 부여하며 실제로 기여를 사용할 권한을 당사에 부여한다고 선언하는 CLA(기여자 라이선스 계약)에 동의해야 합니다. 자세한 내용은 https://cla.microsoft.com 을 참조하세요.

끌어오기 요청을 제출하면 CLA-bot은 CLA를 제공하고 PR을 적절하게 데코레이팅해야 하는지 여부를 자동으로 결정합니다(예: 레이블, 설명). 봇에서 제공하는 지침을 따르기만 하면 됩니다. 이 작업은 CLA를 사용하여 모든 리포지토리에서 한 번만 수행하면 됩니다.

이 프로젝트에는 Microsoft Open Source Code of Conduct(Microsoft 오픈 소스 준수 사항)가 적용됩니다. 자세한 내용은 준수 사항 FAQ를 참조하거나 opencode@microsoft.com에 추가 질문 또는 의견을 알려주세요.

문제 해결

그것에 대한 자세한 내용은 곧 오고있다 ...