Öğretici: GitHub Actions ve Azure Load Testing Preview ile performans regresyonlarını belirleme

Bu öğreticide, Azure Load Testing Preview ve GitHub Actions ile performans regresyon testlerini otomatikleştirmeyi öğrenirsiniz. Örnek bir web uygulaması için yük testi GitHub ve ardından sonuçları kullanarak performans regresyonlarını tanımlamak için bir GitHub Actions CI/CD iş akışı yapılandırabilirsiniz.

Önemli

Azure Load Testing'e ilişkin GitHub bilinen bir sorun vardır ve bu da GitHub Actions iş akışınız başarısız olur. En son durum güncelleştirmesi için Azure Load Testing bilinen sorunlarını kontrol edin.

CI/CD iş akışlarınız için Azure Pipelines kullanıyorsanız, ilgili Azure Pipelines bakın.

Şunları öğrenirsiniz:

  • Depoyu yük testi için gereken dosyalarla ayarlayın.
  • Azure Yük testiyle GitHub için bir iş akışı ayarlayın.
  • Yük testini çalıştırın ve iş akışında sonuçları görüntüleme.
  • Eşiklere göre yük testinin geçeceği veya başarısız olduğu test ölçütlerini tanımlayın.
  • Gizli dizileri kullanarak bir yük GitHub parametreleştirme.

Önemli

Azure Load Testing şu anda ÖNIZLE aşamasındadır. Beta veya önizleme aşamasında olan ya da başka bir şekilde henüz genel kullanıma sunulmamış olan Azure özelliklerinde geçerli olan yasal koşullar için bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları.

Önkoşullar

Depoyu ayarlama

İlk olarak, örnek web uygulamasıyla GitHub bir depoya ihtiyacınız vardır. Ardından bu depoyu kullanarak yük testini çalıştırmak için GitHub Eylem iş akışını yapılandırabilirsiniz.

  1. Bir tarayıcı açın ve örnek uygulamanın kaynak veri GitHub gidin:https://github.com/Azure-Samples/nodejs-appsvc-cosmosdb-bottleneck.git

    Örnek uygulama, Node.js web bileşeni ve Azure App Service DB veritabanından oluşan bir Cosmos uygulamasıdır.

  2. Örnek uygulama deposunu GitHub hesabınızla yapmak için GitHub seçin.

    Örnek uygulamanın bir GitHub görüntüsü.

Apache JMeter betiği yapılandırma

Örnek uygulamanın kaynak repo, SampleApp.jmx adlı bir Apache JMeter betiği içerir. Bu betik, her test yinelemesi üzerinde üç API çağrısı yürüter:

  • add- Web uygulaması üzerinde ziyaretçi sayısı için Cosmos DB üzerinde bir veri ekleme işlemi yürüten.
  • get- S sayımı almak için Cosmos VERITABANıNDAn bir GET işlemi yürüten.
  • lasttimestamp - Son kullanıcı web sitesine gittikleri zamandan bu yana zaman damgasını günceller.

Bu bölümde Apache JMeter betiği, örnek web uygulamanın URL'si ile güncelleştirilmektedir.

  1. Örnek uygulama deponda, düzenlemek için SampleApp.jmx'i açın.

    JMeter test betiği düzenlemeyi gösteren ekran görüntüsü.

  2. <stringProp name="HTTPSampler.domain"> arayın.

    Dosyasında üç <stringProp name="HTTPSampler.domain"> örneği vardır.

  3. değerini, üç örnekte de örnek uygulamanıza App Service URL'si ile değiştirin.

    <stringProp name="HTTPSampler.domain">{your-app-name}.azurewebsites.net</stringProp>
    

    Sonraki adımlarda GitHub Actions iş akışını kullanarak örnek uygulamayı Azure App Service web uygulamasına dağıtın. Şimdilik, önceki XML kod parçacığında yer tutucu metnini web uygulamasına sağlamak istediğiniz {your-app-name} benzersiz App Service değiştirin. Ardından bu adı kullanarak web uygulamasını oluşturabilirsiniz.

    Önemli

    Örnek uygulamanın https http URL'sini dahil etme veya bu URL'ye dahil etme.

  4. Değişikliklerinizi ana dala işle.

