JMeter - سكين اختبار السويسري (الجزء 2)

اليوم سوف أخبرك كيف ، بمساعدة JMeter ، أنشأنا عملية تخزين صفحات المنتج مؤقتًا ، واختبرنا تشغيل تطبيق الهاتف المحمول دون التطبيق نفسه وخلقنا 2000 مستخدم في النظام دون الوصول إلى قاعدة البيانات.

كل من لا يعرف ما يجري هنا ، اقرأ الجزء الأول من المقال - حيث أخبرته كيف ساعدنا JMeter في "التغلب" على مشكلة سقوط الموقع بين بعض المستخدمين.

كيفية التخزين المؤقت بسرعة بضعة آلاف من صفحات المنتج


عميلنا الآخر هو شركة تصنيع معدات إيطالية للإضاءة الداخلية والخارجية والديكور.

IPad قطة شاشة التطبيق
معدات عملائنا تضيء روائع الرسم العالمي والآثار المعمارية والآثار ومباني المراكز التجارية والمطارات

قمنا بتطوير الموقع لهذه الشركة على Kentico. ويعرض جميع المواد والنماذج من معدات الإضاءة - 20،000 نسخة. ولكل منها صفحة منفصلة.

بعد إصدار الموقع ، اكتشفنا ميزة غير سارة لـ Kentico: لا تحتوي على أداة لتحميل ملفات الوسائط تلقائيًا إلى ذاكرة التخزين المؤقت. بعد تحديث الموقع وإعادة تشغيله (والذي يحدث بانتظام) ، تتم إعادة تعيين ذاكرة التخزين المؤقت وتفتح معظم الصفحات لمدة 10 ثوانٍ. ليس كل مستخدم مستعدًا للانتظار كثيرًا.

لقد رأينا خيارين لتحميل ملفات الوسائط في ذاكرة التخزين المؤقت. أولاً: لقد مضى وقت طويل على التنقل يدويًا عبر الموقع يدويًا من خلال متصفح. ثانياً: أن تكتب نصًا سينفذ هذا لنا - إنه مناسب!

قررنا استخدام JMeter: لقد أطعمناه خريطة الموقع الكاملة ، ومشى عليه وأرسل ملفات الوسائط إلى ذاكرة التخزين المؤقت.

لقد كان حلاً بسيطًا ، لكنه ليس مثاليًا جدًا. استغرق البرنامج النصي ست ساعات (!!!) لإكماله. هناك حاجة إلى طريقة أسرع.

بعد أن درست الموضوع قليلاً ، قررنا استخدام تعابير regexps. JMeter قادر على طلب موارد مدمجة في الصفحة لأقنعة معينة من الخادم. هذا هو ما استفدنا منه. بعد فحص ما هو غير موجود على خادمنا ولا يتطلب التحميل في ذاكرة التخزين المؤقت (صور الطرف الثالث ، الخطوط ، الأنماط ، وما إلى ذلك) ، قمنا بتقليل الوقت الذي يستغرقه البرنامج النصي في الانتقال بين الصفحات إلى ساعتين.

يجب أن يبدو هذا مثل طلب HTTP في JMeter لتحميل نوع معين من الأصول فقط

ولكن هذا طويل جدًا: يبدأ الملء في الساعة 9:00 في تشيليابينسك ويستغرق ساعة ، ثم يتم قضاء ساعتين أخريين في البرنامج النصي ، ونتيجة لذلك سننتهي في الساعة 12:00. في إيطاليا ، الساعة 08:00 ، وبدأ بعض السكان المحليين العمل بالفعل في الساعة 6-7 صباحًا. الموقع بطيء والشكاوى تتدفق ... نحتاج إلى مزيد من التحسين!

جاء القرار عندما أدركنا أنه تم استخدام نفس الصور تقريبًا في جميع صفحات المنتج البالغ عددها 20.000. لقد أجرينا تحليلًا وأدركنا أنه يكفي التنزيل الكامل (مع جميع الموارد المدمجة) 30٪ فقط من الصفحات العشوائية ، ويمكن تشغيل الباقي بدون تحميل ملفات الوسائط. وبالتالي ، فإن الغالبية العظمى من المواد - الصور والخطوط والنصوص وأنماط صفحات المنتج - تقع في ذاكرة التخزين المؤقت. عندما يتصل المستخدم بواحد منهم ، فإن التنزيل من الخادم لا يتطلب سوى جزء صغير من المحتوى ، ولن يستغرق الأمر أكثر من 1-2 ثواني.

نحن العشوائية النصي JMeter باستخدام المعلمات
عن طريق طلب رقم صفحة عشوائي من جدول المتغيرات التي يحددها المستخدم ، في كل مرة نحصل على صفحة عشوائية من القائمة

باستخدام الطريقة الموضحة ، حصلنا على موقع يعمل في 90٪ من الحالات بسرعة. نعم ، في حالة واحدة من كل عشر حالات ، استغرق الأمر ما يصل إلى 30 ثانية لانتظار تحميل الصفحة ، ولكن في الحالات التسعة الأخرى حل كل شيء. وهذا في 15-30 دقيقة فقط.

