آشنایی با جیمیتر

میتوان تست نرمافزار را به عنوان یکی از مهمترین مراحل طراحی و پیاده سازی یک سیستم نرمافزاری دانست. هدف از تست نرمافزار یافتن خطاها، بررسی عملکرد بخشهای مختلف نرمافزار، آنالیز عملکرد سیستم در شرایط مختلف و … است. امروزه یکی از مهمترین انتظارات کاربران سیستمهای نرمافزاری، عملکرد درست و سریع سیستم مورد نظر میباشد. بنابراین باید مشکلات سیستم را پیش از کاربر نهایی پیدا و برطرف کرد. مشکلاتی مانند:
- زمان پاسخگویی سیستم برای هر تراکنش سرور (Response time)
- عملکرد اجزای مختلف سیستم تحت بارهای مختلف
- عملکرد بخشهای مختلف پایگاه داده تحت بارهای مختلف
- مشکلات مربوط به طراحی سیستم نرمافزاری
- مشکلات مربوط به سخت افزار مثل حافظه، CPU و …
بدین منظور تستها و ابزارهای مختلفی طراحی شدهاند که به تیمهای نرمافزاری کمک میکنند که یک نرمافزار بهینهتر و مطابق با نیازهای کاربر ارائه دهند. مانند تست بار، استرس و ...
ابزارهای مختلفی برای اجرای این تستها پیاده سازی شدهاند که میتوان از Apache JMeter به عنوان یکی از کاربردیترین ابزارها نام برد. که در ادامه این آموزش بیشتر با آن آشنا میشویم.
جیمیتر چیست؟
جیمیتر یک ابزار رایگان و قدرتمند با قابلیتهای بسیار برای تست است که زیر مجموعه بنیاد آپاچی و متن باز است. این ابزار با زبان جاوا توسعه داده شده و بر روی انواع سیستم عاملها و پلتفرمهای مختلف قابل اجراست. در ابتدا جیمیتر برای تست پرفورمنس وبسرور Apache Tomcat طراحی شده بود که بعدها با توسعه رابط کاربری و ویژگیهای مختلف، به یک ابزار مستقل برای تست و خودکارسازی تبدیل شد.
چرا از جیمیتر استفاده کنیم؟
از جیمیتر میتوان برای اهداف مختلفی استفاده کرد که در ادامه مهمترین و کاربردی ترین موارد را بررسی میکنیم:
- به عنوان مثال، فرض کنید میخواهید عملکرد سیستم را وقتی که 1000 نفر به طور همزمان از آن استفاده میکنند را بررسی کنید.امکانپذیر نیست که 1000 نفر دارای سیستم و اینترنت را فراهم کنید که به طور همزمان از سیستم شما استفاده کنند تا بتوانید عملکرد سیستم را اندازه گیری و آنالیز کنید. با استفاده از جیمیتر میتوانید هر تعداد کاربری که لازم است را شبیهسازی کنید و سپس سیستم خود را مورد بررسی قرار دهید.

