اگر میپرسید آپاچی JMeter چیست؟ یک ابزار متنباز و ۱۰۰٪ خالصِ مبتنی بر جاوا است که برای سنجش رفتار نرمافزار، تست عملکرد (Performance Testing) و تست بار (Load Testing) طراحی شده است. برخلاف تصور رایج، جیمتر یک مرورگر نیست؛ بلکه ابزاری قدرتمند است که با شبیهسازی درخواستهای سنگین روی سرور، شبکه یا آبجکتها، مقاومت و پایداری آنها را تحلیل میکند.
اگرچه این ابزار ابتدا برای آزمایش برنامههای کاربردی وب (Web Applications) توسعه یافت، اما امروزه دامنه کاربرد آن به تست API، دیتابیس (JDBC)، پروتکلهای FTP و سرویسهای پستی گسترش یافته است.
در این مقاله، از بررسی مفاهیم کلیدی (مانند Thread Group) و نصب جیمتر شروع میکنیم و پساز آموزش اجرای اولین تست به سراغ چالشهای فنی و راهکار تست توزیعشده (Distributed Testing) برای پروژههای سنگین میرویم.
فهرست مطالب
معرفی آپاچی جیمتر (JMeter)

اگر فکر میکنید JMeter چیست و آن را صرفاً یک ابزار ساده برای ارسال پینگ به سرور میدانید، باید بگوییم که اینطور نیست. آپاچی جیمتر (Apache JMeter) یک نرمافزار متنباز (Open Source) و ۱۰۰٪ مبتنی بر جاوا است که توسط بنیاد نرمافزاری آپاچی توسعه یافته است. اگرچه این ابزار در ابتدا فقط برای آزمایش برنامههای تحت وب طراحی شده بود، اما امروزه تست نرمافزار با JMeter در سناریوهای مختلف به یک استاندارد تبدیل شده است.
کارکرد اصلی این ابزار، ایجاد بار کاری سنگین (Workload) روی سرور، گروهی از سرورها یا شبکه است تا استحکام و عملکرد آنها را زیر فشار بسنجد. اما جیمتر دقیقاً چه کاری انجام میدهد و مهمتر از آن، چه کاری را انجام نمیدهد؟
جیمتر چه کارهایی انجام میدهد؟
قدرت اصلی جیمتر در تنوع پروتکلهایی است که پشتیبانی میکند. شما با این ابزار محدود به مرورگر نیستید؛ بلکه میتوانید سناریوهای پیچیدهای را برای موارد زیر طراحی کنید:
- وب (HTTP/HTTPS): رایجترین کاربرد برای تست عملکرد وبسایت با JMeter (شامل متدهای GET, POST و…).
- سرویسهای وب و RESTful: گزینهای ایدئال برای تست API با JMeter و بررسی پاسخهای JSON یا XML.
- پایگاه داده (JDBC): اتصال مستقیم به دیتابیس و اجرای کوئریهای سنگین SQL برای سنجش سرعت پاسخگویی دیتابیس.
- پروتکلهای دیگر: از FTP برای انتقال فایل گرفته تا پروتکلهای ایمیل (SMTP, POP3) و حتی LDAP.
جیمتر چه کارهایی نمیتواند انجام دهد؟ (مهم)
اینجا همان نقطهای است که بسیاری از تازهکاران در دام میافتند. JMeter یک مرورگر نیست. جیمتر در سطح پروتکل عمل میکند نه در سطح رابط کاربری. وقتی شما با مرورگر کروم (Chrome) وارد سایتی میشوید، مرورگر کدهای HTML را دریافت کرده، تصاویر را لود میکند و از همه مهمتر جاوا اسکریپتها را اجرا میکند.
اما جیمتر:
- جاوا اسکریپتهای موجود در صفحه را اجرا نمیکند (پس تعاملات AJAX سمت کلاینت را نمیبیند).
- صفحه را رندر نمیکند (شما ظاهر سایت را نمیبینید، فقط دیتا را میبینید).
نکته تخصصی: اگر تست شما وابستگی شدید به اجرای جاوا اسکریپت در سمت کاربر دارد (مثلاً Single Page Applicationها)، نتایج جیمتر ممکن است زمان پاسخگویی (Response Time) را کمتر از تجربه واقعی کاربر نشان دهد، چون زمان اجرای اسکریپتهای سمت کاربر را محاسبه نمیکند.
عناصر مهم JMeter که باید بشناسید

