استخدام البيانات السرية ومتغيرات البيئة في اختبار تحميل Azure

في هذه المقالة، ستتعلم كيفية تمرير الأسرار والبيئات كمعلمات إلى اختبار تحميل في اختبار تحميل Azure. يمكنك استخدام المعلمات لتغيير سلوك اختبار التحميل دون الحاجة إلى تحرير البرنامج النصي Apache JMeter. على سبيل المثال، لاختبار تطبيق ويب، حدد عنوان URL لنقطة النهاية كمعلمة لإعادة استخدام البرنامج النصي للاختبار عبر بيئات متعددة. يمكنك أيضا استخدام المعلمات لتجنب أن تضطر إلى معلومات حساسة للتعليمات البرمجية الثابتة في البرنامج النصي لاختبار JMeter.

تدعم خدمة Azure Load Testing نوعين من المعلمات:

  • الأسرار: تحتوي على معلومات حساسة ويتم تمريرها بأمان إلى محرك اختبار التحميل. على سبيل المثال، توفر الأسرار بيانات اعتماد خدمة الويب بدلا من ترميزها في البرنامج النصي للاختبار. لمزيد من المعلومات، راجع تكوين اختبارات التحميل باستخدام البيانات السرية.

  • متغيرات البيئة: تحتوي على معلومات غير حساسة وتتوفر كمتغيرات بيئة في محرك اختبار التحميل. على سبيل المثال، متغيرات البيئة تجعل عنوان URL لنقطة نهاية التطبيق قابلا للتكوين. لمزيد من المعلومات، راجع تكوين اختبارات التحميل باستخدام متغيرات البيئة.

يمكنك تحديد معلمات في تكوين اختبار التحميل عند إنشاء اختبار جديد أو تحديث اختبار موجود. إذا قمت بتشغيل اختبار تحميل في سير عمل CI/CD، يمكنك تحديد المعلمات في ملف تكوين اختبار التحميل أو في تعريف سير عمل CI/CD.

المتطلبات الأساسية

  • حساب Azure مع اشتراك نشط. في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.

  • مورد اختبار تحميل Azure. إذا كنت بحاجة إلى إنشاء مورد اختبار تحميل Azure، فشاهد التشغيل السريع إنشاء اختبار تحميل وتشغيله.

تكوين اختبارات التحميل باستخدام البيانات السرية

في هذا القسم، ستتعلم كيفية تمرير الأسرار إلى البرنامج النصي لاختبار التحميل في Azure Load Testing. على سبيل المثال، قد تستخدم سرا لتمرير مفتاح API إلى نقطة نهاية خدمة ويب التي تقوم بتحميل اختبارها. بدلا من تخزين مفتاح API في التكوين أو الترميز المضمن في البرنامج النصي، يمكنك حفظه في مخزن سري للتحكم بإحكام في الوصول إلى البيانات السرية.

يتيح لك اختبار تحميل Azure تخزين الأسرار في Azure Key Vault. بدلا من ذلك، عند تشغيل اختبار التحميل في مسار CI/CD، يمكنك أيضا استخدام المخزن السري المرتبط بتقنية CI/CD، مثل Azure Pipelines أو GitHub Actions.

لاستخدام البيانات السرية مع Azure Load Testing، يمكنك تنفيذ الخطوات التالية:

  1. تخزين القيمة السرية في المخزن السري (Azure Key Vault أو مخزن CI/CD السري).
  2. مرر مرجعا إلى السر في البرنامج النصي لاختبار Apache JMeter.
  3. استخدم القيمة السرية في البرنامج النصي لاختبار Apache JMeter باستخدام الدالة GetSecret المخصصة.

هام

يمكنك استخدام الدالة GetSecret المخصصة فقط عند تشغيل البرنامج النصي لاختبار JMeter باستخدام Azure Load Testing. إذا قمت بتشغيل البرنامج النصي للاختبار محليا، فستحتاج إلى تحديث البرنامج النصي للاختبار وقراءة القيم السرية بطريقة مختلفة.

استخدام Azure Key Vault لتخزين أسرار اختبار التحميل

يمكنك استخدام Azure Key Vault لتمرير القيم السرية إلى البرنامج النصي للاختبار في اختبار تحميل Azure. يمكنك إضافة مرجع إلى السر في تكوين اختبار تحميل Azure. ثم يستخدم اختبار تحميل Azure هذا المرجع لاسترداد القيمة السرية في البرنامج النصي Apache JMeter.