Azure için GitHub izinlerini ayarlama

Bu bölümde, Azure Load Testing kaynağına GitHub izinlere sahip olacak şekilde GitHub depoyu yapılandıracaksınız.

Azure kaynaklarına erişmek için bir hizmet sorumlusu Azure Active Directory ve gerekli izinleri atamak için rol tabanlı erişim denetimi kullanacağız.

  1. Hizmet sorumlusu oluşturmak için aşağıdaki Azure CLI komutunu çalıştırın:

    az ad sp create-for-rbac --name "my-load-test-cicd" --role contributor \
                             --scopes /subscriptions/<subscription-id> \
                             --sdk-auth
    

    Önceki komutta yer tutucu metnini <subscription-id> Azure Load Testing kaynağınıza bağlı Azure abonelik kimliğiyle değiştirin.

    Azure CLI komutunun sonucu bir JSON dizesidir. Bu dizeyi sonraki bir adımda GitHub gizli dizilerinize ekleyebilirsiniz.

    {
      "clientId": "<my-client-id>",
      "clientSecret": "<my-client-secret>",
      "subscriptionId": "<my-subscription-id>",
      "tenantId": "<my-tenant-id>",
      (...)
    }
    
  2. Depoda yer alan örnek uygulamanıza GitHub gidin.

  3. Gizli Diziler Yeni depo gizli GitHub'ı seçerek Ayarlar > > gizli dizi ekleyin.

    Depoya yeni bir depo gizli dizi eklemeyi gösteren GitHub görüntüsü.

  4. Ad için AZURE_CREDENTIALS girin, değeri için Azure CLI'dan JSON yanıtını yapıştırın ve Gizli değer ekle'yi seçin.

    Yeni depo gizli GitHub gösteren ekran görüntüsü.

  5. Hizmet sorumlusuna Azure Load Testing hizmetine erişim yetkisi vermek için hizmet sorumlusuna Yük Testi Katkıda Bulunanı rolünü attayın.

    İlk olarak, şu Azure CLI komutunu çalıştırarak hizmet sorumlusu nesne kimliğini alın:

    az ad sp list --filter "displayname eq 'my-load-test-cicd'" -o table
    

    Ardından Yük Testi Katkıda Bulunanı rolünü hizmet sorumlusuna attayabilirsiniz. Yer tutucu metnini <sp-object-id> önceki Azure CLI komutundan ObjectId değeriyle değiştirin. Ayrıca, yerine <subscription-name-or-id> Azure abonelik kimliğinizi girin.

    az role assignment create --assignee "<sp-object-id>" \
        --role "Load Test Contributor" \
        --subscription "<subscription-name-or-id>"
    

GitHub Actions iş akışını yük testi çalıştıracak şekilde yapılandırma

Bu bölümde, yük testini tetikleyen GitHub Actions iş akışı ayarlayabilirsiniz.