وقتی محیط جیمتر را باز میکنید، با انبوهی از منوها مواجه میشوید. نترسید! برای اجرای یک تست عملکرد وبسایت با JMeter، نیازی نیست تمام دکمهها را بشناسید. بیایید اجزای حیاتی یک «Test Plan» (طرح تست) را با زبانی ساده بررسی کنیم. فرض کنید قرار است ارتشی از کاربران مجازی را به سمت سرور بفرستید؛ اجزای زیر نقشهای این عملیات هستند:
Thread Group (گروه تردها یا ارتش کاربران):
هر Thread در جیمتر، نماینده یک کاربر واقعی است. وقتی میگوییم ۱۰۰ ترد، یعنی ۱۰۰ کاربر همزمان درحال کار با سایت هستند. تمام تنظیمات مربوط به تعداد کاربران، زمان بالا آمدن (Ramp-up) و تعداد دفعات تکرار تست در این بخش انجام میشود.
Samplers (نمونهگیرها):
تردها بهخودیخود کاری نمیکنند مگر اینکه به آنها دستور بدهید. Samplerها همان دستورات هستند. مثلاً «HTTP Request» به جیمتر میگوید: «به فلان آدرس URL درخواست بفرست». برای تست API با JMeter، شما مستقیماً با این بخش سروکار دارید تا متدها و بادی (Body) درخواست را تنظیم کنید.
Listeners (شنوندهها):
بدون Listener، شما نمیدانید چه اتفاقی افتاده است. این ابزارها نتایج تست را جمعآوری کرده و بهصورت گراف، جدول یا درخت (Tree) نمایش میدهند. معروفترین آنها View Results Tree برای دیباگ و Summary Report برای تحلیل کلی است.
Timers (تایمرها یا عنصر انسانی):
کاربران واقعی مثل رباتها بلافاصله پشت سر هم کلیک نمیکنند. آنها فکر میکنند، مکث میکنند و میخوانند. Timers (مثل Constant Timer) بین درخواستها وقفه میاندازند تا شبیهسازی به واقعیت نزدیکتر شود و سرور بهشکل غیرواقعی بمباران نشود.
Assertions (تأییدیهها یا معیارهای موفقیت):
صرف اینکه سرور پاسخ داد، بهمعنی موفقیت نیست. آیا پاسخ درست بود؟ Assertionها محتوای پاسخ را چک میکنند. مثلاً میتوانید تعیین کنید که اگر در پاسخ کلمه «Error» وجود داشت یا حجم فایل کمتر از مقدار خاصی بود، تست آن کاربر «Fail» شود.
Configuration Elements (عناصر پیکربندی):
ابزارهای کمکی هستند. مثلاً CSV Data Set Config به شما اجازه میدهد نام کاربری و رمز عبور هزاران کاربر را از یک فایل اکسل بخوانید و در تست استفاده کنید یا HTTP Cookie Manager که مدیریت کوکیها را (که برای لاگین ماندن کاربران ضروری است) بهصورت خودکار انجام میدهد.
آیا میخواهید با جیمتر تست سنگینی انجام دهید؟ در بخشهای جلوتر خواهیم دید که چطور مفهوم Distributed Testing (تست توزیعشده) به ما کمک میکند تا با استفاده از چندین سرور (Slave)، محدودیتهای سختافزاری یک کامپیوتر را دور بزنیم و تستی در مقیاس واقعی اجرا کنیم.
نصب JMeter و اجرای اولین پروژه
باید اشاره کنیم که نصب و راهاندازی برای آموزش Load Testing با JMeter سادهتر از نصب یک بازی کامپیوتری است. در این بخش، یک سناریوی ساده (تست صفحه اصلی یک وبسایت) را با هم اجرا میکنیم تا چراغهای سبز و قرمز معروف جیمتر را ببینید.
گام اول: پیشنیازها و دانلود (مهمترین مرحله)
جیمتر یک برنامه «۱۰۰٪ جاوا» است. این یعنی بدون نصب بودن جاوا روی سیستم شما، حتی باز هم نمیشود.
- نصب JDK: مطمئن شوید که Java SE Development Kit (JDK) (نسخه ۸ یا بالاتر) روی سیستم شما نصب است. برای این کار در CMD یا ترمینال تایپ کنید: java -version. اگر نسخه را دیدید، همهچیز آماده است.
- دانلود JMeter: به سایت رسمی آپاچی جیمتر بروید و فایل فشرده (Binaries – zip برای ویندوز) را دانلود کنید.
- اجرا: فایل را از حالت فشرده خارج کنید. وارد پوشه bin شوید و فایل jmeter.bat (در ویندوز) یا jmeter.sh (در لینوکس/مک) را اجرا کنید.
نکته: جیمتر نصبکردنی نیست (Portable است). فقط کافیست آن را اجرا کنید. پساز چند لحظه رابط کاربری گرافیکی (GUI) ظاهر میشود.

