تست بارگذاری API با Locust

تست بارگذاری API با Locust

تست بارگذاری API با Locust: مقدمه

احتمالاً قبلاً در این موقعیت قرار گرفته اید: کدی می نویسید که کاری را انجام می دهد، مثلاً یک نقطه پایانی. شما نقطه پایان خود را با استفاده از Postman یا Insomnia آزمایش می کنید و همه چیز به خوبی کار می کند. شما نقطه پایانی را به توسعه‌دهنده سمت کلاینت منتقل می‌کنید، که سپس آن را مصرف می‌کند API و اپلیکیشن را مستقر می کند. اما پس از آن، هنگامی که کاربران از برنامه استفاده می کنند، API از کار می افتد.

این می تواند یک موقعیت فوق العاده آزاردهنده باشد، نه اینکه برای یک تجارت هزینه بر باشد. به همین دلیل است که توسعه‌دهندگان نرم‌افزار تست‌های مختلفی را روی سیستم‌های نرم‌افزاری انجام می‌دهند تا از عملکرد آن‌ها مطابق انتظار اطمینان حاصل کنند. API ها تفاوتی ندارند. قبل از استقرار، باید حداقل تست های عملکرد و تست های امنیتی را انجام دهید.

تست های عملکرد را می توان به تست های عملکرد و تست های بار گروه بندی کرد. تست های عملکرد همان چیزی است که معمولاً از Postman یا Insomnia استفاده می کنید. آنها اطمینان می دهند که API شما همانطور که انتظار دارید عمل می کند. از سوی دیگر، تست‌های بارگذاری بیشتر به نحوه عملکرد API شما با استفاده در دنیای واقعی و اوج بار مربوط می‌شوند، و این همان چیزی است که این مقاله در مورد آن است. بیایید تست های بار را با جزئیات بیشتری بررسی کنیم.

تست بارگذاری API چیست؟

تست بار API نوعی آزمایش است که توسعه دهندگان برای شبیه سازی بار نرمال و اوج بار در نقاط پایانی استفاده می کنند. این نوع آزمایش به توسعه دهندگان اجازه می دهد تا عملکرد واقعی یک API را قبل از استقرار آن ارزیابی کنند. این به آنها کمک می کند حداکثر ظرفیت عملیاتی یک سیستم، تنگناها در صورت وجود، و کاهش عملکرد را شناسایی کنند. آزمایش های بارگذاری API معمولاً با ایجاد کاربران مجازی و سپس استفاده از آنها برای آزمایش عملکرد API به طور همزمان انجام می شود. 

تست‌های بارگذاری API معیارهایی مانند زمان پاسخ، کاربران همزمان، نرخ‌های توان عملیاتی، سطوح استفاده از منابع، میانگین زمان بین شکست (MTBF)، میانگین زمان شکست (MTTF) و غیره را اندازه‌گیری می‌کنند. همه این معیارها را می توان برای تعیین میزان عملکرد API استفاده کرد.

انواع تست بار

انواع مختلفی از تست بار وجود دارد که هر کدام موارد کاربرد خود را دارند. بیایید نگاهی به برخی از آنها بیاندازیم.

تست بار: این شکل اصلی آزمایش بار است. برای ارزیابی عملکرد یک سیستم (در این مورد، یک API) تحت بار معمولی و اوج بار مورد انتظار استفاده می شود.

تست استرس: این برای ارزیابی عملکرد یک سیستم تحت یک بار بسیار سنگین استفاده می شود. هدف از این آزمایش این است که ببیند آیا یک سیستم پس از خرابی بهبود می یابد یا خیر و چقدر طول می کشد تا این کار انجام شود. بار معمولاً به آرامی بالا می رود تا جایی که از قابلیت های سیستم فراتر رود.

تست اسپایک: این کمی شبیه به تست استرس است، با این تفاوت که بار سنگین به طور ناگهانی اعمال می شود، برخلاف افزایش آهسته آن. این نوع آزمایش نشان می دهد که چه اتفاقی می افتد زمانی که یک جهش ناگهانی در میانگین تعداد کاربران یا بازدیدکنندگان شما وجود دارد، یا زمانی که یک حمله DDOS به سیستم شما رخ می دهد.

تست خیس کردن: این تست بر خلاف تست های بالاست. این سیستم شما را زیر 80 درصد (یا حدوداً) بار معمولی قرار می دهد و آن را برای مدت طولانی، مثلاً 12 تا 14 ساعت، کار می کند. این نوع آزمایش تعیین می کند که یک سیستم در طول زمان چقدر قابل اعتماد است.

