Kurz: Identifikace regresí výkonu automatizací zátěžových testů pomocí CI/CD

Tento kurz popisuje, jak rychle identifikovat regrese výkonu pomocí nástrojů Azure Load Testing Preview a CI/CD. Spuštěním zátěžových testů ve službě Azure Pipelines nebo GitHub Actions rychle zjistěte, kdy aplikace zaznamená snížený výkon při zatížení.

V tomto kurzu nastavíte kanál CI/CD, který spustí zátěžový test ukázkové aplikace v Azure. Chování aplikace při načítání ověříte přímo z řídicího panelu CI/CD. Pomocí kritérií neúspěšných zátěžových testů pak dostanete upozornění, když aplikace nesplňuje vaše požadavky na kvalitu.

V tomto kurzu použijete ukázkovou Node.js aplikaci a skript JMeter. Tento kurz nevyžaduje žádné dovednosti v oblasti kódování ani Apache JMeter.

Dozvíte se, jak:

  • Nastavte úložiště GitHubu pro ukázkovou aplikaci.
  • Nakonfigurujte ověřování služby pro pracovní postup CI/CD.
  • Nakonfigurujte pracovní postup CI/CD tak, aby spustil zátěžový test.
  • Prohlédněte si výsledky zátěžového testu na řídicím panelu CI/CD.
  • Definujte kritéria selhání zátěžového testu pro identifikaci regresí výkonu.

Poznámka

U úloh, které běží na agentech hostovaných Microsoftem pro privátní projekty, má Azure Pipelines časový limit 60 minut. Pokud zátěžový test běží déle než 60 minut, budete muset zaplatit za další kapacitu. Pokud ne, vyprší časový limit kanálu bez čekání na výsledky testu. Stav zátěžového testu můžete zobrazit v Azure Portal.

Důležité

Azure Load Testing je aktuálně ve verzi Preview. Právní podmínky, které se vztahují na funkce Azure, které jsou ve verzi beta, ve verzi Preview nebo jinak ještě nejsou obecně dostupné, najdete v dodatečných podmínkách použití pro verze Microsoft Azure Preview.

Požadavky

  • Účet Azure s aktivním předplatným. Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.
  • Pokud používáte Azure Pipelines, organizaci a projekt Azure DevOps. Pokud nemáte organizaci Azure DevOps, můžete si ji zdarma vytvořit. Pokud potřebujete pomoc se zahájením práce se službou Azure Pipelines, přečtěte si téma Vytvoření prvního kanálu.
  • Účet GitHub, kde můžete vytvořit úložiště. Pokud účet nemáte, můžete si ho zdarma vytvořit.

Nastavení úložiště ukázkové aplikace

Abyste mohli začít s tímto kurzem, musíte nejprve nastavit ukázkovou Node.js webové aplikace. Ukázková aplikace obsahuje definici Azure Pipelines pro nasazení aplikace v Azure a aktivaci zátěžového testu.

  1. Otevřete prohlížeč a přejděte do zdrojového úložiště GitHub ukázkové aplikace.

    Ukázková aplikace je Node.js aplikace, která se skládá z webové komponenty Azure App Service a databáze Azure Cosmos DB.

  2. Výběrem možnosti Fork (Fork ) roztáčíte úložiště ukázkové aplikace do svého účtu GitHubu.

    Snímek obrazovky znázorňující tlačítko pro vytvoření forku úložiště GitHub ukázkové aplikace

Úložiště ukázkové aplikace obsahuje skript Apache JMeter s názvem SampleApp.jmx. Skript otestuje tři rozhraní API v ukázkové aplikaci:

  • add: Provede vložení do služby Azure Cosmos DB, do které se uloží počet návštěvníků webové aplikace.
  • get: Provede operaci čtení ve službě Azure Cosmos DB, která načte počet návštěvníků.
  • lasttimestamp: Aktualizace časové razítko poslední návštěvy uživatele v paměti.