گام دوم: ساخت ارتش کاربران (Thread Group)
برای تست عملکرد وبسایت با JMeter، ابتدا باید مشخص کنیم چند کاربر قرار است به سایت حمله کنند.
- روی Test Plan در منوی سمت چپ راستکلیک کنید.
- مسیر روبرو را بروید: Add > Threads (Users) > Thread Group.
- در پنل سمت راست، تنظیمات زیر را انجام دهید:
- Number of Threads (users): تعداد کاربران همزمان (مثلاً ۱۰ نفر).
- Ramp-up period (seconds): زمانی که طول میکشد تا تمام کاربران وارد شوند (مثلاً ۵ ثانیه). یعنی جیمتر هر ۰.۵ ثانیه یک کاربر جدید اضافه میکند.
- Loop Count: تعداد دفعاتی که هر کاربر عملیات را تکرار میکند (برای تست اولیه روی ۱ بگذارید).
گام سوم: تعریف مأموریت (HTTP Request)
حالا که ۱۰ کاربر داریم، باید بگوییم چه کاری انجام دهند.
- روی Thread Group که ساختید راستکلیک کنید.
- مسیر Add > Sampler > HTTP Request را انتخاب کنید.
- در بخش Web Server تنظیمات هدف را وارد کنید:
- Protocol: http یا https
- Server Name or IP: آدرس سایت بدون پیشوند (مثلاً google.com یا localhost).
- Path: مسیر صفحه (برای صفحه اصلی فقط / بگذارید).

گام چهارم: مشاهده نتایج (Listener) و اجرا
تست بدون گزارش، فایدهای ندارد.
- دوباره روی Thread Group راستکلیک کنید.
- مسیر Add > Listener > View Results Tree را انتخاب کنید.
- حالا دکمه Play (مثلث سبز رنگ در نوار ابزار بالا) را بزنید.
تفسیر نتایج:
در بخش View Results Tree، درخواستها لیست میشوند:
- سپر سبز: درخواست با موفقیت ارسال شد و سرور پاسخ HTTP 200 OK داد.
- سپر قرمز: مشکلی پیش آمده است (ممکن است اینترنت قطع باشد، آدرس اشتباه باشد یا سرور زیر بار از کار افتاده باشد).
هشدار: اگر در همین تست ساده ۱۰ نفره با خطای قرمز مواجه شدید، احتمالاً تنظیمات اینترنت یا پروکسی سیستم شما با جیمتر تداخل دارد. اما اگر در تستهای سنگین (مثلاً ۱۰۰۰ ترد) قرمز دیدید، تبریک میگویم! احتمالاً لپتاپتان برای این کار مناسب نیست.
چالشها و محدودیتهای JMeter

