اختبار الحمل مع الجراد. الجزء 3

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

الجزء 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"}) # get "token" from response header self.client.headers.update({'Authorization': response.headers.get('Date')}) # get "token" from response cookies self.client.cookies.set('Authorization', response.cookies.get('NID')) # get "token" from response body self.client.headers.update({'Authorization': str(response.content.decode().find('google'))}) 

كما ترى من المثال ، قبل بدء العمل ، يرسل المستخدم طلبًا إلى خادم طرف ثالث ويعالج الاستجابة ، ويضع البيانات في رؤوس أو ملفات تعريف الارتباط.

الرؤوس


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

 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) 

بما أنه لا يمكنني دائمًا التأكد من البيئة التي سيتم تشغيل الاختبارات فيها ، فأنا دائمًا ما أشير إلى هذه الحجة.

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

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


All Articles