Öğ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
- Etkin aboneliği olan bir Azure hesabı. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
- Depo GitHub bir hesaptır. Microsoft hesabınız yoksa ücretsiz olarak oluşturabilirsiniz.
- Mevcut bir Azure Load Testing kaynağı. Yük Testi kaynağı oluşturmak için bkz. Yük testi oluşturma ve çalıştırma.
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.
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.
Örnek uygulama deposunu GitHub hesabınızla yapmak için GitHub seçin.
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.
Örnek uygulama deponda, düzenlemek için SampleApp.jmx'i açın.
<stringProp name="HTTPSampler.domain">arayın.Dosyasında üç
<stringProp name="HTTPSampler.domain">örneği vardır.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
httpshttpURL'sini dahil etme veya bu URL'ye dahil etme.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.
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>", (...) }Depoda yer alan örnek uygulamanıza GitHub gidin.
Gizli Diziler Yeni depo gizli GitHub'ı seçerek Ayarlar > > gizli dizi ekleyin.
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.
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 tableArdı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.
Örnek uygulama deponda .github/workflows/workflow.yml GitHub Actions iş akışı dosyasını açın.
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>"Değişikliklerinizi doğrudan ana dala işle.
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.
İş akışı çalıştırmalarının listesini görüntülemek GitHub depoda Eylemler sekmesini seçin.
Çalıştırma ayrıntılarına ve günlük bilgilerine gitmek için listeden iş akışı çalıştırmayı seçin.
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.
İş akışı çalıştırma ayrıntıları ekranında loadTestResults yapıtını seçerek yük testi sonuç dosyalarını indirin.
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.
SampleApp.yml dosyasını depoda GitHub düzenleyin.
Dosyanın sonuna aşağıdaki kod parçacığını ekleyin.
failureCriteria: - avg(response_time_ms) > 100 - percentage(error) > 20Artı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.
Değişiklikleri işleyin ve deponun ana dalına gönderin.
değişiklikler GitHub eylemleri cı/CD iş akışını tetikler.
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.
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.
SampleApp. yıml dosyasını düzenleyin ve test hatası ölçütlerini değiştirin.
failureCriteria: - avg(response_time_ms) > 5000 - percentage(error) > 20GitHub eylemler iş akışını tetiklemek için değişiklikleri işleyin.
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.
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: 1SampleApp_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.Değişiklikleri YAML dosyasına işleyin.
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 }Değişiklikleri config. JSON dosyasına kaydedin.
SampleApp_Secrets. JMX dosyasını düzenleyin.
<stringProp name="HTTPSampler.domain">arayın.Dosyada üç örnek görürsünüz
<stringProp name="HTTPSampler.domain">.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
httpshttpÖrnek uygulamanın URL 'sini eklemeyin.Apache JMeter betiğini kaydedin ve işleyin.
Ayarlar > gizli dizileri > yeni depo gizli anahtarını seçerek GitHub deponuza yeni bir gizli dizi ekleyin.
Ad için MY_SECRET ve değer için 1797669089 girin ve ardından gizli dizi Ekle' yi seçin.
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 }}" } ]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:
Sol üst köşedeki menü düğmesini ve ardından Kaynak grupları'ı seçin.
Listeden oluşturduğunuz kaynak grubunu seçin.
Kaynak grubunu sil'i seçin.

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.
- Yükleme testlerini Parametreleştirme hakkında daha fazla bilgi için bkz. bir yük testini Parametreleştirme.
- Test geçişi/başarısızlık ölçütlerini tanımlama hakkında daha fazla bilgi için bkz. test ölçütlerini tanımlama.