هیچ ابزاری بینقص نیست و اگر آن کسی به شما میگفت ابزار JMeter چیست، مدعی شد از پس هر پروژه و تستی برمیآید، شک نکنید که تابهحال یک تست واقعی در مقیاس بزرگ (Enterprise) اجرا نکرده است. اما بهعنوان کسی که تستهای سرور زیادی انجام داده باید بگویم که جیمتر هم محدودیتهای خودش را دارد. دانستن این محدودیتها باعث میشود در تحلیل نتایج تست با JMeter دچار اشتباه محاسباتی نشوید.
۱. مصرف وحشتناک منابع
شاید بزرگترین چالش جیمتر، اشتهای سیریناپذیر آن برای مصرف RAM و CPU باشد. فرض کنید میخواهید ۱۰,۰۰۰ کاربر همزمان (Concurrent Users) را شبیهسازی کنید. هر «ترد» (Thread) در جیمتر، بخشی از حافظه سیستم شما را اشغال میکند. اگر لپتاپ یا سرور تستکننده شما ضعیف باشد، قبلاز اینکه سرور اصلی (Target) زیر بار برود، سیستم خودتان کرش میکند!
نکته طلایی: هرگز، تکرار میکنم هرگز تستهای سنگین (Load Testing) را در محیط گرافیکی (GUI) اجرا نکنید. محیط گرافیکی فقط برای طراحی تست است. برای اجرا باید از خط فرمان (Non-GUI Mode) استفاده کنید تا منابع سیستم آزاد شود:
jmeter -n -t test.jmx -l result.jtl
۲. عدم اجرای جاوا اسکریپت (مشکل SPAها)
همانطور که قبلاً گفتیم، جیمتر مرورگر نیست. این یعنی اگر سایت شما یک اپلیکیشن تکصفحهای (SPA) مبتنیبر React یا Vue است، جیمتر لود شدن فایلهای JS را میبیند، اما کدهای داخل آن را اجرا نمیکند؛ بنابراین زمان رندر سمت کلاینت در نتایج نادیده گرفته میشود.
- راهکار: برای سناریوهای وابسته به UI، جیمتر را با ابزارهایی مثل Selenium یا Playwright ترکیب کنید (هرچند این کار مصرف منابع را ۱۰ برابر میکند).
۳. گزارشگیری پیشفرض
اگر نسخه قدیمی جیمتر را نصب کنید با گزارشهایی روبرو میشوید که گرافیکشان یادآور ویندوز ۹۸ است. اگرچه در نسخههای جدید (۵.۰ به بالا) قابلیت HTML Dashboard اضافه شده، اما هنوز هم برای تحلیلهای لحظهای و تعاملی ضعیف است.
- راهکار: استفاده از پلاگینهای جانبی یا اتصال جیمتر به پلتفرمهای مانیتورینگ مثل Grafana و InfluxDB.
۴. پیچیدگی در سناریوهای واقعی
ایجاد یک تست ساده آسان است، اما وقتی نیاز به مدیریت نشستها (Sessions)، استخراج توکنهای امنیتی (CSRF Tokens) و منطقهای شرطی (Logic Controllers) دارید، جیمتر میتواند به کلافی سردرگم تبدیل شود. یادگیری مفاهیمی مثل Correlation (همبستگی) برای تست نرمافزار با JMeter در سطح حرفهای، نیازمند صرف زمان و انرژی است.
مقایسه JMeter با رقبا (LoadRunner و k6)
برای تست پرفورمنس، جیمتر تنها ابزار موجود در جهان نیست. شاید بپرسید برای پروژه من کدام مناسبتر است؟ پاسخ به بودجه، دانش فنی تیم و جنس پروژه شما بستگی دارد. بیایید سه رقیب اصلی یعنی LoadRunner، k6 و JMeter را با هم مقایسه کنیم.
جدول مقایسه سریع ابزارهای تست بار
| ویژگی | Apache JMeter | LoadRunner (Micro Focus) | k6 (Grafana) |
|---|---|---|---|
| ماهیت | متنباز (Open Source) و رایگان | تجاری (Enterprise) و گران | متنباز و مدرن |
| زبان اسکریپت | Java / XML (بدون نیاز به کدنویسی زیاد) | C / Java / JS | JavaScript (TypeScript) |
| رابط کاربری (GUI) | دارد (کامل و بصری) | بسیار پیشرفته و پیچیده | ندارد (CLI-based) |
| مصرف منابع | متوسط رو به بالا (سنگین برای ترد بالا) | بهینه اما نیازمند لایسنس برای ترد بالا | بسیار سبک و بهینه |
| مناسب برای | تسترها و مهندسان QA | سازمانهای بزرگ بانکی و دولتی | توسعهدهندگان (Developers) و DevOps |
تحلیل کوتاه رقبا:
- k6: اگر تیم شما متشکل از برنامهنویسانی است که عاشق کدنویسی هستند و از محیطهای گرافیکی بیزارند، k6 گزینه جذابی است. این ابزار برای تست API عالی است و بهراحتی در پایپلاینهای CI/CD جا میشود، اما فاقد امکانات بصری جیمتر است.
- LoadRunner: اگر بودجه نامحدود دارید و میخواهید پروتکلهای عجیبوغریب قدیمی را تست کنید، LoadRunner بهترین است. اما برای ۹۰٪ شرکتها هزینهی آن توجیهپذیر نیست.
- JMeter: نقطه تعادل. رایگان است، جامعه کاربری میلیونی دارد و تقریباً هر کاری را با پلاگینهایش انجام میدهد. اگر میخواهید آموزش Load Testing با JMeter را شروع کنید، خیالتان راحت باشد که منابع یادگیری آن بینهایت است.
پس اگر دولوپر هستید، شاید k6 را ترجیح دهید. اما اگر یک مهندس تست هستید که میخواهید بدون درگیری عمیق با کدنویسی، سناریوهای پیچیده بسازید و گزارشهای بصری بگیرید، جیمتر همچنان بهترین است.
مفهوم تست توزیع شده (Distributed Testing)
بیایید با یک حقیقت تلخ روبرو شویم: لپتاپ قدرتمند شما با رم ۳۲ گیگابایتی، توان شبیهسازی ترافیک دیجیکالا در کمپین عید نوروز را ندارد.
توضیح اینکه، وقتی در تست عملکرد وبسایت با JMeter تعداد تردها (Users) را بالا میبرید، خودِ دستگاه تستکننده به مشکل تبدیل میشود. درخواستها در صف پردازنده سیستم شما گیر میکنند و نتایج تست بهجای نشان دادن ضعف سرور، ضعف سیستم شما را نشان میدهند. اینجا نقطهای است که باید از تست توزیع شده استفاده کنید.
معماری ارباب و بردهها
در معماری ارباب و برده (Master-Slave Architecture)، فشار تست بین چندین کامپیوتر تقسیم میشود:
- یک نود اصلی (Master): وظیفه کنترل تست و جمعآوری نتایج را دارد (بدون ارسال درخواست سنگین).
- چندین نود برده (Slaves/Servers): این ماشینها فقط دستور میگیرند و با تمام قدرت به سرور هدف (Target) درخواست میفرستند.
چالش سختافزاری و راهکار آن Hardware Challenge and Solution
برای اجرای این معماری، شما به چندین کامپیوتر نیاز دارید که همگی در یک شبکه باشند، جاوا و جیمتر روی آنها نصب باشد و از همه مهمتر، قدرت پردازشی (CPU) و حافظه (RAM) بالایی داشته باشند تا زیر بار تست کم نیاورند.
خرید ۵ یا ۱۰ سرور فیزیکی فقط برای چند ساعت تست، توجیه اقتصادی ندارد. برای همین امروزه مفهوم و یک نوع فناوری به نام محاسبات سنگین ابری (HPC) به کمک شما میآید.
اگر میخواهید درباره این رویکرد اطلاعات دقیقتری بهدست بیاورید به مقاله زیر مراجعه کنید.
از سرور محاسبات سنگین (High Performance Computing) بهعنوان Slaveهای جیمتر، یعنی دسترسی آنی به منابع عظیم سختافزاری بدون نگرانی از نگهداری آنها استفاده میشود. شما میتوانید در ابر فردوسی، سرورهایی با پردازندههای چند هستهای و رم بالا اجاره کنید، سناریوی سنگین خود را روی آنها اجرا کرده (Engine) و پساز پایان تست، سرویس را خاموش کنید.
مزایای استفاده از زیرساخت ابری فردوسی برای تست بار: Ferdowsi cloud hpc
- مقیاسپذیری آنی: نیاز به ۱۰,۰۰۰ کاربر دارید؟ منابع سرور را با چند کلیک افزایش دهید.
- شبکه پایدار: پهنای باند تضمین شده برای ارسال میلیونها درخواست بدون قطعی.
- پرداخت بهمیزان مصرف (Pay-as-you-go): فقط هزینه ساعاتی که تست اجرا میشود را میپردازید.
- هدیه شروع: اگر میخواهید همین الان اولین تست سنگین خود را رایگان اجرا کنید، ابر فردوسی ۱۰۰ هزار تومان اعتبار رایگان در اختیار شما قرار میدهد. فقط کافی است ثبتنام کنید.