بارگیری API های خود را با Locust بارگیری کنید

توسعه دهندگان به گزینه های مختلفی برای تست بارگذاری API های خود دسترسی دارند. برخی از ابزارهای رایج تست بار عبارتند از Gatling، JMeter و Locust. ما در این مقاله به Locust خواهیم پرداخت.

Locust یک ابزار تست بار منبع باز مبتنی بر پایتون است که توسط شرکت های برتر مانند گوگل، مایکروسافت و Riot Games برای آزمایش API های خود استفاده می شود. در این مقاله نحوه بارگذاری تست API را نشان خواهیم داد. 

برای این آموزش، من یک API ساده با Flask ایجاد خواهم کرد. می توانید با من همراه باشید یا فقط API خود را با Node یا هر فریم ورکی که با آن راحت هستید ایجاد کنید.

مورد نیاز

پایتون 3

نصب و نصب

ابتدا باید یک محیط مجازی روی رایانه شخصی خود راه اندازی کنید تا محیط جهانی پایتون خود را به هم نریزید. برای انجام این کار، دستورات زیر را اجرا کنید. توجه داشته باشید که این دستورات برای ترمینال ویندوز اعمال می شود.

پروژه $ mkdir

$ cd /d مسیر\to\project

$ python -m venv venv

$ venv\Scripts\activate

 

ابتدا یک را ایجاد کردیم پروژه فهرست راهنما. سپس دایرکتوری فعلی خود را به تغییر دادیم پروژه. سپس یک محیط مجازی برای پایتون در داخل آن دایرکتوری ایجاد و فعال کردیم. 

اکنون به سراغ نصب می رویم فلاسک(از آن برای ایجاد نقاط پایانی برای آزمایش بار استفاده خواهیم کرد) و ملخ خود. 

 

برای نصب Flask، اجرا کنید. مطمئن شوید که در آن هستید پروژه جایی که یک محیط مجازی ایجاد کردید.

فلاسک نصب پیپ $

 

برای نصب Locust اجرا کنید

$ pip نصب ملخ

 

پس از انجام این کار، دستورات زیر را تایپ کنید. مطمئن شوید که در خود هستید پروژه زمانی که این کار را انجام می دهید.

$ copy nul __init__.py

برنامه $ mkdir

$ copy nul app\app.py

$ app nul\__init__.py را کپی کنید

 

این دستور چند فایل ایجاد می کند که ما از آنها برای ایجاد نقاط پایانی خود با استفاده از Flask استفاده می کنیم. شما همچنین می توانید این فایل ها را با استفاده از فایل اکسپلورر خود ایجاد کنید. اما لذت در آن چیست؟ پس از انجام این کار، کد زیر را در آن کپی کنید app.py

از flask import Flask, jsonify, request

برنامه = فلاسک (__name__)

مدل های ماشین = [

  { 'brand': 'Tesla', 'model': 'Model S' }

]

 

مدلهای_ هواپیما = [

  { 'brand': 'Boeing', 'model': '747' }

]

 

@app.route('/cars')

def get_cars():

  بازگشت jsonify (car_models)

@app.route('/planes')

def get_planes():

  بازگشت jsonify (plane_models)

اگر __name__ == '__اصلی__':

    app.run(debug=True)  

 

کد بالا حاوی یک متد است get_cars برای دریافت لیستی از مارک های خودرو و مدل های آنها استفاده می شود و get_planes برای دریافت لیستی از برندهای هواپیما و مدل های آنها استفاده می شود. برای اینکه بتوانیم این نقطه پایانی را آزمایش کنیم، باید app.py را اجرا کنیم. برای این کار دستور زیر را اجرا کنید.

$ python path\to\app.py

پس از اجرای آن، باید چیزی شبیه به این را ببینید:

تست بار API 1

اگر URL را از ترمینال کپی کنید و تایپ کنید اتومبیل or هواپیما پس از /، باید بتوانید داده ها را در آنجا ببینید. با این حال، هدف ما آزمایش نقطه پایانی با ملخ است، نه با مرورگر. پس بیایید این کار را انجام دهیم. دستور زیر را در ریشه خود اجرا کنید پروژه دایرکتوری.

 

$ copy nul locust_test.py

 

این یک فایل 'locust_test.py' در ریشه فایل شما ایجاد می کند پروژه فهرست راهنما. پس از انجام این کار، فایل را باز کرده و کد زیر را در آن قرار دهید. به زودی توضیح خواهیم داد.

 

زمان واردات

از واردات ملخ HttpUser، وظیفه، بین

 

