قراءة البيانات من ملف CSV في JMeter باستخدام اختبار تحميل Azure

في هذه المقالة، ستتعلم كيفية قراءة البيانات من ملف قيمة مفصولة بفواصل (CSV) في JMeter باستخدام اختبار تحميل Azure. استخدم البيانات من ملف CSV خارجي لجعل البرنامج النصي لاختبار JMeter قابلا للتكوين. على سبيل المثال، قد تتكرر عبر جميع العملاء في ملف CSV لتمرير تفاصيل العميل إلى طلب واجهة برمجة التطبيقات.

في JMeter، يمكنك استخدام عنصر تكوين مجموعة بيانات CSV في البرنامج النصي للاختبار لقراءة البيانات من ملف CSV.

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

ابدأ عن طريق استنساخ أو تنزيل مشروع العينات من GitHub.

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

  • حساب Azure مع اشتراك نشط. في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.
  • مورد اختبار تحميل Azure. لإنشاء مورد اختبار تحميل، راجع إنشاء اختبار تحميل وتشغيله.
  • برنامج نصي لاختبار Apache JMeter (JMX).
  • (اختياري) واجهة المستخدم الرسومية Apache JMeter لتأليف البرنامج النصي للاختبار. لتثبيت Apache JMeter، راجع بدء استخدام Apache JMeter.

تحديث البرنامج النصي JMeter لقراءة بيانات CSV

في هذا القسم، يمكنك تكوين البرنامج النصي Apache JMeter للإشارة إلى ملف CSV الخارجي. يمكنك استخدام عنصر تكوين مجموعة بيانات CSV لقراءة البيانات من ملف CSV.

هام

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

تعديل البرنامج النصي JMeter باستخدام واجهة المستخدم الرسومية Apache JMeter:

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

  2. تحديث معلومات Filename وإزالة أي مرجع مسار ملف.

  3. اختياريا، أدخل أسماء حقول CSV في أسماء المتغيرات، عند تقسيم ملف CSV عبر محركات الاختبار.

    لا يحافظ اختبار تحميل Azure على صف الرأس عند تقسيم ملف CSV. قم بتوفير أسماء المتغيرات في عنصر تكوين مجموعة بيانات CSV بدلا من استخدام صف رأس.

    Screenshot that shows the JMeter UI to configure a C S V Data Set Config element.

  4. كرر الخطوات السابقة لكل عنصر تكوين مجموعة بيانات CSV في البرنامج النصي.

  5. احفظ البرنامج النصي JMeter وحمل البرنامج النصي إلى اختبار التحميل الخاص بك.

تحميل ملف CSV إلى اختبار التحميل الخاص بك

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

هام

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

لإضافة ملف CSV إلى اختبار التحميل باستخدام مدخل Microsoft Azure:

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

  2. في الجزء الأيمن، حدد الاختبارات لعرض قائمة بالاختبارات.

  3. حدد الاختبار من القائمة عن طريق تحديد خانة الاختيار، ثم حدد تحرير.

    Screenshot that shows the list of load tests and the 'Edit' button.

  4. في علامة التبويب Test plan ، حدد ملف CSV من الكمبيوتر، ثم حدد Upload لتحميل الملف إلى Azure.

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

    Screenshot of the Test plan tab on the Edit test pane.

    إذا كان حجم ملف CSV أكبر من 50 ميغابايت، فضغط الملف. يجب أن يكون حجم الملف المضغوط أقل من 50 ميغابايت. يقوم Azure Load Testing تلقائيا بإلغاء ضغط الملف أثناء تشغيل الاختبار. يسمح فقط بخمسة أدوات مضغوطة بحد أقصى 1000 ملف في كل مضغوط وحجم إجمالي غير مضغوط يبلغ 1 غيغابايت.

  5. حدد Apply لتعديل الاختبار واستخدام التكوين الجديد عند إعادة تشغيله.

تلميح

إذا كنت تستخدم اختبار تحميل يستند إلى عنوان URL، يمكنك الرجوع إلى القيم من ملف بيانات إدخال CSV في طلبات HTTP باستخدام بناء الجملة $(variable) .

تقسيم بيانات إدخال CSV عبر محركات الاختبار

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

على سبيل المثال، إذا كان لديك ملف إدخال CSV كبير للعميل، ويتم تشغيل اختبار التحميل على 10 محركات اختبار متوازية، فإن كل مثيل يعالج 1/10 من العملاء.

هام

لا يحافظ اختبار تحميل Azure على صف الرأس عند تقسيم ملف CSV.

  1. قم بتكوين البرنامج النصي JMeter لاستخدام أسماء المتغيرات عند قراءة ملف CSV.
  2. قم بإزالة صف الرأس من ملف CSV قبل إضافته إلى اختبار التحميل.

لتكوين اختبار التحميل لتقسيم ملفات الإدخال CSV:

  1. انتقل إلى علامة التبويب خطة الاختبار لاختبار التحميل الخاص بك.

  2. حدد Split CSV بالتساوي بين محركات الاختبار.

    Screenshot that shows the checkbox to enable splitting input C S V files when configuring a test in the Azure portal.

  3. حدد تطبيق لتأكيد تغييرات التكوين.

    في المرة التالية التي تقوم فيها بتشغيل الاختبار، يقوم Azure Load Testing بتقسيم ملف CSV ومعالجته بالتساوي عبر محركات الاختبار.

استكشاف الأخطاء وإصلاحها

حالة الاختبار فاشلة ويحتوي سجل الاختبار على File {my-filename} must exist and be readable

عند اكتمال اختبار التحميل بالحالة Failed، يمكنك تنزيل سجلات الاختبار.

عند تلقي رسالة File {my-filename} must exist and be readable خطأ في سجل الاختبار، تعذر العثور على ملف الإدخال CSV عند تشغيل البرنامج النصي JMeter.

يخزن Azure Load Testing جميع ملفات الإدخال جنبا إلى جنب مع البرنامج النصي JMeter. عند الإشارة إلى ملف الإدخال CSV في البرنامج النصي JMeter، تأكد من عدم تضمين مسار الملف، ولكن استخدم اسم الملف فقط.

تعرض القصاصة البرمجية التالية استخراجا لملف JMeter يستخدم عنصرا CSVDataSet لقراءة ملف الإدخال. لاحظ أن filename لا يتضمن مسار الملف.

<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="Websites CSV" enabled="true">
    <stringProp name="filename">websites.csv</stringProp>
    <stringProp name="fileEncoding">UTF-8</stringProp>
    <stringProp name="variableNames">CustomerId,CustomerName,Url</stringProp>
    <boolProp name="ignoreFirstLine">true</boolProp>
    <stringProp name="delimiter">,</stringProp>
    <boolProp name="quotedData">false</boolProp>
    <boolProp name="recycle">false</boolProp>
    <boolProp name="stopThread">true</boolProp>
    <stringProp name="shareMode">shareMode.all</stringProp>
    <stringProp name="TestPlan.comments">Read all records from the CSV file -  stop thread at end of file</stringProp>
</CSVDataSet>