تحتاج أيضا إلى منح Azure Load Testing حق الوصول إلى مخزن مفاتيح Azure لاسترداد القيمة السرية.

إشعار

إذا قمت بتشغيل اختبار تحميل كجزء من عملية CI/CD، فقد تستخدم أيضا المخزن السري ذي الصلة. انتقل إلى استخدام مخزن البيانات السرية CI/CD.

إنشاء سر في Azure Key Vault

  1. أضف القيمة السرية إلى مخزن المفاتيح الخاص بك، إذا لم تكن قد فعلت ذلك بالفعل.

    هام

    إذا قمت بتقييد الوصول إلى مخزن مفاتيح Azure الخاص بك بواسطة جدار حماية أو شبكة ظاهرية، فاتبع هذه الخطوات لمنح الوصول إلى خدمات Azure الموثوق بها.

  2. استرداد المعرف السري لخزنة المفاتيح لسرك. يمكنك استخدام هذا المعرف السري لتكوين اختبار التحميل الخاص بك.

    Screenshot that shows the details of a secret in an Azure key vault.

    المعرف السري هو URI الكامل للسر في مخزن مفاتيح Azure. اختياريا، يمكنك أيضا تضمين رقم إصدار. على سبيل المثال: https://myvault.vault.azure.net/secrets/mysecret/ أو https://myvault.vault.azure.net/secrets/mysecret/abcdef01-2345-6789-0abc-def012345678.

إضافة السر إلى اختبار التحميل الخاص بك

  1. الرجوع إلى السر في تكوين اختبار التحميل.

    يمكنك تعريف معلمة بيانات سرية لاختبار التحميل لكل سر تشير إليه في البرنامج النصي Apache JMeter. يجب أن يتطابق اسم المعلمة مع الاسم السري الذي تستخدمه في البرنامج النصي لاختبار Apache JMeter. قيمة المعلمة هي معرف أمان key vault.

    يمكنك تحديد معلمات سرية عن طريق القيام بأي مما يلي:

    • في مدخل Microsoft Azure، حدد اختبار التحميل، وحدد Configure، وحدد علامة التبويب Parameters ، ثم أدخل تفاصيل المعلمة.

      Screenshot that shows where to add secret details to a load test in the Azure portal.

    • إذا كنت تقوم بتكوين سير عمل CI/CD وتستخدم Azure Key Vault، يمكنك تحديد سر في ملف تكوين YAML باستخدام الخاصية secrets . لمزيد من المعلومات حول بناء الجملة، راجع مرجع تكوين الاختبار YAML.

  2. حدد الهوية التي يستخدمها Azure Load Testing للوصول إلى أسرارك في Azure Key Vault.

    يمكن أن تكون الهوية هي الهوية المعينة من قبل النظام لمورد اختبار التحميل، أو إحدى الهويات المعينة من قبل المستخدم. تأكد من استخدام نفس الهوية التي منحتها حق الوصول مسبقا.

    يمكنك تحديد الهوية المرجعية لمخزن المفاتيح عن طريق القيام بأي مما يلي:

    • في مدخل Microsoft Azure، حدد اختبار التحميل، وحدد Configure، وحدد علامة التبويب Parameters ، ثم قم بتكوين الهوية المرجعية ل Key Vault.

      Screenshot that shows how to select key vault reference identity.

    • إذا كنت تقوم بتكوين سير عمل CI/CD وتستخدم Azure Key Vault، يمكنك تحديد الهوية المرجعية في ملف تكوين YAML باستخدام الخاصية keyVaultReferenceIdentity . لمزيد من المعلومات حول بناء الجملة، راجع مرجع تكوين الاختبار YAML.

منح حق الوصول إلى مخزن مفاتيح Azure

عند تخزين أسرار اختبار التحميل أو الشهادات في Azure Key Vault، يستخدم مورد اختبار التحميل الخاص بك هوية مدارة للوصول إلى مخزن المفاتيح. بعد تكوين هوية الإدارة، تحتاج إلى منح الهوية المدارة لأذونات موارد اختبار التحميل لقراءة هذه القيم من مخزن المفاتيح.