- گاهی اوقات به علت گستردگی یک پروژه نرمافزاری و طولانی بودن یک سناریو، تست دستی آن ویژگی به صرفه نیست و برای هر بار تست، زمان و انرژی بسیاری باید صرف شود. بنابراین با خودکارسازی سناریوهای مهم میتوان آن ها را در زمان کوتاهی تست کرده و از صحت عملکرد آن ها نیز اطمینان حاصل نمود.
- پایگاه داده یکی از بخشهای بسیار مهم هر سامانهی نرمافزاری است. هر چه پیچیدگی برنامهها افزایش مییابد، نیاز به طراحی یک پایگاه داده قویتر و ایمنتر بیشتر میشود. بسیاری از سایتها و اپلیکشنها به علت مشکلاتی در طراحی پایگاه دادهی خود، نمیتوانند حجم زیادی از ترافیک کاربران خود را کنترل کنند و سیستم با کندی و مشکل مواجه میشود. این شرکتها در فعالیتهای تبلیغاتی زیادی سرمایهگذاری میکنند و توجه نمیکنند که تست بار پایگاه داده آنها هم ارزش سرمایه گذاری دارد. بنابراین باید مشکلات سیستم را پیش از این که کاربران نهایی با آنها مواجه شوند، کشف و برطرف کنیم.
برای شناخت بیشتر، در ادامه به مزایا و معایب استفاده از آن میپردازیم:
مزایا
- متن باز بودن: جیمیتر یک نرمافزار متن باز است. بدین معنی که توسعهدهندگان میتوانند کد آن را نیز دانلود کرده و بر اساس نیاز خود تغییر دهند.
- استفاده رایگان: برای استفاده از اغلب ابزارهای حوزه تست کارایی نیاز به خرید اشتراک یا لایسنس است اما هرگونه استفاده از ابزار جیمیتر برای همیشه رایگان است.
- رابط کاربری گرافیکی: رابط کاربری آسانی دارد و یادگیری آن نیاز به زمان زیادی ندارد.
- مستقل از سیستم عامل: جیمیتر با استفاده از جاوا توسعه داده شده و روی سیستم عاملهای مختلف قابل استفاده است.
- نمایش نتیجه تست در قالبهای مختلف: جیمیتر نتایج تست را در قالبهای مختلف مثل گراف، جدول، درخت و … نمایش میدهد و از گزارشهایی در قالب
text، XML، HTML و …پشتیبانی میکند. - نصب و پیکربندی آسان: فقط کافی است آن را دانلود کرده و فایل مربوط به سیستم عامل خود را اجرا کنید. به عنوان مثال فایل *.bat در ویندوز
- پشتیبانی از کاربران همزمان بالا: جیمیتر میتواند تعداد زیادی کاربر همزمان را شبیهسازی کرده و بار بسیاری را به سیستم اعمال کند.
- پشتیبانی از پروتکلهای مختلف و متنوع: از پروتکلهای
HTTP, JDBC, LDAP, SOAP, JMS و FTPپشتیبانی میکند. همچنین بسیاری از پروتکلهای دیگر نیز توسط پلاگین پشتیبانی میشوند. - پشتیبانی از اسکریپتنویسی: در پیادهسازی تستها در جیمیتر میتوان علاوه بر المانها با رابط گرافیکی از اسکریپتنویسی و کدنویسی برای پیادهسازی کارهای پیچیده نیز استفاده کرد.
- گسترشپذیری آسان و پلاگینهای متنوع: جیمیتر از معماری مبتنی بر پلاگین استفاده میکند. در واقع طیف وسیعی از پلاگینها وجود دارد که با استفاده از آنها میتوان ویژگیهای بسیاری را به جیمیتر اضافه کرد. به عنوان مثال:
- جیمیتر بصورت داخلی از تست وب سوکت پشتیبانی نمیکند، اما میتوان با افزودن پلاگینهایی مانند
JMeter WebSocket Samplers by Peter Doornboschوب سوکت را به راحتی تست کرد. - با استفاده از پلاگین
PerfMon Servers Performance Monitoringمیتوان مواردی مانند CPU، حافظه و … را آنالیز کرد.
- جیمیتر بصورت داخلی از تست وب سوکت پشتیبانی نمیکند، اما میتوان با افزودن پلاگینهایی مانند
همچنین میتوانیم بر اساس نیاز خود، با طراحی پلاگینهای جدید، ویژگیهای جیمیتر را گسترش دهیم. (در مقالههای بعدی به آموزش انواع پلاگینها خواهیم پرداخت.)
معایب
- پشتیبانی نکردن از اجرای جاوا اسکریپت در برنامههای وب سمت کاربر
- هنگام استفاده از حالت GUI ، مصرف حافظه برای برنامه میتواند زیاد باشد.
- معماری کنونی که کاربران مجازی را با thread شبیهسازی میکند باعث میشود که رسیدن به حجم بالای کاربران همزمان نیاز به منابع پردازشی زیادی داشته باشد.
جیمیتر چگونه کار میکند؟
برای درک نحوه کار جیمیتر، فرض کنید یک تست ساده در جیمیتر طراحی کردهاید که یک یا چند درخواست http را به سمت یک سرور ارسال میکند. فرآیند کلی در جیمیتر بصورت زیر است که در عکس نیز بطور شماتیک نشان داده شده است:
1. ارسال درخواست به سرور: ابتدا درخواست مورد نظر (مثلا یک درخواست http که توسط طراح تست در جیمیتر به عنوان سناریوی تست ایجاد شده است) شبیهسازی شده و به سمت سرور ارسال میشود. همزمان اطلاعات مربوط به این درخواست همچون حجم درخواست و زمان ارسال درخواست به عنوان یک «نمونه اندازهگیری» در جیمیتر ذخیره میشود.
2. دریافت پاسخ سرور: پس از ارسال درخواست توسط جیمیتر به سرور سامانه تحت تست، پاسخ از سرور به سمت جیمیتر ارسال میشود. جیمیتر پس از دریافت پاسخ از سرور، اطلاعات «نمونه اندازهگیری» ایجاد شده در بخش قبل را نیز تکمیل میکند. برخی اطلاعات تکمیلی عبارتاند از پاسخ موفقیت یا عدم موفقیت سرور، زمان دریافت پاسخ از سرور، حجم اطلاعات پاسخ و غیره.
3. اجرای پردازشهای مورد نیاز بر روی پاسخ: ممکن است پردازشهایی برای پاسخ درخواست توسط طراح تست اضافه شده باشد. جیمیتر بعد از دریافت پاسخ، پردازشهای مربوط به پاسخ را اجرا میکند. به عنوان مثال پردازش اینکه متن خاصی در پاسخ باشد یا قسمتی از پاسخ (مثلا اطلاعاتی که به صورت JSON دریافت شده) شامل اطلاعات مشخصی باشد.
4. جمع آوری و محاسبه دادهها برای تولید نتیجه تست: با اجرای درخواستها بصورت مکرر، جیمیتر تمام نمونههای اندازهگیری شده را ایجاد کرده و آنها را حین اجرای آزمون ذخیره میکند. سپس نتایج کلی و جزئی را براساس همه نمونههای اندازهگیری شده استخراج میکند.
5. نمایش نتیجه تست به صورت آماری و گرافیکی: سپس میتوان نتایج استخراجی از نمونههای اندازهگیری شده را در قالب گراف، جدول و … نمایش داد.