Konfigurace ověřování služby

Než nakonfigurujete kanál CI/CD tak, aby spustil zátěžový test, udělíte pracovnímu postupu CI/CD oprávnění pro přístup k prostředku zátěžového testování Azure.

Pokud chcete získat přístup k prostředku Azure Load Testing z pracovního postupu Azure Pipelines, nejprve vytvoříte připojení služby v projektu Azure DevOps. Připojení služby vytvoří instanční objekt Azure Active Directory. Tento instanční objekt představuje váš pracovní postup Azure Pipelines v Azure Active Directory.

Dále tomuto instančnímu objektu udělíte oprávnění k vytvoření a spuštění zátěžového testu s vaším prostředkem Azure Load Testing.

Vytvoření připojení služby v Azure Pipelines

Vytvořte připojení služby v Azure Pipelines, aby váš pracovní postup CI/CD získal přístup k vašemu předplatnému Azure. V dalším kroku pak udělíte oprávnění k vytváření a spouštění zátěžových testů.

  1. Přihlaste se k organizaci Azure DevOps (https://dev.azure.com/<your-organization>) a vyberte svůj projekt.

  2. Vyberte Nastavení> projektuPřipojení služeb.

  3. Vyberte + Nové připojení služby, vyberte připojení služby Azure Resource Manager a pak vyberte Další.

  4. Vyberte metodu ověřování instančního objektu (automatické) a pak vyberte Další.

  5. Zadejte informace o připojení služby a pak vyberte Uložit a vytvořte připojení služby.

    Pole Hodnota
    Úroveň oboru Předplatné.
    Předplatné Vyberte předplatné Azure, které bude hostovat váš prostředek zátěžového testování.
    Skupina prostředků Nechte prázdné. Kanál vytvoří novou skupinu prostředků pro prostředek Azure Load Testing.
    Název připojení služby Zadejte jedinečný název připojení služby. Tento název použijete později ke konfiguraci definice kanálu.
    Udělení přístupových oprávnění pro všechny kanály Kontrolovány.
  6. V seznamu vyberte připojení služby, které jste vytvořili, a pak vyberte Spravovat instanční objekt.

    Snímek obrazovky znázorňující výběry pro správu instančního objektu

  7. V Azure Portal zkopírujte hodnotu ID aplikace (klienta).

Spuštění služby Azure Cloud Shell

Azure Cloud Shell je bezplatné interaktivní prostředí, které můžete použít k provedení kroků v tomto článku. Má předinstalované obecné nástroje Azure, které jsou nakonfigurované pro použití s vaším účtem.

Pokud chcete otevřít Cloud Shell, vyberte položku Vyzkoušet v pravém horním rohu bloku kódu. Cloud Shell můžete spustit také na samostatné kartě prohlížeče na adrese https://shell.azure.com.

Po otevření Cloud Shell ověřte, že je pro vaše prostředí vybraný Bash. V dalších relacích se použije Azure CLI v prostředí Bash. Výběrem možnosti Kopírovat zkopírujete bloky kódu, vložíte je do Cloud Shell a stisknutím klávesy Enter ho spustíte.

Přihlášení k Azure

Cloud Shell se automaticky ověří pod počátečním účtem přihlášeným pomocí. Pomocí následujícího skriptu se přihlaste pomocí jiného předplatného a nahraďte <Subscription ID> svým ID předplatného Azure. Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure , než začnete.

subscription="<subscriptionId>" # add subscription here

az account set -s $subscription # ...or use 'az login'

Další informace najdete v tématu Interaktivní nastavení aktivního předplatného nebo přihlášení.

Udělení přístupu ke službě Azure Load Testing

Pokud chcete udělit přístup k prostředku Azure Load Testing, přiřaďte instančnímu objektu roli Přispěvatel zátěžových testů. Tato role uděluje instančnímu objektu přístup k vytváření a spouštění zátěžových testů pomocí služby Azure Load Testing. Přečtěte si další informace o správě uživatelů a rolí v Azure Load Testing.

  1. Pomocí Azure CLI načtěte ID instančního objektu. Nahraďte zástupný text <application-client-id> hodnotou, kterou jste zkopírovali.

    object_id=$(az ad sp show --id "<application-client-id>" --query "id" -o tsv)
    echo $object_id
    
  2. Přiřaďte Load Test Contributor roli instančnímu objektu:

    subscription=$(az account show --query "id" -o tsv)
    echo $subscription
    
    az role assignment create --assignee $object_id \
        --role "Load Test Contributor" \
        --scope /subscriptions/$subscription \
        --subscription $subscription
    

Konfigurace pracovního postupu CI/CD pro spuštění zátěžového testu

Teď vytvoříte pracovní postup CI/CD pro vytvoření a spuštění zátěžového testu pro ukázkovou aplikaci. Úložiště ukázkové aplikace už obsahuje definici pracovního postupu CI/CD, která nejprve nasadí aplikaci do Azure a pak vytvoří zátěžový test založený na testovacím skriptu JMeter (SampleApp.jmx). Aktualizujete soubor definice ukázkového pracovního postupu a zadáte podrobnosti o předplatném a aplikaci Azure.

Při prvním spuštění pracovního postupu CI/CD vytvoří nový prostředek Azure Load Testing ve vašem předplatném Azure pomocí šablony ARMTemplate/template.json Azure Resource Manager (ARM). Přečtěte si další informace o šablonách ARM.

Vytvoříte nový kanál Azure, který je propojený s vaším forkem úložiště ukázkové aplikace. Toto úložiště obsahuje následující položky:

  • Zdrojový kód ukázkové aplikace
  • Definiční soubor kanálu azure-pipelines.yml
  • Testovací skript SampleApp.jmx JMeter.
  • Konfigurační soubor SampleApp.yaml Azure Load Testing.

K vytvoření a spuštění zátěžového testu používá definice Azure Pipelines rozšíření úlohy Azure Load Testing z Azure DevOps Marketplace.

  1. Otevřete rozšíření úlohy Azure Load Testing v Azure DevOps Marketplace a vyberte Získat zdarma.

  2. Vyberte svoji organizaci Azure DevOps a pak vyberte Nainstalovat a nainstalujte rozšíření.

    Pokud nemáte oprávnění správce pro vybranou organizaci Azure DevOps, vyberte Žádost a požádejte správce o instalaci rozšíření.

  3. V projektu Azure DevOps v levém navigačním panelu vyberte Kanály a pak vyberte Vytvořit kanál.

  4. Na kartě Připojit vyberte GitHub.

  5. Výběrem možnosti Autorizovat Azure Pipelines povolte službě Azure Pipelines přístup k vašemu účtu GitHubu pro aktivaci pracovních postupů.

  6. Na kartě Vybrat vyberte úložiště forku ukázkové aplikace.

    Snímek obrazovky, který ukazuje, jak vybrat úložiště GitHub ukázkové aplikace

    Azure Pipelines automaticky rozpozná definiční soubor kanálu azure-pipelines.yml .

  7. Všimněte si, že definice kanálu obsahuje LoadTest fázi, která má dva úkoly.

    Úloha AzureResourceManagerTemplateDeployment nasadí nový prostředek pro zátěžové testování Azure ve vašem předplatném Azure.

    AzureLoadTest Dále úloha Azure Load Testing vytvoří a spustí zátěžový test. Tato úloha používá konfigurační soubor zátěžovéhoSampleApp.yaml testu, který obsahuje konfigurační parametry zátěžového testu, například počet paralelních testovacích modulů.

    - task: AzureLoadTest@1
      inputs:
        azureSubscription: $(serviceConnection)
        loadTestConfigFile: 'SampleApp.yaml'
        resourceGroup: $(loadTestResourceGroup)
        loadTestResource: $(loadTestResource)
        env: |
          [
            {
            "name": "webapp",
            "value": "$(webAppName).azurewebsites.net"
            }
          ]
    

    Pokud zátěžový test již existuje, AzureLoadTest úloha nevytvoří nový zátěžový test, ale přidá testovací běh do tohoto zátěžového testu. Pokud chcete identifikovat regrese v průběhu času, můžete porovnat několik testovacích běhů.

  8. Na kartě Revize nahraďte na začátku definice kanálu následující zástupný text:

    Tyto proměnné slouží ke konfiguraci nasazení ukázkové aplikace a k vytvoření zátěžového testu.

    Zástupný symbol Hodnota
    <Name of your webapp> Název webové aplikace Azure App Service.
    <Name of your webARM Service connection> Název připojení služby, které jste vytvořili v předchozí části.
    <Azure subscriptionId> ID vašeho předplatného Azure
    <Name of your load test resource> Název prostředku Azure Load Testing.
    <Name of your load test resource group> Název skupiny prostředků, která obsahuje prostředek Azure Load Testing.

    Snímek obrazovky, který ukazuje kartu Revize služby Azure Pipelines při vytváření kanálu

  9. Vyberte Uložit a spustit, zadejte text pro Potvrzení zprávy a pak vyberte Uložit a spustit.

    Azure Pipelines teď spustí pracovní postup CI/CD a nasadí ukázkovou aplikaci a vytvoří zátěžový test.

  10. V levém navigačním panelu vyberte Pipelines (Kanály ) a pak v seznamu vyberte new pipeline run (Nové spuštění kanálu) a monitorujte stav.

    Podrobný protokol spuštění můžete zobrazit výběrem úlohy kanálu.

    Snímek obrazovky, který ukazuje, jak zobrazit podrobnosti úlohy kanálu

Zobrazení výsledků zátěžového testu

Azure Load Testing umožňuje zobrazit výsledky spuštění zátěžového testu přímo ve výstupu pracovního postupu CI/CD. Protokol CI/CD obsahuje následující metriky na straně klienta:

  • Metriky doby odezvy: průměr, minimum, medián, maximum a 90-95-99 percentily.
  • Počet požadavků za sekundu
  • Celkový počet požadavků
  • Celkový počet chyb
  • Míra chyb.

Soubor výsledků zátěžového testu je navíc k dispozici jako artefakt spuštění pracovního postupu, který si můžete stáhnout pro další vytváření sestav.

  1. V projektu Azure DevOps vyberte Pipelines (Kanály) a pak v seznamu vyberte svou definici kanálu.

  2. Výběrem spuštění kanálu zobrazte souhrn spuštění.

    Snímek obrazovky znázorňující souhrn spuštění kanálu

  3. V části Úlohy vyberte Zátěžový test a zobrazte protokol kanálu.

    Snímek obrazovky znázorňující protokol spuštění Azure Pipelines

    Po dokončení zátěžového testu můžete zobrazit souhrnné informace o testu a metriky na straně klienta v protokolu kanálu. V protokolu se také zobrazuje adresa URL pro přechod na řídicí panel Azure Load Testing pro tento zátěžový test.

  4. V zobrazení protokolu kanálu vyberte Zátěžový test a pak vyberte 1 vygenerovaný artefakt , abyste si stáhli soubory výsledků zátěžového testu.

    Snímek obrazovky, který ukazuje, jak stáhnout výsledky zátěžového testu

Definování kritérií neúspěšných testů

Azure Load Testing umožňuje definovat kritéria neúspěšných zátěžových testů. Tato kritéria určují, kdy by měl zátěžový test proběhnout úspěšně nebo selhat. Zátěžový test by například měl selhat, když je průměrná doba odezvy větší než konkrétní hodnota nebo když dojde k příliš mnoha chybám.

Když spustíte zátěžový test jako součást kanálu CI/CD, stav spuštění kanálu bude odrážet stav zátěžového testu. Tento přístup umožňuje rychle identifikovat regrese výkonu nebo snížené chování aplikace, když aplikace čelí vysokému zatížení.

V této části nakonfigurujete kritéria selhání testu na základě průměrné doby odezvy a míry chyb.

Kritéria neúspěšného zátěžového testu pro zátěžové testování Azure můžete zadat v konfiguračním souboru YAML testu. Přečtěte si další informace o konfiguraci kritérií neúspěšných zátěžových testů.

  1. Upravte soubor SampleApp.yml ve forku úložiště GitHub ukázkové aplikace.

  2. Na konec souboru přidejte následující fragment kódu:

    failureCriteria: 
        - avg(response_time_ms) > 100
        - percentage(error) > 20
    

    Teď jste pro zátěžový test zadali kritéria selhání na základě průměrné doby odezvy a míry chyb. Test selže, pokud je splněna alespoň jedna z těchto podmínek:

    • Agregovaná průměrná doba odezvy je delší než 100 ms.
    • Agregované procento chyb je větší než 20 %.
  3. Potvrďte změny a nasdílejte je do hlavní větve úložiště.

    Změny aktivují pracovní postup CI/CD.

  4. Po dokončení testu si všimněte, že spuštění kanálu CI/CD selhalo.

    Ve výstupním protokolu CI/CD zjistíte, že test selhal, protože bylo splněno jedno z kritérií selhání. Průměrná doba odezvy zátěžového testu byla vyšší než hodnota zadaná v kritériích selhání.

    Snímek obrazovky znázorňující protokoly kanálu po neúspěšných kritériích testu

    Služba Azure Load Testing vyhodnocuje kritéria během testovacího běhu. Pokud některá z těchto podmínek selže, služba Azure Load Testing vrátí nenulový ukončovací kód. Tento kód informuje pracovní postup CI/CD o tom, že test selhal.

  5. Upravte soubor SampleApp.yml a změňte kritéria selhání testu, abyste zvýšili kritérium pro průměrnou dobu odezvy:

    failureCriteria: 
        - avg(response_time_ms) > 5000
        - percentage(error) > 20
    
  6. Potvrďte změny, které znovu aktivují pracovní postup CI/CD.

    Po dokončení testu si všimnete, že se zátěžový test a pracovní postup CI/CD úspěšně dokončily.

Vyčištění prostředků

Důležité

Prostředek Azure Load Testing, který jste vytvořili, můžete znovu použít pro další kurzy a články s postupy pro Azure Load Testing.

Pokud žádný z prostředků, které jste vytvořili, neplánujete používat, odstraňte je, aby se vám neúčtovaly žádné další poplatky. Pokud jste nasadili ukázkovou aplikaci v jiné skupině prostředků, můžete zopakovat následující kroky.

Odstranění prostředků pomocí Azure Portal:

  1. V levém horním rohu vyberte tlačítko nabídky a pak vyberte Skupiny prostředků.

  2. V seznamu vyberte skupinu prostředků, kterou jste vytvořili.

  3. Vyberte Odstranit skupinu prostředků. Snímek obrazovky s výběry k odstranění skupiny prostředků na portálu Azure Portal.

  4. Zadejte název skupiny prostředků. Vyberte Odstranit.

Pokud chcete odstranit prostředky pomocí Azure CLI, zadejte následující příkaz:

az group delete --name <yourresourcegroup>

Nezapomeňte, že odstraněním skupiny prostředků odstraníte všechny prostředky v ní.

Další kroky

Právě jste vytvořili pracovní postup CI/CD, který pomocí služby Azure Load Testing automatizuje spouštění zátěžových testů. Pomocí kritérií selhání zátěžového testu můžete nastavit stav pracovního postupu CI/CD a rychle identifikovat snížení výkonu a chování aplikace.