لمنح أذونات موارد اختبار تحميل Azure لقراءة الأسرار أو الشهادات من مخزن مفاتيح Azure:

  1. في مدخل Microsoft Azure، انتقل إلى مورد Azure key vault.

    إذا لم يكن لديك مخزن مفاتيح، فاتبع الإرشادات الواردة في التشغيل السريع ل Azure Key Vault لإنشاء مخزن.

  2. في الجزء الأيمن، حدد Access Policies، ثم حدد + Create.

  3. في علامة التبويب أذونات ، ضمن أذونات سرية، حدد الحصول، ثم حدد التالي.

    إشعار

    يسترد Azure Load Testing الشهادات كبيانات سرية للتأكد من توفر المفتاح الخاص للشهادة.

  4. في علامة التبويب Principal ، ابحث عن الهوية المدارة وحددها لمورد اختبار التحميل، ثم حدد Next.

    إذا كنت تستخدم هوية مدارة معينة من قبل النظام، فإن اسم الهوية المدارة يطابق اسم مورد اختبار تحميل Azure.

  5. حدد التالي مرة أخرى.

    عند تشغيل الاختبار، يمكن للهوية المدارة المرتبطة بمورد اختبار التحميل الآن قراءة الأسرار أو الشهادات لاختبار التحميل الخاص بك من مخزن المفاتيح الخاص بك.

الآن بعد أن قمت بإضافة سر في Azure Key Vault، وتكوين سر لاختبار التحميل الخاص بك، يمكنك الآن الانتقال إلى استخدام البيانات السرية في Apache JMeter.

استخدم مخزن البيانات السرية CI/CD لحفظ أسرار اختبار التحميل

إذا كنت تستخدم اختبار تحميل Azure في سير عمل CI/CD، يمكنك أيضا استخدام المخزن السري المقترن. على سبيل المثال، يمكنك استخدام أسرار مستودع GitHub أو المتغيرات السرية في Azure Pipelines.

إشعار

إذا كنت تستخدم مخزن مفاتيح بالفعل، فقد تستخدمه أيضا لتخزين أسرار اختبار التحميل. انتقل إلى استخدام Azure Key Vault.

لاستخدام الأسرار في مخزن البيانات السرية CI/CD وتمريرها إلى اختبار التحميل في CI/CD:

  1. أضف القيمة السرية إلى مخزن البيانات السرية CI/CD، إذا لم تكن موجودة بعد.

    في Azure Pipelines، يمكنك تحرير البنية الأساسية لبرنامج ربط العمليات التجارية وإضافة متغير.

    Screenshot that shows how to add a variable to Azure Pipelines.

    في GitHub، يمكنك استخدام أسرار مستودع GitHub.

    Screenshot that shows how to add a GitHub repository secret.

    إشعار

    تأكد من استخدام القيمة السرية الفعلية وليس معرف البيانات السرية لمخزن المفاتيح كقيمة.

  2. مرر السر كمعلمة إدخال إلى مهمة/إجراء اختبار التحميل في سير عمل CI/CD.

    يوضح مقتطف YAML التالي كيفية تمرير السر إلى إجراء اختبار التحميل GitHub:

    - name: 'Azure Load Testing'
      uses: azure/load-testing@v1
      with:
        loadtestConfigFile: 'SampleApp.yaml'
        loadtestResource: 'MyTest'
        resourceGroup: 'loadtests-rg'
        secrets: |
        [
            {
            "name": "appToken",
            "value": "${{ secrets.MY_SECRET }}"
            }
        ]
    

    يوضح مقتطف YAML التالي كيفية تمرير السر إلى مهمة Azure Pipelines:

    - task: AzureLoadTest@1
      inputs:
        azureSubscription: 'MyAzureLoadTestingRG'
        loadTestConfigFile: 'SampleApp.yaml'
        loadTestResource: 'MyTest'
        resourceGroup: 'loadtests-rg'
        secrets: |
          [
              {
              "name": "appToken",
              "value": "$(mySecret)"
              }
          ]
    

    هام

    يجب أن يتطابق اسم معلمة الإدخال السري مع الاسم المستخدم في البرنامج النصي Apache JMeter.

لقد حددت الآن سرا في مخزن البيانات السرية CI/CD ومررت مرجعا إلى Azure Load Testing. يمكنك الآن استخدام السر في البرنامج النصي Apache JMeter.

استخدام الأسرار في Apache JMeter

بعد ذلك، يمكنك تحديث البرنامج النصي Apache JMeter لاستخدام السر الذي حددته سابقا.