کلاس رفتار کاربر (HttpUser):

    انتظار_زمان = بین (5، 10)

 

    @وظیفه

    def get_cars(self):

        self.client.get('/cars')

    

    @وظیفه

    def get_planes(self):

        self.client.get('/planes')

 

این یک مثال اساسی از استفاده از Locust برای بارگیری آزمایش API است. ابتدا یک کلاس ایجاد می کنیم رفتار کاربر، که می توان نام مناسبی به آن داد اما باید گسترش یابد HttpUser. HttpUser کلاسی است که از نمونه سازی چند کاربر مجازی برای انجام وظایفی که در آن مشخص می کنیم مراقبت می کند رفتار کاربر کلاس. 

یک کار با تزئین یک روش با @وظیفه دکوراتور ما همچنین یک تابع به نام داریم بین() که به ما اجازه می دهد تا قبل از اجرای کار بعدی، محدوده ای از ثانیه ها را مشخص کنیم. می بینید که ما محدوده ای بین 5 تا 10 ثانیه را در کد خود به آن اختصاص دادیم. 

برای اجرای کد، مطمئن شوید که هنوز در محیط مجازی خود هستید. اگر موردی که ایجاد کرده‌اید توسط سروری که API را ارائه می‌کند استفاده می‌شود، یک ترمینال جدید باز کنید، دایرکتوری خود را به خود تغییر دهید پروژه دایرکتوری، و محیط مجازی که ایجاد کرده اید را فعال کنید. دستور فعال سازی محیط مجازی را می توانید در بالا پیدا کنید. اکنون دستور زیر را در ترمینال خود وارد کنید.

 

$ ملخ -f locust_test.py

 

شما باید چیزی شبیه به این را ببینید:

تست بار API 2

به طور پیش فرض، رابط وب Locus در http://localhost/8089 قرار دارد. اگر از وب سایت بازدید می کنید، باید یک رابط مانند زیر ببینید:

تست بار API 3

از رابط، می توانیم تعداد کاربران، نرخ تخم ریزی (کاربران ایجاد شده در هر ثانیه) و میزبان را مشخص کنیم. با بررسی ترمینالی که سرور در آن کار می کند، می توانید آدرس هاست خود را دریافت کنید. در مورد ما، در پورت 5000 است. وقتی روی آن کلیک می کنید شروع به ازدحام کردن، رابط زیر به شما نمایش داده می شود.

تست بار API 4

این معیارهای مفید مختلفی مانند تعداد درخواست‌های ناموفق، میانگین زمان درخواست، حداقل زمان درخواست، درخواست‌ها در ثانیه و غیره را به شما نشان می‌دهد. هنگامی که از چیزی که می بینید راضی شدید، می توانید روی دکمه توقف کلیک کنید. 


علاوه بر آمار زبانه، وجود دارد نمودار برگه ای که موارد بیشتری را نشان می دهد اطلاعات به صورت نمودار مانند تصویر زیر.

وجود دارد کل درخواست ها در نمودار ثانیه, نمودار زمان پاسخگویی، و نمودار تعداد کاربران، همه علیه زمان نقشه کشیده اند. با استفاده از نمودارها، می توانید تعیین کنید که چند کاربر برای یک زمان پاسخ ثابت قابل قبول هستند، یا می توانید نمودارهای خود را برای یک زمان پاسخ ثابت با وجود افزایش تعداد کاربران مشاهده کنید، و بینش های دیگری مانند آن. اگر می خواهید اینها را به اشتراک بگذارید آمار با شخص دیگری، می توانید گزارشی را از دانلود داده ها تب.

نتیجه گیری...

تست بارگذاری API شما یک فعالیت مهم در فرآیند توسعه شما است، بنابراین مطمئن شوید که در چرخه طراحی شما گنجانده شده است. به هر حال، شما همچنین می توانید انواع تست بار دیگر را با تغییر مقادیر برای تعداد کاربران و نرخ تخم ریزی انجام دهید. 

اگر می‌خواهید یک آزمایش اسپایک انجام دهید، یک مقدار بزرگ (مثلا 2000) برای تعداد کاربران و سپس یک مقدار به همان اندازه برای نرخ تخم‌ریزی خود تعیین کنید (مثلاً 500). این به این معنی است که در عرض 4 ثانیه، تمام 2000 کاربر ایجاد شده و به نقاط پایانی شما دسترسی خواهند داشت. یک تست استرس مشابه است، اما با مقدار بسیار کمتری برای نرخ تخم ریزی. برای پیدا کردن همه کارهایی که می توانید انجام دهید، Locust را بررسی کنید مستندات