تخطَّ إلى المحتوى

Add JMeter to PATH (Linux/macOS)

منصةأمر
Ubuntu/Debiansudo apt update && sudo apt install jmeter
Ubuntu (Snap)sudo snap install jmeter
macOS (Homebrew)brew install jmeter
Windows (Chocolatey)choco install jmeter
Binary (Linux/macOS)wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.tgz && tar -xzf apache-jmeter-5.6.3.tgz
Dockerdocker pull justb4/jmeter:latest
PrerequisitesJava JDK 8+ required: java -version
# Add JMeter to PATH (Linux/macOS)
export JMETER_HOME=/opt/apache-jmeter-5.6.3
export PATH=$PATH:$JMETER_HOME/bin

# Verify installation
jmeter --version

# Increase heap size (add to ~/.bashrc or jmeter startup script)
export JVM_ARGS="-Xms1g -Xmx4g"
```## التثبيت

| أمر | وصف |
|---------|-------------|
| `jmeter` | تشغيل واجهة JMeter |
| `jmeter -t test-plan.jmx` | افتح خطة اختبار محددة في واجهة المستخدم الرسومية |
| `jmeter -n -t test.jmx -l results.jtl` | قم بتشغيل الاختبار في الوضع غير الرسومي مع النتائج |
| `jmeter -n -t test.jmx -l results.jtl -e -o report/` | قم بتشغيل الاختبار وإنشاء لوحة معلومات HTML |
| `jmeter --version` or `jmeter -v` | عرض إصدار JMeter |
| `jmeter --help` or `jmeter -h` | عرض المساعدة والخيارات المتاحة |
| `jmeter -?` | قائمة بجميع الخصائص المتاحة |
| `jmeter -n -t test.jmx -j jmeter.log` | قم بتشغيل الاختبار باستخدام ملف سجل مخصص |
| `jmeter -g results.jtl -o dashboard/` | قم بإنشاء تقرير HTML من النتائج الموجودة |
| `jmeter -p custom.properties` | إطلاق باستخدام ملف خصائص مخصص |
| `jmeter -Xmx4g` | إطلاق مع حجم كومة متزايد (4 جيجابايت) |
| `jmeter-server` | ابدأ JMeter في الوضع الخادم للاختبار الموزع |
| `jmeter -n -t test.jmx -l results.csv` | قم بتشغيل الاختبار وحفظ النتائج بصيغة CSV |
| `jmeter -n -t test.jmx -l results.xml` | قم بتشغيل الاختبار وحفظ النتائج بصيغة XML |
| `jmeter -Jusers=100` | تجاوز قيمة الخاصية أثناء التشغيل |### إعداد ما بعد التثبيت

| أمر | وصف |
|---------|-------------|
| `jmeter -n -t test.jmx -r` | قم بإجراء اختبار على جميع الخوادم البعيدة |
| `jmeter -n -t test.jmx -R server1:1099,server2:1099` | قم بتشغيل اختبار على خوادم بعيدة محددة |
| `jmeter -n -t test.jmx -Gusers=100 -Grampup=60` | تعيين الخصائص العامة لخوادم البُعد |
| `jmeter -n -t test.jmx -r -X` | قم بتشغيل اختبار موزع والخروج من الخوادم البعيدة بعد ذلك |
| `jmeter -n -t test.jmx -q env.properties -q users.properties` | استخدم ملفات الخصائص المتعددة |
| `jmeter -H proxy.example.com -P 8080` | التشغيل مع HTTP proxy |
| `jmeter -H proxy.com -P 8080 -u username -a password` | قم بالتشغيل مع proxy مصادق عليه |
| `jmeter -Lorg.apache.jmeter=DEBUG` | قم بتعيين مستوى السجل إلى DEBUG |
| `jmeter -Lorg.apache.jmeter.protocol.http=DEBUG` | تعيين مستوى السجل للحزمة المحددة |
| `jmeter-server -Djava.rmi.server.hostname=192.168.1.100` | ابدأ الخادم بـ hostname محدد |
| `jmeter-server -Dserver_port=1099` | ابدأ الخادم على منفذ مخصص |
| `jmeter -n -t test.jmx -Jsummariser.interval=30` | اضبط فاصل الملخص على 30 ثانية |
| `jmeter -n -t test.jmx -Jjmeter.save.saveservice.output_format=xml` | فرض تنسيق إخراج XML |
| `jmeter -n -t test.jmx -Jjmeter.save.saveservice.response_data=true` | قم بتضمين بيانات الاستجابة في النتائج |
| `jmeter -XX:+UseG1GC -n -t test.jmx` | قم بالتشغيل مع محصل القمامة G1 |
| `jmeter -Dcom.sun.management.jmxremote -n -t test.jmx` | تمكين مراقبة JMX |
| `jmeter -Dhttp.keepAlive=false -n -t test.jmx` | تعطيل HTTP keep-alive |
| `jmeter -g results.jtl -o dashboard/ -f` | فرض الكتابة فوق لوحة المعلومات الموجودة |
| `jmeter -N "localhost | *.internal.com"` | تعيين المضيفين غير الوكيل |
| `PluginsManagerCMD.sh install jpgc-casutg,jpgc-synthesis` | قم بتثبيت إضافات JMeter عبر واجهة سطر الأوامر |
`jmeter.properties`## الأوامر الأساسية
```properties
# Thread and ramp-up settings
jmeter.threads=100
jmeter.rampup=60