يمكنك أولا إنشاء متغير معرف من قبل المستخدم يسترد القيمة السرية. بعد ذلك، يمكنك استخدام هذا المتغير في الاختبار الخاص بك (على سبيل المثال، لتمرير رمز مميز لواجهة برمجة التطبيقات في عنوان طلب HTTP).

  1. إنشاء متغير معرف من قبل المستخدم في ملف JMX الخاص بك، وتعيين القيمة السرية إليه باستخدام الدالة GetSecret المخصصة.

    GetSecret(<my-secret-name>) تأخذ الدالة الاسم السري كوسيطة. يمكنك استخدام هذا الاسم نفسه عند تكوين اختبار التحميل في خطوة لاحقة.

    يمكنك إنشاء المتغير المعرف من قبل المستخدم باستخدام Apache JMeter IDE، كما هو موضح في الصورة التالية:

    Screenshot that shows how to add user-defined variables to your Apache JMeter script.

    بدلا من ذلك، يمكنك تحرير ملف JMX مباشرة، كما هو موضح في مثال القصاصة البرمجية هذا:

    <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
      <collectionProp name="Arguments.arguments">
        <elementProp name="appToken" elementType="Argument">
          <stringProp name="Argument.name">udv_appToken</stringProp>
          <stringProp name="Argument.value">${__GetSecret(appToken)}</stringProp>
          <stringProp name="Argument.desc">Value for x-secret header </stringProp>
          <stringProp name="Argument.metadata">=</stringProp>
        </elementProp>
      </collectionProp>
    </Arguments>
    
  2. الرجوع إلى المتغير المحدد من قبل المستخدم في البرنامج النصي للاختبار.

    يمكنك استخدام بناء الجملة ${} للإشارة إلى المتغير في البرنامج النصي. في المثال التالي، يمكنك استخدام udv_appToken المتغير لتعيين رأس HTTP.

      <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
        <collectionProp name="HeaderManager.headers">
          <elementProp name="" elementType="Header">
            <stringProp name="Header.name">api-key</stringProp>
            <stringProp name="Header.value">${udv_appToken}</stringProp>
          </elementProp>
        </collectionProp>
      </HeaderManager>
    

تكوين اختبارات التحميل باستخدام متغيرات البيئة

في هذا القسم، يمكنك استخدام متغيرات البيئة لتمرير المعلمات إلى اختبار التحميل الخاص بك.

  1. قم بتحديث البرنامج النصي Apache JMeter لاستخدام متغير البيئة (على سبيل المثال، لتكوين اسم مضيف نقطة نهاية التطبيق).

  2. تكوين اختبار التحميل وتمرير متغير البيئة إلى البرنامج النصي للاختبار.

استخدام متغيرات البيئة في Apache JMeter

في هذا القسم، يمكنك تحديث البرنامج النصي Apache JMeter لاستخدام متغيرات البيئة للتحكم في سلوك البرنامج النصي.

يمكنك أولا تعريف متغير معرف من قبل المستخدم يقرأ متغير البيئة، ثم يمكنك استخدام هذا المتغير في تنفيذ الاختبار (على سبيل المثال، لتحديث مجال HTTP).

  1. إنشاء متغير معرف من قبل المستخدم في ملف JMX الخاص بك، وتعيين قيمة متغير البيئة إليه باستخدام الدالة System.getenv .

    System.getenv("<my-variable-name>") تأخذ الدالة اسم متغير البيئة كوسيطة. يمكنك استخدام هذا الاسم نفسه عند تكوين اختبار التحميل.

    يمكنك إنشاء متغير معرف من قبل المستخدم باستخدام Apache JMeter IDE، كما هو موضح في الصورة التالية:

    Screenshot that shows how to add user-defined variables for environment variables to your JMeter script.

    بدلا من ذلك، يمكنك تحرير ملف JMX مباشرة، كما هو موضح في مثال القصاصة البرمجية هذا:

    <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
      <collectionProp name="Arguments.arguments">
        <elementProp name="appToken" elementType="Argument">
          <stringProp name="Argument.name">udv_webapp</stringProp>
          <stringProp name="Argument.value">${__BeanShell( System.getenv("webapp") )}</stringProp>
          <stringProp name="Argument.desc">Web app URL</stringProp>
          <stringProp name="Argument.metadata">=</stringProp>
        </elementProp>
      </collectionProp>
    </Arguments>
    
  2. الرجوع إلى المتغير المحدد من قبل المستخدم في البرنامج النصي للاختبار.

    يمكنك استخدام بناء الجملة ${} للإشارة إلى المتغير في البرنامج النصي. في المثال التالي، يمكنك استخدام udv_webapp المتغير لتكوين عنوان URL لنقطة نهاية التطبيق.

    <stringProp name="HTTPSampler.domain">${udv_webapp}</stringProp>
    