جمعبندی
در پاسخ به سوال JMeter چیست، فهمیدیم که با یک ابزار همهکاره در دنیای تست طرف هستیم؛ ابزاری که شاید رابط کاربریاش شما را یاد برنامههای قدیمی بیندازد، اما قدرتی دارد که هنوز هم رقبای مدرن به گرد پایش نمیرسند.
اگر به دنبال ابزاری رایگان، منعطف و با قابلیت پشتیبانی از انواع پروتکلها هستید، جیمتر انتخابی ایدئال است. اما فراموش نکنید که ابزار فقط نیمی از راه است. تحلیل درست نتایج و داشتن زیرساخت سختافزاری مناسب (مثل سرورهای HPC) برای اجرای تستهای واقعی، در خیلی از مواقع میتواند برای یک مهندس پرفورمنس سرونوشتساز باشد.
نظر شما چیست؟ تابهحال شده که فکر کنید سرور سایتتان قوی است، اما زیر بار ترافیک واقعی کم بیاورد؟ تجربه خود را از کار با جیمتر یا سایر ابزارهای تست در بخش نظرات بنویسید.
سؤالات متداول
جی متر چیست (JMeter) و چه کاربردی دارد؟
آپاچی جیمتر یک ابزار متنباز (Open Source) مبتنی بر جاوا است که برای تست بار (Load Testing) و سنجش عملکرد نرمافزار طراحی شده است. کاربرد اصلی آن شبیهسازی هزاران کاربر همزمان برای بررسی مقاومت وبسایت، API یا سرور در برابر ترافیک سنگین است.
آیا برای کار با JMeter باید برنامهنویسی بلد باشیم؟
برای شروع و سناریوهای ساده، خیر. جیمتر رابط گرافیکی (GUI) کاملی دارد که با کلیک و تنظیم پارامترها کار میکند. اما برای سناریوهای پیچیده و پیشرفته (مثل مدیریت توکنها یا منطقهای شرطی خاص)، آشنایی اولیه با اسکریپتنویسی (زبان Groovy یا BeanShell) کار شما را بسیار راحتتر میکند.
تفاوت اصلی JMeter و Postman چیست؟
پستمن (Postman) عمدتاً برای تست عملکردی (Functional) یک API استفاده میشود (آیا این API کار میکند؟). اما جیمتر برای تست پرفورمنس (Performance) طراحی شده است (این API زیر فشار ۱۰۰۰ کاربر چقدر سریع کار میکند؟)
پیشنیاز نصب JMeter چیست؟
تنها پیشنیاز اصلی، نصب بودن جاوا (Java JDK) نسخه ۸ یا بالاتر روی سیستم عامل شما (ویندوز، لینوکس یا مک) است. خودِ جیمتر نیاز به نصب ندارد و بهصورت Portable اجرا میشود.
چرا جیمتر هنگام تست هنگ میکند یا ارور OutOfMemory میدهد؟
این مشکل معمولاً دو دلیل دارد:
۱. اجرای تست سنگین در حالت گرافیکی (GUI Mode) که اشتباه است؛ برای تست واقعی باید از خط فرمان (Non-GUI) استفاده کنید.
۲. کمبود منابع سختافزاری (RAM/CPU) در سیستم شما. در این حالت باید Heap Size جاوا را افزایش دهید یا از تست توزیعشده روی سرورهای محاسبات ابری (HPC) استفاده کنید.