الآن لم تعد هناك حاجة إلى مثل هذه الحيل - قام المطورون بتحسين نظام التخزين المؤقت نفسه. لكن في ذلك الوقت ، كان هذا القرار بمثابة خلاص حقيقي ، واتضح أن أداة JMeter كانت أداة مفيدة للغاية ، حتى بعد إطلاقها وصبها.

كيفية إنشاء 2000 مستخدم للتطبيق ، إذا كان لديك فقط رسائل البريد الإلكتروني وساعتين للعمل


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

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

قبل الإطلاق ببضعة أيام ، اتصل بي المدير وطلب مني إنشاء 2000 مستخدم للتطبيق. كانت الصعوبة أننا لم نتمكن من الوصول إلى الخادم المباشر أو قاعدة البيانات. كان علينا إنشاء 2000 مستخدم فقط من خلال CMS (في هذه الحالة ، من خلال Umbraco). في الوقت نفسه ، بعد التسجيل ، يجب أن يتلقى كل مستخدم خطابًا من النوع التالي تقريبًا:

رسالة بعد التسجيل
عند تلقي هذا البريد الإلكتروني ، يقوم المستخدم بتثبيت التطبيق وتغيير كلمة المرور الافتراضية إلى بلده

لتسجيل مستخدم ، هناك خمسة حقول مطلوبة:

  • البريد الإلكتروني.
  • اسم.
  • اسم العائلة
  • تسجيل الدخول.
  • كلمة السر.

كان لدي ساعتين فقط لإكمال المهمة. مرة أخرى: 2000 مستخدم ، خمسة حقول لكل منهم ، ساعتان ... جاءت بيانات المدير في النموذج التالي:

ليس تنسيق البيانات الأكثر قابلية للقراءة ، فقط قائمة من رسائل البريد الإلكتروني في شكل نص

إذا كنت مطورًا ، وليست متخصصًا في ضمان الجودة ، فسوف أكتب نصًا ، على سبيل المثال ، في perl: كان سيحلل هذه البيانات وينتشر كل شيء بسرعة. لكنني اخترت مسارًا مختلفًا واستخدمت أكثر ، ربما ، الأداة المثالية لتنظيم البيانات السريعة - MS Excel. جداول البيانات تنقذ العالم!

بمساعدة التلاعب البسيط باستبدال البيانات ، وقطع الحيل الزائدة وغيرها من الحيل ، قمت بإنشاء ملف من 10k ~ line من النموذج:

login1 | john.smith
login2 | doctor.who
...
name1 | جون
...

لم أكن أزعج كلمات المرور كثيرًا - لقد كتبت فقط PasswordNumber1 و "مددت" هذا العمود في Excel إلى جميع مستخدمي 2000. هذا لا يهم ، لأنه كان يستخدم فقط للإدخال الأول. نعم ، ولم أقم بتصنيف القائمة العامة لرسائل البريد الإلكتروني أبجديًا ، مما يعني أنه تم تقليل احتمال التخمين العشوائي لكلمة المرور.

تغذية هذا الملف (عبر الحافظة) إلى JMeter ، انحنيطت على الكرسي وشاهدت بسرور كيف تم إنشاء المستخدمين. استغرقت العملية برمتها لمعالجة البيانات وإنشاء مستخدمين جدد 1 ساعة و 45 دقيقة - حتى الوقت المتبقي لتناول القهوة!

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

بشكل عام ، يمكن استخدام JMeter (وكان يستخدمه أنا شخصياً) لمجموعة متنوعة من المهام. على سبيل المثال ، من أجل:

  • تحليل التحسين: إجراء اختبار الحمل ، إصلاحات تحسين لفة ، إجراء الاختبار مرة أخرى ، مقارنة النتائج ؛
  • اختبار أمان الاستعلام: اكتب برنامجًا نصيًا باستخدام خادم وكيل ، وأرسل الطلب مباشرةً إلى الخادم دون عمليات تدقيق أمامية ، وأزل المفاتيح المختلفة من الطلب ، وتحقق من أن الخادم يستجيب بشكل مناسب ؛
  • التحقق من الاستجابة للرؤوس: نكتب النصي الذي يرسل الطلبات إلى نفس الصفحة مع رؤوس مختلفة في حلقة ، ونحن نتحقق من رد فعل الخادم ونرى ما يجب إزالته ؛
  • تعداد مجموعات الترخيص: ضع دورة بكلمات مرور في دورة بها معلومات تسجيل الدخول ، واختبر نموذج الترخيص ؛
  • يتحقق من الحماية من الهجمات: نرسل طلبات لإرسال النماذج في عدة تدفقات ومعرفة ما إذا كانت حمايتك تعمل ؛
  • أتمتة أنظمة واجهة برمجة التطبيقات: يمكن معالجة أي نتائج لطلبات واجهة برمجة التطبيقات بواسطة برنامج نصي واستخدامها في الخطوة التالية من دورة الاختبار - وبهذه الطريقة يمكنك أتمتة اختبار أي نظام من هذا القبيل.

مما سبق ، يمكننا استخلاص استنتاج عام: JMeter هي أداة عالمية ، وسكين سويسري حقيقي لاختبار (وللمطور ، أن نكون صادقين).

Source: https://habr.com/ru/post/ar463443/


All Articles