المادة الأخيرة على أداة اختبار الإجهاد الجراد. اليوم سوف أشارك الملاحظات التي تراكمت في هذه العملية. كما هو الحال دائمًا ، يتم إرفاق الفيديو.
الجزء 1 -
الاختبار مع الجرادالجزء 2 -
سيناريوهات متقدمةتسجيل الدخول
عند كتابة اختباراتي الأولى مع الجراد ، واجهتني الحاجة إلى تسجيل الدخول إلى أحد الموارد ، بعد أن تلقيت رمزًا للترخيص ، والذي كنت أستخدمه لاحقًا لاختبار التحميل. بعد ذلك برز السؤال فورًا - كيفية القيام بذلك ، لأن الأداة شحذ لإرسال جميع الطلبات إلى مورد واحد ، وهو ما نشير إليه في وحدة التحكم عند بدء الاختبار. هناك العديد من الحلول للمشكلة:
- تعطيل التفويض على المورد المختبر - إن أمكن
- إنشاء رمز مميز مقدمًا ووضعه في رمز الاختبار قبل بدء التشغيل - الخيار الأضعف ، الذي يتطلب عمالة يدوية في كل عملية إطلاق ، ولكن له الحق في الوجود في بعض الحالات النادرة
- إرسال طلب باستخدام مكتبة الطلبات والحصول على رمز مميز من الاستجابة - حسن بناء الجملة هو نفسه
اخترت الخيار الثالث. أدناه ، أقترح مثالاً معادًا من المقالة الأولى مع إمكانيات مختلفة للحصول على رمز مميز. سيعمل Google.com كخادم ترخيص وهكذا
لأنه لا يوجد رمز ، سأحصل على أبسط القيم
from locust import HttpLocust, TaskSet, task import requests class UserBehavior(TaskSet): def on_start(self): response = requests.post("http://mysite.sample.com/login", {"username": "ellen_key", "password": "education"})
كما ترى من المثال ، قبل بدء العمل ، يرسل المستخدم طلبًا إلى خادم طرف ثالث ويعالج الاستجابة ، ويضع البيانات في رؤوس أو ملفات تعريف الارتباط.
الرؤوس
عند العمل مع رؤوس الطلبات ، هناك العديد من الفروق الدقيقة المهمة التي يجب مراعاتها.
لكل طلب على حدة ، يمكنك تحديد مجموعة الرؤوس الخاصة بك على النحو التالي
self.client.post(url='/posts', data='hello world', headers={'hello': 'world'})
عند تنفيذ المثال أعلاه ، ستتم إضافة رأس hello إلى الرؤوس الحالية لجلسة العميل ، ولكن فقط في هذا الطلب - في جميع ما يلي لن يكون. لجعل العنوان ثابتًا ، يمكنك إضافته إلى الجلسة:
self.client.headers.update({'aaa': 'bbb'})
ملاحظة أخرى مثيرة للاهتمام - إذا قمنا في الطلب بتحديد العنوان الموجود بالفعل في الجلسة - سيتم الكتابة فوقه ، ولكن فقط بناءً على هذا الطلب. لذلك لا يمكنك أن تخاف من مسح شيء مهم بطريق الخطأ.
ولكن هناك استثناءات. إذا احتجنا إلى إرسال نموذج
متعدد الأجزاء ، فسيقوم الطلب تلقائيًا بإنشاء رأس
نوع المحتوى ، والذي سيشير إلى فاصل بيانات النموذج. إذا فرضنا إعادة كتابة الرأس باستخدام وسيطة
الرؤوس ، فسيفشل الطلب لأنه لا يمكن معالجة النموذج بشكل صحيح.
تجدر الإشارة إلى أن جميع الرؤوس هي بالضرورة سلاسل. إذا حاولت تحديد رقم ، على سبيل المثال
{'aaa': 123} ، فلن يتم إرسال الطلب وسيقوم الرمز
برفض استثناء
InvalidHeaderاختبار الموزعة
بالنسبة للاختبار الموزع ، يوفر الجراد العديد من وسيطات CLI: -
المسؤول و -
المستعبدين ، لتحديد الأدوار بوضوح. في هذه الحالة ، لن يحاكي الجهاز الذي يحمل علامة رئيسية الحمل ، ولكنه يجمع فقط الإحصائيات وينسق العمل. دعونا نحاول تشغيل خادم الاختبار وعدة جلسات في الوضع الموزع عن طريق تشغيل الأوامر التالية في وحدات تحكم مختلفة:
json-server --watch sample_server/db.json locust -f locust_files\locust_file.py --master --host=http://localhost:3000 locust -f locust_files\locust_file.py --slave --master-host=localhost locust -f locust_files\locust_file.py --slave --master-host=localhost
من خلال فتح الجراد في المتصفح (
المضيف المحلي: 8089 ) ، يمكنك أن تلاحظ أنه في الزاوية اليمنى العليا لدينا عدد من الآلات التي ستحمل الحمل

اختبار بدون واجهة المستخدم
عندما تتم كتابة جميع الاختبارات وتصحيحها ، سيكون من الجيد تضمينها في اختبار الانحدار التلقائي وفحص النتائج بشكل دوري. باستخدام الأمر التالي ، يمكنك تشغيل اختبار الجراد بدون واجهة مستخدم:
locust -f locust_files\locust_file.py --host=http://localhost:3000 --no-web -c 10 -r 2 --run-time 1m --csv=test_result
اين
- - no-web - وسيطة تسمح لك بإجراء الاختبارات دون واجهة مستخدم
- -c 10 - الحد الأقصى لعدد المستخدمين
- - ص 2 - نمو المستخدم في الثانية الواحدة
- - وقت التشغيل 1 متر - وقت تنفيذ الاختبار (دقيقة واحدة)
- --csv = test_result - بعد إجراء الاختبار ، سيتم إنشاء ملفين بتنسيق csv مع النتائج في المجلد الحالي ، وتبدأ أسمائهما بـ test_result
الحقائق النهائية والملاحظات والاستنتاجات
يمكن دمج الاختبار الموزع مع اختبار الانحدار - لضمان بدء تشغيل جميع العقد للتحميل ، يمكنك إضافة الوسيطة
--expect-slaves = 2 على الرئيسي ، وفي هذه الحالة سيبدأ الاختبار فقط عند بدء تشغيل عقدتين على الأقل.
صادفت موقفًا عدة مرات - يعمل المورد الذي تم اختباره على HTTPS فقط ، بينما يتم إنشاء الشهادة من قبل العميل ويصنفها نظام التشغيل على أنه مريب. لكي تعمل الاختبارات بنجاح ، يمكنك إضافة وسيطة إلى جميع الاستعلامات التي تتجاهل التحقق الأمني ، على سبيل المثال:
self.client.get("/posts", verify=False)
بما أنه لا يمكنني دائمًا التأكد من البيئة التي سيتم تشغيل الاختبارات فيها ، فأنا دائمًا ما أشير إلى هذه الحجة.
هذا هو كل ما أردت مشاركته. بالنسبة لي ، اكتشفت أداة بسيطة ومريحة ذات إمكانات اختبار رائعة وتغيرات في إنشاء الطلبات ومعالجة استجابات الخادم. شكرا لك على القراءة حتى النهاية.