Ci/CD iş akışından Azure Load Testing ile test çalıştırmak için bir yük testi YAML yapılandırma dosyası gerekir. Örnek uygulama deposu, testi çalıştırma parametrelerini içeren SampleApp.yaml dosyasını içerir.

  1. Örnek uygulama deponda .github/workflows/workflow.yml GitHub Actions iş akışı dosyasını açın.

  2. Dosyasını düzenleyin ve aşağıdaki yer tutucu metinleri değiştirin.

    Yer tutucu Değer
    <your-azure-web-app> Web Azure App Service adı. Bu ad, SampleApp.jmx test betiğinde uç nokta URL'si için kullanılan adla eşleşmeli.
    <your-azure-load-testing-resource-name> Azure Load Testing kaynağınız adı.
    <your-azure-load-testing-resource-group-name> Azure Load Testing kaynağını içeren kaynak grubu adı.

    Önemli

    Azure web uygulamasının adı SampleApp.jmx test betiğinde uç nokta URL'si için kullanılan adla eşleşmeli.

    env:
      AZURE_WEBAPP_NAME: "<your-azure-web-app>"
      LOAD_TEST_RESOURCE: "<your-azure-load-testing-resource-name>"
      LOAD_TEST_RESOURCE_GROUP: "<your-azure-load-testing-resource-group-name>"
    
  3. Değişikliklerinizi doğrudan ana dala işle.

    GitHub Actions iş akışı dosyasına nasıl GitHub gösteren ekran görüntüsü.

    Commit, depo GitHub Actions iş akışını tetikler. Eylemler sekmesine giderek iş akışının çalıştığını doğruleyebilirsiniz.

Yük testi sonuçlarını görüntüleme

GitHub Actions iş akışı, ana dala yapılan her güncelleştirme için aşağıdaki adımları yürütür:

  • Örnek uygulama Node.js Azure App Services web uygulamasına dağıtın. Web uygulamasının adı iş akışı dosyasında yapılandırılır.
  • Apache JMeter betiğine ve depoda test yapılandırması YAML dosyasına göre yük testi oluşturmak ve çalıştırmak için Azure Load Testing'i tetikler.

Bu bölümde, yük testi sonuçlarını GitHub Actions iş akışı günlüğünde görüntüleyebilirsiniz.

  1. İş akışı çalıştırmalarının listesini görüntülemek GitHub depoda Eylemler sekmesini seçin.

    Eylemler iş akışı çalıştırmalarının GitHub ekran görüntüsü.

  2. Çalıştırma ayrıntılarına ve günlük bilgilerine gitmek için listeden iş akışı çalıştırmayı seçin.

    İş akışı günlük bilgilerini gösteren ekran görüntüsü.

    Yük testi tamam olduktan sonra, iş akışı günlüklerinde test özeti bilgilerini ve istemci tarafı ölçümlerini görüntüleyebilirsiniz. Günlük ayrıca bu yük testi için Azure Load Testing panosuna gitmek için gereken adımları da gösterir.

  3. İş akışı çalıştırma ayrıntıları ekranında loadTestResults yapıtını seçerek yük testi sonuç dosyalarını indirin.

    İş akışı çalıştırması yapıtlarını gösteren ekran görüntüsü.

Test başarılı/başarısız ölçütlerini tanımlama

Bu bölümde, yük testinin sonucunu belirlemek için hata ölçütleri ekleyebilirsiniz. Hata ölçütlerinin en az biri doğru olarak değerlendirilirse yük testi başarısız olur.

Bu ölçütleri test yapılandırması YAML dosyasında belirtebilirsiniz.

  1. SampleApp.yml dosyasını depoda GitHub düzenleyin.

  2. Dosyanın sonuna aşağıdaki kod parçacığını ekleyin.

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

    Artık yük testiniz için hata ölçütlerini belirttiniz. Bu koşullardan en az biri karşılandığında test başarısız olur:

    • Toplam ortalama yanıt süresi 100 ms 'den büyük.
    • Hataların toplam yüzdesi %20 ' den fazla.
  3. Değişiklikleri işleyin ve deponun ana dalına gönderin.

    değişiklikler GitHub eylemleri cı/CD iş akışını tetikler.

  4. Eylemler sekmesini seçin ve sonra iş akışı günlüklerini görüntülemek için en son iş akışı çalıştırmasını seçin.

    Başarısız iş akışı çıkış günlüğünü gösteren ekran görüntüsü.

    Yük testi tamamlandıktan sonra, ortalama yanıt süresi başarısızlık ölçütlerinde belirtenden daha yüksek olduğu için iş akışının başarısız olduğunu fark edeceksiniz.

    Azure Yük Testi Hizmeti, test yürütmesi sırasında ölçütleri değerlendirir. Bu koşullardan herhangi biri başarısız olursa, Azure Yük testi hizmeti sıfır olmayan bir çıkış kodu döndürür. Bu kod, testin başarısız olduğu CI/CD iş akışını bilgilendirir.

  5. SampleApp. yıml dosyasını düzenleyin ve test hatası ölçütlerini değiştirin.

    failureCriteria: 
    - avg(response_time_ms) > 5000
    - percentage(error) > 20
    
  6. GitHub eylemler iş akışını tetiklemek için değişiklikleri işleyin.

    Başarılı iş akışı çıkış günlüğünü gösteren ekran görüntüsü.

    Yük testi artık başarılı oldu ve iş akışı başarıyla bitiyor.