# Remote server configuration
remote_hosts=server1:1099,server2:1099,server3:1099

# Result file configuration
jmeter.save.saveservice.output_format=csv
jmeter.save.saveservice.response_data=false
jmeter.save.saveservice.samplerData=false
jmeter.save.saveservice.requestHeaders=false
jmeter.save.saveservice.url=true
jmeter.save.saveservice.responseHeaders=false

# HTTP settings
httpclient.reset_state_on_thread_group_iteration=true
http.keepAlive=true
http.connection.timeout=30000
http.socket.timeout=120000

# Summariser interval (seconds)
summariser.interval=30

# Log level
log_level.jmeter=INFO
log_level.jmeter.engine=DEBUG
```## الاستخدام المتقدم
`user.properties`## الإعدادات
```properties
# Custom variables
baseurl=https://example.com
users=100
rampup=60
duration=300

# Environment-specific settings
env=production
api_key=your_api_key_here
```### ملف خصائص JMeter (```bash
# Set system properties via command line
jmeter -Dhttp.proxyHost=proxy.example.com \
       -Dhttp.proxyPort=8080 \
       -Dhttps.proxyHost=proxy.example.com \
       -Dhttps.proxyPort=8080 \
       -n -t test.jmx
```)
`jmeter`
```bash
# Edit JMETER_HOME/bin/jmeter or set environment variable
export HEAP="-Xms1g -Xmx4g -XX:MaxMetaspaceSize=256m"
export GC_ALGO="-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20"
export JVM_ARGS="$HEAP $GC_ALGO"
```### ملف الخصائص الخاصة بالمستخدم (```properties
# In jmeter.properties on controller machine
remote_hosts=192.168.1.101:1099,192.168.1.102:1099,192.168.1.103:1099

# Server RMI configuration
server.rmi.ssl.disable=true
server.rmi.localport=4000
server_port=1099

# On remote server machines
java.rmi.server.hostname=192.168.1.101
```)
```bash
# Run load test with 100 users, 60s ramp-up, generate HTML report
jmeter -n -t load-test.jmx \
       -Jusers=100 \
       -Jrampup=60 \
       -Jduration=300 \
       -l results/results.jtl \
       -e -o results/dashboard/ \
       -j results/jmeter.log

# View the report
open results/dashboard/index.html  # macOS
xdg-open results/dashboard/index.html  # Linux
# Step 1: Start JMeter servers on remote machines
# On server1 (192.168.1.101):
jmeter-server -Djava.rmi.server.hostname=192.168.1.101

# On server2 (192.168.1.102):
jmeter-server -Djava.rmi.server.hostname=192.168.1.102

# Step 2: Run distributed test from controller
jmeter -n -t distributed-test.jmx \
       -R 192.168.1.101:1099,192.168.1.102:1099 \
       -Gusers=500 \
       -Grampup=120 \
       -l distributed-results.jtl \
       -e -o distributed-report/

# Step 3: Shutdown remote servers
jmeter -n -t distributed-test.jmx -R 192.168.1.101:1099,192.168.1.102:1099 -X
```### الخصائص النظامية
```bash
# Create environment-specific property files
# dev.properties:
echo "baseurl=https://dev-api.example.com" > dev.properties
echo "api_key=dev_key_123" >> dev.properties

# prod.properties:
echo "baseurl=https://api.example.com" > prod.properties
echo "api_key=prod_key_456" >> prod.properties

