تمرين - تشغيل اختبارات التحميل في Azure Pipelines
في هذا القسم، ستقوم بتشغيل خطة الاختبار التي قمت بإنشائها في مسار الإصدار. تستخدم خطة الاختبار Apache JMeter لتشغيل اختبارات التحميل.
إليك كيفية إجراء الاختبارات:
- قم بإحضار فرع Git الذي ينفذ الاختبارات وتحقق منه.
- قم بتعديل البنية الأساسية لبرنامج ربط العمليات التجارية لتثبيت JMeter، وتشغيل خطة الاختبار، وتحويل النتائج إلى JUnit، ونشر النتائج إلى Azure Pipelines.
- ادفع فرعك إلى GitHub، وشاهد الاختبارات التي يتم تشغيلها في Azure Pipelines، ثم افحص النتائج.
إحضار الفرع من GitHub
في هذا القسم، ستقوم بإحضار jmeter
الفرع من GitHub وسحب هذا الفرع أو التبديل إليه.
يحتوي هذا الفرع على مشروع Space Game الذي عملت معه في الوحدات النمطية السابقة. كما يحتوي على تكوين Azure Pipelines للبدء به.
في Visual Studio Code، افتح المحطة الطرفية المتكاملة.
لتنزيل فرع يسمى
jmeter
من مستودع Microsoft والتبديل إلى هذا الفرع، قم بتشغيلgit fetch
الأوامر التالية:git checkout
git fetch upstream jmeter git checkout -B jmeter upstream/jmeter
تذكر أن المصدر يشير إلى مستودع Microsoft GitHub. يفهم تكوين Git الخاص بمشروعك جهاز التحكم عن بعد المصدر لأنك قمت بإعداد هذه العلاقة عند نسخ المشروع من مستودع Microsoft واستنساخه محليا.
قريبا، ستدفع هذا الفرع إلى مستودع GitHub الخاص بك، والمعروف باسم
origin
.اختياريا، في Visual Studio Code، افتح ملف azure-pipelines.yml . راجع التكوين الأولي.
يشبه التكوين تلك التي قمت بإنشائها في الوحدات النمطية السابقة في مسار التعلم هذا. يقوم بإنشاء تكوين إصدار التطبيق فقط. للإيجاز، فإنه يحذف المشغلات والموافقات اليدوية والاختبارات التي قمت بإعدادها في الوحدات النمطية السابقة.
إشعار
قد يحدد التكوين الأكثر قوة الفروع التي تشارك في عملية الإنشاء. على سبيل المثال، للمساعدة في التحقق من جودة التعليمات البرمجية، يمكنك تشغيل اختبارات الوحدة في كل مرة تقوم فيها بدفع تغيير على أي فرع. يمكنك أيضا نشر التطبيق في بيئة تجري اختبارا أكثر شمولا. ولكن يمكنك تنفيذ هذا التوزيع فقط، عندما يكون لديك طلب سحب، أو عندما يكون لديك إصدار المرشح، أو عندما تدمج التعليمة البرمجية في أخرى رئيسية.
لمزيد من المعلومات، راجع تنفيذ سير عمل التعليمات البرمجية في البنية الأساسية لبرنامج ربط العمليات التجارية للبناء باستخدام مشغلات Git وGitHub و Build pipeline.
اختياريا، في Visual Studio Code، يمكنك التحقق من ملف خطة اختبار JMeter، LoadTest.jmx، وتحويل XLST، JMeter2JUnit.xsl. يحول ملف XLST إخراج JMeter إلى JUnit بحيث يمكن ل Azure Pipelines تصور النتائج.
إضافة متغيرات إلى Azure Pipelines
توفر خطة الاختبار الأصلية للفريق قيمة ذات تعليمات برمجية مضمنة لاسم مضيف موقع Space Game على الويب الذي يعمل في بيئة التشغيل المرحلي .
لجعل خطة الاختبار أكثر مرونة، يستخدم الإصدار الخاص بك خاصية JMeter. فكر في خاصية كمتغير يمكنك تعيينه من سطر الأوامر.
إليك كيفية hostname
تعريف المتغير في JMeter:
إليك كيفية استخدام المتغير hostname
دالة __P لقراءة المتغير hostname
.
يحدد ملف خطة الاختبار المقابل LoadTest.jmx هذا المتغير ويستخدمه لتعيين اسم المضيف.
عند تشغيل JMeter من سطر الأوامر، يمكنك استخدام الوسيطة -J
لتعيين الخاصية hostname
. إليك مثال:
apache-jmeter-5.4.3/bin/./jmeter -n -t LoadTest.jmx -o Results.xml -Jhostname=tailspin-space-game-web-staging-1234.azurewebsites.net
هنا، يمكنك تعيين STAGING_HOSTNAME
المتغير في Azure Pipelines. يشير هذا المتغير إلى اسم مضيف موقعك الذي يتم تشغيله على App Service في بيئة التقسيم المرحلي. يمكنك أيضا تعيين jmeterVersion
لتحديد إصدار JMeter لتثبيته.
عند تشغيل العامل، يتم تصدير هذه المتغيرات تلقائيا إلى العامل كمتغيرات بيئة، بحيث يمكن لتكوين البنية الأساسية لبرنامج ربط العمليات التجارية تشغيل JMeter بهذه الطريقة:
apache-jmeter-5.4.3/bin/./jmeter -n -t LoadTest.jmx -o Results.xml -Jhostname=$(STAGING_HOSTNAME)
دعونا نضيف متغيرات البنية الأساسية لبرنامج ربط العمليات التجارية الآن، قبل تحديث تكوين البنية الأساسية لبرنامج ربط العمليات التجارية. للقيام بذلك:
في Azure DevOps، انتقل إلى مشروع Space Game - web - Nonfunctional tests .
ضمن Pipelines، حدد Library.
حدد مجموعة متغيرات الإصدار.
ضمن المتغيرات، حدد + إضافة.
للحصول على اسم المتغير الخاص بك، أدخل STAGING_HOSTNAME. بالنسبة لقيمته، أدخل عنوان URL لمثيل App Service الذي يتوافق مع بيئة التشغيل المرحلي، مثل tailspin-space-game-web-staging-1234.azurewebsites.net.
هام
لا تقم بتضمين
http://
بادئة البروتوكول أوhttps://
في القيمة الخاصة بك. يوفر JMeter البروتوكول عند تشغيل الاختبارات.أضف متغيرا ثانيا باسم jmeterVersion. للحصول على قيمته، حدد 5.4.3.
إشعار
هذا هو إصدار JMeter الذي استخدمناه مؤخرا لاختبار هذه الوحدة النمطية. للحصول على أحدث إصدار، راجع تنزيل Apache JMeter.
لحفظ المتغير الخاص بك إلى المسار، حدد Save بالقرب من أعلى الصفحة.
تشبه مجموعة المتغيرات الخاصة بك المجموعة الموضحة في الصورة التالية:
تعديل تكوين البنية الأساسية لبرنامج ربط العمليات التجارية
في هذا القسم، ستقوم بتعديل البنية الأساسية لبرنامج ربط العمليات التجارية لتشغيل اختبارات التحميل أثناء مرحلة التقسيم المرحلي .
في Visual Studio Code، افتح ملف azure-pipelines.yml . ثم قم بتعديل الملف كما يلي:
تلميح
يمكنك استبدال الملف بأكمله أو تحديث الجزء المميز فقط.
trigger: - '*' variables: buildConfiguration: 'Release' stages: - stage: 'Build' displayName: 'Build the web application' jobs: - job: 'Build' displayName: 'Build job' pool: vmImage: 'ubuntu-20.04' demands: - npm variables: wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '6.x' steps: - task: UseDotNet@2 displayName: 'Use .NET SDK $(dotnetSdkVersion)' inputs: version: '$(dotnetSdkVersion)' - task: Npm@1 displayName: 'Run npm install' inputs: verbose: false - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)' displayName: 'Compile Sass assets' - task: gulp@1 displayName: 'Run gulp tasks' - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt' displayName: 'Write build info' workingDirectory: $(wwwrootDir) - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Build the project - $(buildConfiguration)' inputs: command: 'build' arguments: '--no-restore --configuration $(buildConfiguration)' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true - publish: '$(Build.ArtifactStagingDirectory)' artifact: drop - stage: 'Dev' displayName: 'Deploy to the dev environment' dependsOn: Build jobs: - deployment: Deploy pool: vmImage: 'ubuntu-20.04' environment: dev variables: - group: Release strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: website' inputs: azureSubscription: 'Resource Manager - Tailspin - Space Game' appName: '$(WebAppNameDev)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip' - stage: 'Test' displayName: 'Deploy to the test environment' dependsOn: Dev jobs: - deployment: Deploy pool: vmImage: 'ubuntu-20.04' environment: test variables: - group: 'Release' strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: website' inputs: azureSubscription: 'Resource Manager - Tailspin - Space Game' appName: '$(WebAppNameTest)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip' - stage: 'Staging' displayName: 'Deploy to the staging environment' dependsOn: Test jobs: - deployment: Deploy pool: vmImage: 'ubuntu-20.04' environment: staging variables: - group: 'Release' strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: website' inputs: azureSubscription: 'Resource Manager - Tailspin - Space Game' appName: '$(WebAppNameStaging)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip' - job: RunLoadTests dependsOn: Deploy displayName: 'Run load tests' pool: vmImage: 'ubuntu-20.04' variables: - group: Release steps: - script: | wget -c archive.apache.org/dist/jmeter/binaries/apache-jmeter-$(jmeterVersion).tgz tar -xzf apache-jmeter-$(jmeterVersion).tgz displayName: 'Install Apache JMeter' - script: apache-jmeter-$(jmeterVersion)/bin/./jmeter -n -t LoadTest.jmx -o Results.xml -Jhostname=$(STAGING_HOSTNAME) displayName: 'Run Load tests' - script: | sudo apt-get update sudo apt-get install xsltproc xsltproc JMeter2JUnit.xsl Results.xml > JUnit.xml displayName: 'Transform JMeter output to JUnit' - task: PublishTestResults@2 inputs: testResultsFormat: JUnit testResultsFiles: JUnit.xml
فيما يلي ملخص للتغييرات:
- تقوم
RunLoadTests
المهمة بتحميل الاختبار من عامل Linux. RunLoadTests
تعتمد الوظيفة علىDeploy
الوظيفة للتأكد من تشغيل الوظائف بالترتيب الصحيح. تحتاج إلى نشر موقع الويب إلى App Service قبل أن تتمكن من تشغيل اختبارات التحميل. إذا لم تحدد هذه التبعية، يمكن تشغيل المهام داخل المرحلة بأي ترتيب أو تشغيل بالتوازي.- المهمة الأولى
script
تنزل وتثبت JMeter.jmeterVersion
يحدد متغير البنية الأساسية لبرنامج ربط العمليات التجارية إصدار JMeter المراد تثبيته. - تشغل المهمة الثانية
script
JMeter. تعين-J
الوسيطة الخاصيةhostname
في JMeter عن طريق قراءةSTAGING_HOSTNAME
المتغير من البنية الأساسية لبرنامج ربط العمليات التجارية. - تعمل المهمة الثالثة
script
على تثبيت xsltproc، وهو معالج XSLT، وتحويل ناتج JMeter إلى JUnit. - تنشر المهمة
PublishTestResults@2
تقرير JUnit الناتج، JUnit.xml، إلى Pipeline. يمكن أن تساعدك Azure Pipelines في تصور نتائج الاختبار.
- تقوم
في الوحدة الطرفية المتكاملة، أضف azure-pipelines.yml إلى الفهرس، وقم بتثبيت التغييرات، وادفع الفرع إلى GitHub.
git add azure-pipelines.yml git commit -m "Run load tests with Apache JMeter" git push origin jmeter
شاهد Azure Pipelines تقوم بتشغيل الاختبارات
هنا، ستشاهد تشغيل البنية الأساسية لبرنامج ربط العمليات التجارية. سترى اختبارات التحميل يتم تشغيلها أثناء التقسيم المرحلي.
في Azure Pipelines، انتقل إلى البنية وتتبعها أثناء تشغيلها.
أثناء التقسيم المرحلي، ترى اختبارات التحميل يتم تشغيلها بعد نشر موقع الويب.
بعد انتهاء البناء، انتقل إلى صفحة الملخص.
ترى أن عملية النشر واختبارات التحميل قد انتهت بنجاح.
بالقرب من أعلى الصفحة، لاحظ الملخص.
ترى أن البيانات الاصطناعية للبناء لموقع Space Game يتم نشرها تماما كما هو الحال دائما. لاحظ أيضا قسم الاختبارات والتغطية ، الذي يظهر أن اختبارات التحميل قد اجتازت.
حدد ملخص الاختبار لمشاهدة التقرير الكامل.
يوضح التقرير أن كلا الاختبارين قد اجتازا.
إذا فشل أي اختبار، فسترى نتائج مفصلة للفشل. من هذه النتائج، يمكنك التحقق من مصدر الفشل.
تذكر أن ملف XSLT ينتج ملف JUnit يسمى JUnit.xml. يجيب ملف JUnit على هذين السؤالين:
- هل متوسط وقت الطلب أقل من ثانية واحدة؟
- هل يستغرق إكمال أقل من 10 بالمائة من الطلبات أكثر من ثانية واحدة؟
ويثبت التقرير استيفاء هذه المتطلبات. للاطلاع على مزيد من التفاصيل، حدد سهم النتائج في التقرير. ثم تأكد من تحديد تمرير فقط.
ترى أن حالتي اختبار متوسط وقت الاستجابة ووقت الاستجابة الأقصى قد نجحتا.
إشعار
أنت تستخدم خطة خدمة تطبيقات B1 ، التي تعمل على المستوى الأساسي . هذه الخطة مخصصة للتطبيقات ذات متطلبات نسبة استخدام الشبكة المنخفضة، مثل التطبيقات في بيئة الاختبار. وبسبب هذه الخطة، قد يكون أداء موقعك على الويب أقل مما تتوقع. في الممارسة العملية، يمكنك اختيار خطة لبيئة التقسيم المرحلي التي تتطابق بشكل وثيق مع بيئة الإنتاج الخاصة بك. على سبيل المثال، خطط Standard وPremium مخصصة لأحمال عمل الإنتاج. يتم تشغيل هذه على مثيلات الجهاز الظاهري المخصصة.