تكوين متغيرات البيئة في اختبار تحميل Azure

لتمرير متغيرات البيئة إلى البرنامج النصي Apache JMeter، يمكنك تكوين اختبار التحميل في مدخل Microsoft Azure، في ملف تكوين اختبار YAML، أو مباشرة في سير عمل CI/CD.

هام

عند تعريف متغير البيئة لاختبار التحميل، يجب أن يتطابق اسمه مع اسم المتغير الذي استخدمته في البرنامج النصي Apache JMeter.

لتحديد متغير بيئة لاختبار التحميل باستخدام مدخل Microsoft Azure، قم بما يلي:

  1. في صفحة تكوين الاختبار، حدد علامة التبويب Parameters .

  2. في قسم Environment Variables ، أدخل متغير البيئة Name and Value، ثم حدد Apply.

    Screenshot that shows how to add an environment variable to a load test in the Azure portal.

إذا قمت بتشغيل اختبار التحميل في سير عمل CI/CD، يمكنك تحديد متغيرات البيئة في ملف تكوين اختبار YAML. لمزيد من المعلومات حول بناء الجملة، راجع مرجع تكوين الاختبار YAML.

بدلا من ذلك، يمكنك تحديد متغيرات البيئة مباشرة في تعريف سير عمل CI/CD. يمكنك استخدام معلمات الإدخال لإجراء اختبار تحميل Azure أو مهمة Azure Pipelines لتمرير متغيرات البيئة إلى البرنامج النصي Apache JMeter.

تعرض القصاصة البرمجية YAML التالية مثالا على إجراءات GitHub:

- name: 'Azure Load Testing'
  uses: azure/load-testing
  with:
    loadtestConfigFile: 'SampleApp.yaml'
    loadtestResource: 'MyTest'
    resourceGroup: 'loadtests-rg'
    env: |
    [
        {
        "name": "webapp",
        "value": "myapplication.contoso.com"
        }
    ]

تعرض القصاصة البرمجية YAML التالية مثالا على Azure Pipelines:

- task: AzureLoadTest@1
  inputs:
    azureSubscription: 'MyAzureLoadTestingRG'
    loadTestConfigFile: 'SampleApp.yaml'
    loadTestResource: 'MyTest'
    resourceGroup: 'loadtests-rg'
    env: |
      [
          {
          "name": "webapp",
          "value": "myapplication.contoso.com"
          }
      ]

الأسئلة المتداولة

هل تقوم خدمة Azure Load Testing بتخزين قيمي السرية؟

‏‏لا. لا تخزن خدمة Azure Load Testing قيم الأسرار. عند استخدام URI السري لمخزن المفاتيح، تقوم الخدمة بتخزين URI السري فقط، وتجلب قيمة السر لكل تشغيل اختبار. إذا قمت بتوفير قيمة الأسرار في سير عمل CI/CD، فلن تتوفر القيم السرية بعد تشغيل الاختبار. يمكنك توفير هذه القيم لكل تشغيل اختبار.

ماذا يحدث إذا كان لدي معلمات في كل من ملف تكوين YAML وسير عمل CI/CD؟

إذا كانت هناك معلمة في كل من ملف تكوين YAML وإجراء اختبار تحميل Azure أو مهمة Azure Pipelines، يتم استخدام القيمة من سير عمل CI/CD لتشغيل الاختبار.

لقد قمت بإنشاء اختبار وتشغيله من سير عمل CI/CD الخاص بي عن طريق تمرير المعلمات باستخدام مهمة أو إجراء اختبار تحميل Azure. هل يمكنني تشغيل هذا الاختبار من مدخل Microsoft Azure بنفس المعلمات؟

لا يتم تخزين قيم المعلمات عند تمريرها من سير عمل CI/CD. يجب عليك توفير قيم المعلمات مرة أخرى عند تشغيل الاختبار من مدخل Microsoft Azure. تحصل على مطالبة بإدخال القيم المفقودة. بالنسبة للقيم السرية، يمكنك إدخال URI السري لمخزن المفاتيح. القيم التي تدخلها في صفحة تشغيل الاختبار أو إعادة التشغيل صالحة فقط لتشغيل الاختبار هذا. لإجراء تغييرات على مستوى الاختبار، انتقل إلى تكوين الاختبار وأدخل قيم المعلمات.