# Run test against dev environment
jmeter -n -t api-test.jmx \
       -q dev.properties \
       -Jusers=50 \
       -l dev-results.jtl \
       -e -o dev-report/

# Run test against production environment
jmeter -n -t api-test.jmx \
       -q prod.properties \
       -Jusers=200 \
       -l prod-results.jtl \
       -e -o prod-report/
#!/bin/bash
# performance-test.sh - CI/CD pipeline script

# Set variables
TEST_PLAN="test-plans/load-test.jmx"
RESULTS_DIR="results/$(date +%Y%m%d_%H%M%S)"
USERS=${USERS:-100}
DURATION=${DURATION:-300}

# Create results directory
mkdir -p $RESULTS_DIR

# Run JMeter test
jmeter -n -t $TEST_PLAN \
       -Jusers=$USERS \
       -Jduration=$DURATION \
       -l $RESULTS_DIR/results.jtl \
       -e -o $RESULTS_DIR/dashboard/ \
       -j $RESULTS_DIR/jmeter.log

# Check for errors (exit code)
if [ $? -eq 0 ]; then
    echo "Test completed successfully"
    
    # Archive results
    tar -czf $RESULTS_DIR.tar.gz $RESULTS_DIR
    
    # Optional: Upload to artifact storage
    # aws s3 cp $RESULTS_DIR.tar.gz s3://bucket/results/
else
    echo "Test failed with errors"
    exit 1
fi
```### إعدادات JVM (```bash
# Test database performance with parameterized queries
jmeter -n -t database-test.jmx \
       -Jdb.host=db.example.com \
       -Jdb.port=5432 \
       -Jdb.name=testdb \
       -Jdb.user=testuser \
       -Jdb.password=testpass \
       -Jthreads=50 \
       -Jrampup=30 \
       -l db-results.jtl \
       -e -o db-report/