İş akışından yük testlerinize parametreler geçirin

Sonra, iş akışı değişkenlerini kullanarak yük testinizi parametreleştirebilirsiniz. Bu parametreler, parolalar veya gizli olmayan parolalar gibi gizli dizi olabilir.

Bu öğreticide, örnek uygulamayı yalnızca güvenli istekleri kabul edecek şekilde yeniden yapılandıracaksınız. Güvenli bir istek göndermek için HTTP isteğinde gizli bir değer geçirmeniz gerekir.

  1. GitHub deponuzdaki sampleapp. yaml dosyasını düzenleyin.

    TestPlan yapılandırma ayarını SampleApp_Secrets. JMX dosyasını kullanacak şekilde güncelleştirin.

    version: v0.1
    testName: SampleApp
    testPlan: SampleApp_Secrets.jmx
    description: 'SampleApp Test with secrets'
    engineInstances: 1
    

    SampleApp_Secrets. JMX Apache JMeter betiği, özel işlevle gizli değeri alan Kullanıcı tanımlı bir değişken kullanır ${__GetSecret(secretName)} . Apache JMeter daha sonra bu gizli değeri örnek uygulama uç noktasına geçirir.

  2. Değişiklikleri YAML dosyasına işleyin.

  3. GitHub deponuzdaki config. json dosyasını düzenleyin.

    enableSecretsFeatureÖrnek uygulamayı yalnızca güvenli istekleri kabul edecek şekilde yeniden yapılandırmak için ayarı true olarak güncelleştirin.

    {
        "enableSecretsFeature": true
    }
    
  4. Değişiklikleri config. JSON dosyasına kaydedin.

  5. SampleApp_Secrets. JMX dosyasını düzenleyin.

  6. <stringProp name="HTTPSampler.domain"> arayın.

    Dosyada üç örnek görürsünüz <stringProp name="HTTPSampler.domain"> .

  7. Değeri, her üç örnekteki örnek uygulamanızın App Service URL 'siyle değiştirin.

    <stringProp name="HTTPSampler.domain">{your-app-name}.azurewebsites.net</stringProp>
    

    sonraki adımlarda GitHub eylemler iş akışını kullanarak güvenli örnek uygulamayı bir Azure App Service web uygulamasına dağıtırsınız. Önceki XML kod parçacığında, yer tutucu metnini {your-app-name} App Service Web uygulamasının benzersiz adıyla değiştirin. Daha sonra, bu adı Web uygulamasını oluşturmak için kullanacaksınız.

    Önemli

    https http Örnek uygulamanın URL 'sini eklemeyin.

  8. Apache JMeter betiğini kaydedin ve işleyin.

  9. Ayarlar > gizli dizileri > yeni depo gizli anahtarını seçerek GitHub deponuza yeni bir gizli dizi ekleyin.

  10. Ad için MY_SECRET ve değer için 1797669089 girin ve ardından gizli dizi Ekle' yi seçin.

    JMeter betiğine kullanılan depo gizliliğini gösteren ekran görüntüsü.

  11. Gizli anahtarı yük testine geçirmek için . GitHub/iş akışları/Workflow. yıml dosyasını düzenleyin.

    Aşağıdaki YAML kod parçacığını ekleyerek Azure Yük testi işlemini düzenleyin.

    secrets: |
      [
          {
          "name": "appToken",
          "value": "${{ secrets.MY_SECRET }}"
          }
      ]
    
  12. GitHub Actions iş akışını tetikleyen değişiklikleri işleyin.

    Azure Yük testi görevi, depo gizliliğini iş akışından test motoruna güvenli bir şekilde geçirir. Gizli parametresi yalnızca yük testi çalıştırılırken kullanılır ve ardından değeri bellekten atılır.

