آموزش نصب و راهنمای کاربری Apache JMeter

ابزار JMeter یکی از ابزارهای مشهور در حوزه Load/Performance/Stress Testing است. این ابزار زیرمجموعه بنیاد آپاچی و متن باز است و با زبان جاوا توسعه داده شده و بر روی انواع سیستم عامل ها و پلتفرم ها قابل اجراست و با آن می توان انواع مختلف تست های بار و فشار و کارایی را بر روی نرم افزارها اجرا نمود.این ابزار از مزایای بیشماری بهره می برد که در شکل زیر می توان بسیاری از آنها را مشاهده نمود.

مزایای JMeter
مزایای JMeter

در اینجا به اختصار تعدادی از مزایای Jmeter بیان می شود:
Open source license: کاملا رایگان است ، به توسعه دهنده اجازه می دهد تا از کد منبع برای توسعه استفاده کند.
Friendly GUI: استفاده ازJMeter بسیار آسان است و برای آشنایی با آن زمان زیادی لازم نیست.
Platform independent : ابزار JMeter یک برنامه دسکتاپ جاوا است. بنابراین می تواند در چندین سیستم عامل اجرا شود.
Full multithreading framework : ابزار JMeter امکان نمونه برداری همزمان از توابع مختلف توسط یک thread group جداگانه را فراهم می کند.
Visualize کردن نتیجه آزمون : نتیجه آزمون را می توان در قالب هایی مانند نمودار ، جدول ، درخت و لاگ فایل نمایش داد.
نصب آسان : شما فقط برای اجرایJMeter فایل * .bat را کپی و اجرا می کنید. نیازی به نصب نیست.
استراتژی آزمایش چندگانه :JMeter از بسیاری از استراتژی های آزمایش مانند تست بار ، آزمایش توزیع شده و تست عملکرد پشتیبانی می کند.
شبیه سازی : JMeter می تواند چندین کاربر را با نخ های همزمان شبیه سازی کند و بار سنگینی برای برنامه تحت وب تحت آزمایش ایجاد کند.
پشتیبانی از چند پروتکل :JMeter فقط از تست web application پشتیبانی نمی کند بلکه عملکرد سرور پایگاه داده را نیز ارزیابی می کند. تمام پروتکل های اساسی مانند HTTP ، JDBC ، LDAP ، SOAP ، JMS و FTP توسط JMeter پشتیبانی می شوند.
ضبط و پخش : فعالیت کاربر را در مرورگر ضبط کرده و با استفاده از JMeter آنها را در یک برنامه وب شبیه سازی کنید.
تست اسکریپت : Jmeter را می توان با Bean Shell و Selenium برای آزمایش خودکار ادغام کرد.

نحوه کار JMeter:
منطق جریان کاری Jmeter به طور خلاصه در شکل زیر بیان شده است:

workflow of JMeter
workflow of JMeter

همچنین برای استفاده از ابزار می بایست طبق شکل زیر مراحل تست را انجام داد:

نصب و راه اندازی
جهت نصب و اجرای برنامه JMeter (که در زمان نگارش این مستند نسخه 5.4 می باشد) می بایست حداقل جاوا نسخه 8 بر روی سیستم نصب باشد.

پس از دانلود آخرین نسخه JMeter از سایت آپاچی کافیست برنامه را از حالت فشرده خارج نموده و در پوشه bin بر روی jmeter کلیک کنیم.پس از باز شدن برنامه و وارد شدن به محیط کاربری می توانیم سناریوی تست خود را ایجاد کنیم.

در این بخش نحوه ایجاد یک سناریو تست به صورت تصویری به همراه توضیحات ارائه می گردد:

انتخاب Thread Group
گزینه Thread Group تعداد کاربرانی می باشد که جهت شبیه سازی تست برنامه ایجاد می شود.
برای ایجاد آن پس از کلیک راست ماوس از مسیر زیر ادامه می دهیم:

Add menu, Add → ThreadGroup

ThreadGroup
ThreadGroup

فیلدهای Thread Group

  • فیلد number of thread(users ) : تعداد کاربران
  • فیلد Ramp-Up Period : مدت تاخیر بین آغاز به کار هر کاربر
    (به عنوان مثال اگر 5کاربر با تاخیر زمای 5 انتخاب شود 5users / 5seconds = 1 user per second) اگر مقدار صفر ست شود به طور همزمان تمام کاربران با هم شروع به کار می کنند.
  • فیلد LoopCount : تعداد تکرار هایی است که برای تست انجام می شود.اگر بخواهیم jmeter به طور مکرر تست را اجرا کند گزینه Forever را تیک می زنیم.

افزودن Default HTTP Request
در این قسمت می توان برای تنظیمات HTTP request مقدار پیش فرض تعریف کرد و پس از افزودن HTTP Request elements از تنظیماتی که در این بخش انجام شده استفاده می گردد.

برای افزودن آن کافیست پس از انتخاب threadGroup و کلیک راست ماوس بر روی آن مسیر زیر را انتخاب کنیم:

Add menu, and then select Add → Config Element → HTTP Request Defaults

HTTP Request
HTTP Request


افزودن پشتیبانی از Cookie
برای تست برنامه هایی که تحت وب هستند می بایست آیتم cookie support را به پروژه اضاف کنیم در غیر این صورت برنامه از این قابلیت استفاده نمی کند.