تفاوت عمده جیمیتر با ابزارهای معروفی چون سلنیوم
از جیمیتر و سلنیوم برای تست برنامههای وب استفاده میشود. تفاوت عمده آنها این است که به صورت کلی از جیمیتر برای تست کارایی برنامههای وب مانند تست استرس و تست بار و از سلنیوم برای تست خودکار برنامههای وب استفاده میشود. در واقع جیمیتر ارتباط با سرور را شبیهسازی میکند، به عنوان مثال در برنامههای تحت وب، درخواستهای http و https را شبیهسازی، به سمت سرور ارسال کرده و در نهایت پاسخ را دریافت میکند. در صورتی که سلنیوم ابتدا پروسه ایجاد یک مرورگر را باز کرده و سپس درخواستها را در مرورگر به صورت خودکار اجرا میکند و در نتیجه منابع سیستمی(همچون پردازنده و رم) بیشتری مصرف میشود; بنابراین برای تست کارایی (خصوصا تستهای کارایی با لود بالا) مناسب نیست.
فرایند تست با استفاده از جیمیتر
در جیمیتر با استفاده از المانهای مختلف مانند Thread Group، Controller، Assertion، Plugin و ... میتوان سناریوهای مختلف را ضبط،طراحی و اجرا کرد. به طور کلی مراحل زیر برای اجرای یک تست مرسوم با استفاده از جیمیتر انجام میشود:
- مشخص کردن سناریوهایی که میخواهید تست کنید.
- ضبط کردن سناریوهای مورد نظر با استفاده از روشهای مختلفی مانند افزونه Blazemeter در مرورگر، ویژگی Recording جیمیتر و …
- ویرایش اسکریپتهای رکورد شده
- اجرای تست طراحی شده
- تحلیل نتایج و عملکرد سیستم
برای تست کارایی علاوه بر گامهای اشاره شده، باید موارد زیر هم در نظر گرفته شود:
- ویژگیهای سخت افزاری، نرمافزاری سیستم تحت تست
- تنظیمات شبکه
- میزان باری که میخواهید روی سیستم ایجاد کنید.
- معیارهای کارایی مانند زمان پاسخ، نرخ خطا و …
در این آموزش به معرفی جیمیتر پرداختیم، در مقالههای بعدی با نحوه پیکربندی جیمیتر و استفاده از ویژگیهای متفاوت آن برای انواع مختلف تست آشنا میشوید.