Azure Yük testi eylemi

bu bölümde Azure yük testi GitHub eylemi açıklanmaktadır. Bu eylemi, azure/load-testing@v1 iş akışınızda eyleme başvurarak kullanabilirsiniz. eylem Windows, Linux ve Mac çalıştıranlar üzerinde çalışır.

GitHub eylemini yapılandırmak için aşağıdaki parametreleri kullanabilirsiniz.

Parametre Açıklama
loadTestConfigFile Gerekli Yük testi YAML yapılandırma dosyasının yolu. Yol, varsayılan çalışma dizinine tam veya göreli olarak belirlenir.
resourceGroup Gerekli Azure Yük testi kaynağını içeren kaynak grubunun adı.
loadTestResource Gerekli Mevcut bir Azure Yük testi kaynağının adı.
secrets Her gizli anahtar için ad ve değerden oluşan JSON nesneleri dizisi. Ad, Apache JMeter test komut dosyasında kullanılan gizli adla eşleşmelidir.
env Her ortam değişkeni için ad ve değerden oluşan JSON nesneleri dizisi. Ad, Apache JMeter test komut dosyasında kullanılan değişken adıyla eşleşmelidir.

aşağıdaki yaml kod parçacığı, GitHub eylemler iş akışında eylemin nasıl kullanılacağını açıklar.

- name: 'Azure Load Testing'
  uses: azure/load-testing@v1
  with:
    loadTestConfigFile: '< YAML File path>'
    loadTestResource: '<name of the load test resource>'
    resourceGroup: '<name of the resource group of your load test resource>' 
    secrets: |
      [
          {
          "name": "<Name of the secret>",
          "value": "${{ secrets.MY_SECRET1 }}",
          },
          {
          "name": "<Name of the secret>",
          "value": "${{ secrets.MY_SECRET2 }}",
          }
      ]
    env: |
      [
          {
          "name": "<Name of the variable>",
          "value": "<Value of the variable>",
          },
          {
          "name": "<Name of the variable>",
          "value": "<Value of the variable>",
          }
      ]

Kaynakları temizleme

Önemli

Oluşturduğunuz kaynakları diğer Azure Load Testing öğreticileri ve nasıl oluşturulduğunda makalelerde önkoşul olarak kullanabilirsiniz.

Oluşturduğunuz kaynaklardan herhangi birini kullanmayı planlasanız, ek ücret ödemeden bunları silin.

  • Azure portalında:

    1. Sol üst köşedeki menü düğmesini ve ardından Kaynak grupları'ı seçin.

    2. Listeden oluşturduğunuz kaynak grubunu seçin.

    3. Kaynak grubunu sil'i seçin.

      Azure portalda kaynak grubu silmek için yapılan seçimlerin ekran görüntüsü.

    4. Kaynak grubu adını girin. Ardından Sil’i seçin.

  • Alternatif olarak, Azure CLI'sini kullanabilirsiniz.

    az group delete --name <yourresourcegroup>
    

    Kaynak grubunun silinmesinin içindeki tüm kaynakların silinecek olduğunu unutmayın.

Sonraki adımlar

artık yük testlerini otomatik olarak çalıştırmak için Azure yük testi kullanan bir GitHub eylemleri iş akışı oluşturdunuz. Pass/Fail ölçütlerini kullanarak CI/CD iş akışının durumunu belirleyebilirsiniz. Parametrelerle, yük testi yürütmesini yapılandırılabilir hale getirebilirsiniz.