می بایست اطمینان حاصل کنیم که هر thread کوکی مختص به خود را داشته باشد و برای تمام HTTP Request ها قابل دسترس باشد.
برای انتخاب آن کافیست پس از انتخاب ThreadGroup از مسیر زیر ادامه دهیم:
choose Add → Config Element → HTTP Cookie Manager.

افزودن HTTP Requests
ما می توانیم چندین HTTP Requset تعریف کنیم.jmeter درخواست ها را به همان ترتیبی که در سناریو تعریف می کنیم ارسال می کند.

از مسیر زیر می توان HTTP Request ها را به پروژه افزود:

((Add → Sampler → HTTP Request


قسمت Path را با "/" یا هر مسیر دلخواه تغییر داد(مثلا "/ali.html")

دقت شود که مواردی مانند نام سرور که در HTTP Request Defaults تعریف شده است را می توان در این بخش به صورت اختیاری تغییر داد در غیر اینصورت از مقادیر پیش فرض استفاده می شود.

افزودن Listener
مسئول نگهداری کل نتایج در خواست ارسال شده در یک فایل می باشد و یک نمایش بصری از دیتای خروجی را ارائه می دهد.برای این کار نیاز است پس از انتخاب کاربر و کلیک راست از مسیر زیر Listener را اضافه کرد:

Add → Listener → Backend Listener

لاگین کردن به یک وب سایت
در بعضی از سایتها نیاز است که قبل از انجام هر عملی به سیستم لاگین کرد.برای اینکار می بایست مقادیر مرتبط با فرم لاگین را به صورت پارامتر ارسال کرد.روش کار به این صورت است که ابتدا یک HTTP Request ایجاد کرده و مقدار Method را برابر Post قرار می دهیم.لذا لازم است که نام فیلدهایی که در فرم لاگین استفاده می شود و همچنین نام صفحه مورد نظر را بدانیم و برای اینکار می توانیم به راحتی با Inspect کردن کد مورد نظر در صفحه لاگین توسط مرورگر مقادیر و نام فیلدها را به دست آوریم.(اگر این کار برای شما پیچیده است می توانید از امکان JMeter Proxy Recorder جهت رکورد کردن مراحل و ترتیب لاگین استفاده کنید.)

انتخاب تست به صورت یک کاربره یا چند کاربره:
در هر چرخه ThreadGroup این امکان برای ما گذاشته شده است که بتوانیم چرخه چندین تست را با یک User انجام دهیم یا یک چرخه را با چندین کاربر انجام دهیم.برای انجام این رفتار می توانیم با اعمال تنظیمات فیلدها در ThreadGroup به این هدف دست یابیم.

برای روشن شدن این موضوع در عکس زیر تفاوت LoopCount و ThreadCount را مشاهده می کنید:


برای پاک کردن cookies/cache ها و همچنین content/authorization نیز می توان در قسمت CookieManager/CacheManager/Authorization Manager یا انتخاب آن در بخش ThreadGroup این کار را انجام داد.




اجرای تست و استخراج نتایج

  • سیاه : تعداد کل نمونه های ارسال شده
  • آبی : میانگین تمام نمونه های ارسالی
  • قرمز : مقدار انحراف از معیار
  • سبز : میزان توان عملیاتی که نشان دهنده تعداد درخواست ها در هر دقیقه سرور است

برای تجزیه و تحلیل عملکرد وب سرور تحت آزمایش ، باید بر روی 2 پارامتر تمرکز کنید

  • Throughput
  • Deviation

مقدار Throughput :
مهمترین پارامتر است و نشان دهنده توانایی سرور در تحمل بار سنگین است. هرچه میزان بازده بالاتر باشد ، عملکرد سرور نیز بهتر است.
در تستی که در تصویر فوق مشاهده می کنید ، توان سرور گوگل 1،491.193 در دقیقه است. این بدان معناست که سرور گوگل می تواند 1،491.193 درخواست را در هر دقیقه انجام دهد.

مقدار Deviation :
انحراف با رنگ قرمز نشان داده شده است و نشان دهنده انحراف از میانگین است.هر چقدر این مقدار کوچکتر باشد، بهتر است.

اصطلاحاتی که می بایست با آن آشنا باشیم:

Elapsed time: Measures the elapsed time from just before sending the request to just after the last chunk of the response has been received,

  • Latency: Measures the latency from just before sending the request to just after the first chunk of the response has been received,
  • Connect Time: Measures the time it took to establish the connection, including SSL handshake,
  • Median: Number which divides the samples into two equal halves,
  • 90% Line (90th Percentile): The elapsed time below which 90% of the samples fall,
  • Standard Deviation: Measure of the variability of a data set. This is a standard statistical measure,
  • Thread Name: Derived from the Thread Group name and the thread within the group. The name has the format groupName + " " + groupIndex + “-” + threadIndex where:
    • groupName: name of the Thread Group element,
    • groupIndex: number of the Thread Group in the Test Plan, starting from 1,
    • threadIndex: number of the thread within the Thread Group, starting from 1.
  • Throughput: Calculated as requests/unit of time. The time is calculated from the start of the first sample to the end of the last sample. The formula is: Throughput = (number of requests) / (total time).