# Generate report from existing results
jmeter -g db-results.jtl -o db-report-regenerated/
```البرنامج النصي)
`jmeter -n`
`export JVM_ARGS="-Xms2g -Xmx4g -XX:+UseG1GC"`
- **استخدم تنسيق CSV للملفات الناتجة**: تنسيق CSV أكثر كفاءة من XML. عطّل جمع البيانات غير الضرورية للحد من التكلفة الإضافية:
`jmeter.save.saveservice.response_data=false`
- **نفّذ فترات تصعيد مناسبة**: تجنب بدء جميع الخيوط في وقت واحد. استخدم التصعيد التدريجي (عادة 10-20٪ من مدة الاختبار) لمحاكاة أنماط الحمل الواقعية.

- **استفد من الاختبار الموزع للأحمال العالية**: يمكن أن تشوه محدودية الجهاز الواحد النتائج. استخدم عدة خوادم JMeter للاختبارات التي تتجاوز 500-1000 خيط.

- **قم بتمييز بيانات الاختبار**: استخدم CSV Data Set Config أو المتغيرات بدلاً من القيم المشفرة. هذا يسمح بتكوين الاختبار بسهولة وتبديل البيئات.

- **راقب موارد النظام أثناء الاختبارات**: تتبع وحدة المعالجة المركزية والذاكرة والشبكة وإدخال/إخراج القرص على أجهزة JMeter والأنظمة المستهدفة. الاستخدام العالي للموارد على JMeter يشير إلى الاختناقات في تنفيذ الاختبار.

- **تحكم بإصدارات خطط الاختبار**: خزّن 
`.jmx`الملفات وملفات الخصائص في Git. استخدم رسائل التسليم ذات المعنى وضع علامات على الإصدارات للتكرار.

- **نفّذ الارتباط والتأكيدات بشكل صحيح**: استخرج القيم الديناميكية (الرموز، معرفات الجلسة) وتحقق من الاستجابات. لا تقس السرعة فقط—تحقق من الصحة.

- **نظّف بين تشغيلات الاختبار**: امسح مجلدات النتائج والسجلات. أعد ضبط حالة التطبيق عند الحاجة لضمان ظروف اختبار متسقة.

## استكشاف الأخطاء وإصلاحها

| مشكلة | حل |
|-------|----------|
| **OutOfMemoryError during test** | Increase heap size: `export JVM_ARGS="-Xms2g -Xmx4g"` or reduce threads/disable response data saving |
| **Connection refused on remote servers** | Check firewall rules for ports 1099 and 4000. Verify `java.rmi.server.hostname` is set correctly on server |
| **Test results show 100% errors** | Verify target URL is accessible, check proxy settings, review `jmeter.log` for detailed error messages |
| **GUI freezes during large tests** | Never run large tests in GUI mode. Use non-GUI: `jmeter -n -t test.jmx -l results.jtl` |
| **Inconsistent results between runs** | تأكد من التهيئة السليمة، مسح ذاكرة التخزين المؤقت/الكعك بين التشغيلات، التحقق من استقرار الشبكة، فحص حمل النظام المستهدف |
| **Cannot generate HTML report** | Verify results file format is compatible (CSV/JTL), ensure output directory is empty or use `-f` flag to force overwrite |
| **Remote servers not starting** | Check Java version compatibility (JDK 8+), verify RMI registry port is available, review `jmeter-server.log` |
| **SSL/TLS certificate errors** | Add certificate to Java keystore or disable validation: `jmeter -Jhttps.default.protocol=TLSv1.2` |
| **Slow test execution** | قم بتعطيل المستمعين في الوضع غير الرسومي، وقلل من تعقيد التأكيدات، وحسّن التعبيرات العادية، واستخدم مُستخرجات فعالة |
| **"Non HTTP response code: java.net.SocketException"** | زيادة قيم المهلة الزمنية، التحقق من إعدادات مجمع الاتصالات، التحقق من سعة النظام المستهدف، تقليل عدد المؤشرات |
| **Distributed test results incomplete** | تأكد من أن جميع الخوادم لديها نفس إصدار خطة الاختبار، تحقق من اتصال الشبكة، تحقق من مزامنة الساعة عبر الخوادم |
| **High CPU on JMeter machine** | قلل من عدد الخيوط، عطّل المعالجات/المستمعين غير الضرورية، استخدم أخذ عينات أبسط، فكر في الاختبار الموزع |
| **Cannot install plugins** | Download Plugins Manager JAR manually to `lib/ext/`, ensure internet connectivity, check proxy settings |
| **Results file corrupted or empty** | تأكد من وجود مساحة كافية على القرص، تحقق من أذونات الملفات، تحقق من اكتمال عملية JMeter بنجاح |
| **"Address already in use" error** | Change server port: `jmeter-server -Dserver_port=1100`, kill existing JMeter processes, wait for port release |
## مرجع سريع: خيارات سطر الأوامر

| خيار | وصف | مثال |
|--------|-------------|---------|
| `-n` | الوضع غير الرسومي (Non-GUI mode) | `jmeter -n -t test.jmx` |
| `-t` | ملف خطة الاختبار | `jmeter -t mytest.jmx` |
| `-l` | سجل نتائج الملف | `jmeter -n -t test.jmx -l results.jtl` |
| `-j` | ملف سجل JMeter | `jmeter -n -t test.jmx -j jmeter.log` |
| `-r` | قم بالتشغيل على جميع الخوادم البعيدة | `jmeter -n -t test.jmx -r` |
| `-R` | قم بالتشغيل على خوادم محددة | `jmeter -n -t test.jmx -R server1,server2` |
| `-g` | إنشاء تقرير من الملف | `jmeter -g results.jtl -o report/` |
| `-e` | إنشاء تقرير بعد الاختبار | `jmeter -n -t test.jmx -l results.jtl -e -o report/` |
| `-o` | مجلد المخرجات للتقرير | `jmeter -g results.jtl -o dashboard/` |
| `-H` | مضيف الوكيل | `jmeter -H proxy.com -P 8080` |
| `-P` | منفذ الوكيل | `jmeter -H proxy.com -P 8080` |
| `-u` | اسم المستخدم للبروكسي | `jmeter -H proxy.com -P 8080 -u user` |
| `-a` | كلمة مرور الوكيل | `jmeter -H proxy.com -P 8080 -a pass` |
| `-J` | حدد خاصية JMeter | `jmeter -Jusers=100 -Jrampup=60` |
| `-G` | حدد الخاصية العامة | `jmeter -Gusers=100` (for remote servers) |
| `-D` | حدد خاصية النظام | `jmeter -Dhttp.proxyHost=proxy.com` |
| `-L` | تعيين مستوى السجل | `jmeter -Lorg.apache.jmeter=DEBUG` |
| `-p` | ملف الخصائص | `jmeter -p custom.properties` |
| `-q` | ملف خصائص إضافي | `jmeter -q env.properties` |
| `-X` | الخروج من الخوادم البعيدة | `jmeter -n -t test.jmx -r -X` || `-f`| حذف مجلد المخرجات بالقوة |`jmeter -g results.jtl -o report/ -f` |