Global Side Menu Width
Placeholder

בדיקות ביצועים ועומסים – JMeter

Apache JMeter הוא כלי לבדיקות ביצועים ועומסים. בעזרת JMeter אפשר לדמות משתמשים במקביל ששולחים בקשות לשרת (בדרך כלל HTTP/HTTPS), למדוד זמני תגובה, אחוזי שגיאות ויציבות מערכת – ולהבין איך המערכת מתנהגת תחת עומס.

לדוגמה:

יש לנו אתר שמחזיר JSON בשליחת API:

ויש תוצאות ביצועים ב-JMeter:


1) התקנה של JMeter

  1. התקינו Java (JDK) במחשב, כי JMeter רץ על Java.
  2. בדקו ב-Terminal ש-Java אכן מותקן:
    java -version

    אם מתקבלת גרסה – Java מותקן.

  3. הורידו את JMeter מהאתר הרשמי של Apache:
  4. ב-Mac דרך Terminal, אפשר להוריד ולחלץ כך:
    cd ~/Downloads
    curl -O https://downloads.apache.org/jmeter/binaries/apache-jmeter-5.6.3.tgz
    tar -xzf apache-jmeter-5.6.3.tgz

    אחרי החילוץ תיווצר תיקייה בשם:

    apache-jmeter-5.6.3
  5. הפעלה:
    • Windows: להריץ bin\jmeter.bat (או jmeterw.bat)
    • Mac/Linux: להריץ bin/jmeter או bin/jmeter.sh
  6. ב-Mac דרך Terminal, כך מפעילים את JMeter:
    cd ~/Downloads/apache-jmeter-5.6.3/bin
    ./jmeter

2) איך פרויקט JMeter בדרך כלל בנוי

בפרויקט בדיקות עומסים מסודר, נהוג לחלק את הסוויטות לפי סוג הבדיקה:

  • 01_smoke/ – בדיקת Smoke ראשונית כדי לוודא שהמערכת, הנתונים וה-API עובדים
  • 02_load/ – בדיקת עומס רגילה
  • 03_stress/ – בדיקת קצה תחת עומס גבוה
  • 04_soak/ – בדיקה ממושכת ליציבות
  • 05_spike/ – בדיקה של קפיצות עומס חדות

במאמר הזה נתמקד רק ב-01_smoke, כי זו בדרך כלל נקודת ההתחלה הנכונה:
קודם מוודאים שהכול עובד, ורק אחר כך עוברים לעומסים כבדים יותר.

בתוך תיקיית 01_smoke בדרך כלל נמצא לפחות:

  • smoke_test.jmx – תכנית הבדיקות של JMeter
  • data/users.csv – נתוני משתמשים או נתוני בדיקה


3) לפני שמריצים JMeter – לוודא שהמערכת פעילה

לפני שמריצים JMeter, חייבים לוודא שהמערכת הנבדקת (האתר או ה-API) כבר רצה וזמינה.

לדוגמה, אם מדובר בשרת מקומי שרץ על פורט 8080, אפשר לבדוק שהוא זמין דרך הכתובת:

http://localhost:8080

רק אחרי שהמערכת פעילה, אפשר להתחיל להריץ את תסריטי ה-Smoke.


4) פתיחת התסריט ב-JMeter (GUI)

אם המטרה היא להבין איך התסריט עובד מתוך JMeter עצמו, הכי נכון להתחיל מ-GUI.

  1. פתחו את JMeter.
  2. לחצו File → Open.
  3. בחרו את הקובץ smoke_test.jmx.
    *ניתן לבקש ChatGPT ליצור קובץ כזה(בסוף המאמר יש פרומט לזה!)

5) מה בדרך כלל רואים בתוך תסריט Smoke ב-JMeter

בתסריט אפשר לפגוש בדרך כלל את הרכיבים הבאים:

 

  • Test Plan – המעטפת הראשית של כל התסריט
  • HTTP Request Defaults – הגדרות משותפות לכל הבקשות, כמו host, port, protocol ו-timeouts
  • CSV Data Set Config – טעינת נתוני בדיקה מתוך קובץ CSV
  • Thread Group – הגדרת מספר המשתמשים, קצב העלייה שלהם ומספר החזרות של התסריט
  • HTTP Requests – הבקשות עצמן, למשל Health, Login, Profile
  • Header Manager – הוספת כותרות HTTP כמו Content-Type: application/json
  • JSON Extractor – חילוץ ערכים מתשובת JSON, למשל token
  • Assertions – בדיקות כמו HTTP 200 או זמן תגובה מקסימלי
  • JTL Writer / Result Collector – שמירת תוצאות ההרצה לקובץ

6) איך מריצים את התסריט מתוך JMeter

  1. פתחו את הקובץ smoke_test.jmx.
  2. ודאו שהמערכת שאתם בודקים אכן רצה וזמינה.
  3. לחצו על כפתור Start (▶) בחלק העליון.

בשלב הזה JMeter יתחיל להריץ את התסריט לפי ההגדרות של ה-Thread Group.


7) איך להריץ רק בקשה אחת, למשל Health

כשלומדים את התסריט, לפעמים עדיף להריץ רק בקשה אחת ולא את כל ה-flow.

למשל, אם רוצים לבדוק רק את Health:

  1. השאירו את Health פעיל.
  2. על שאר הבקשות לחצו קליק ימני → Disable.
  3. לחצו Start.

כך אפשר להבין כל חלק בתסריט בנפרד, בלי להסתבך עם כל הזרימה בבת אחת.


8) איך להבין את Thread Group

ה-Thread Group הוא הרכיב שמגדיר את העומס.

בדרך כלל תראו שם שדות כמו:

  • Number of Threads – כמה משתמשים וירטואליים ירוצו
  • Ramp-Up Period – תוך כמה זמן JMeter יעלה את כל המשתמשים
  • Loop Count – כמה פעמים כל משתמש יריץ את כל התסריט

לדוגמה:

  • 10 Threads – עשרה משתמשים וירטואליים
  • Ramp-Up = 10 – כל המשתמשים יעלו בהדרגה במשך עשר שניות
  • Loop Count = 2 – כל משתמש יריץ את כל התסריט פעמיים

כלומר, Loop Count לא מתאר כמה פעמים התסריט ירוץ "בתוך זמן ה-Ramp-Up", אלא כמה פעמים כל משתמש וירטואלי יבצע את כל רצף הפעולות שבתסריט.

לדוגמה נוספת, אם בתסריט יש שלוש בקשות:

  • Health
  • Login
  • Profile

ואם Loop Count = 2, המשמעות היא שכל משתמש יריץ את כל הרצף הזה פעמיים:

  • פעם ראשונה: Health → Login → Profile
  • פעם שנייה: Health → Login → Profile

אם יש 10 משתמשים, וכל אחד מהם מריץ את התסריט 2 פעמים, אז בפועל כל הרצף ירוץ 20 פעמים בסך הכול.

חשוב להבין שגם אם Ramp-Up = 10, זה לא אומר שכל הבדיקה תסתיים אחרי 10 שניות.
ה-Ramp-Up רק קובע תוך כמה זמן JMeter יעלה את כל המשתמשים הווירטואליים.
אחרי שכל משתמש עולה, הוא עדיין צריך לבצע את כל הבקשות שבתסריט לפי מספר ה-loops שהוגדר.

לכן משך הבדיקה בפועל תלוי בכמה גורמים יחד:

  • כמה משתמשים יש
  • מהו ה-Ramp-Up
  • כמה loops הוגדרו
  • כמה זמן לוקחת כל בקשה


9) איך להבין את CSV Data Set Config

הרכיב הזה קורא נתונים מתוך קובץ CSV ומכניס אותם לתוך משתנים של JMeter.

לדוגמה, אם יש שורה כמו:

demo1,pass1,1001,tenant-a

אפשר להשתמש אחר כך במשתנים כמו:

  • ${username}
  • ${password}
  • ${user_id}
  • ${tenant}

שדות חשובים:

  • Filename – איפה נמצא קובץ ה-CSV
  • Variable Names – שמות המשתנים שייווצרו מהעמודות
  • Ignore first line – האם לדלג על שורת הכותרת
  • Delimiter – התו שמפריד בין העמודות, בדרך כלל פסיק


10) מה עושה Header Manager

Header Manager מוסיף כותרות HTTP לבקשה.

הדוגמה הכי נפוצה היא:

Content-Type: application/json

למה זה חשוב?
כי אם הבקשה שולחת JSON, השרת צריך לדעת לפרש את ה-body כ-JSON.

לפעמים נראה גם headers נוספים כמו:

  • Accept: application/json
  • Authorization: Bearer …


11) מה עושה JSON Extractor

אחרי בקשה כמו Login, השרת מחזיר בדרך כלל תשובת JSON.

לדוגמה:

{
  "success": true,
  "token": "abc123"
}

כדי להשתמש ב-token בהמשך, JMeter צריך לחלץ אותו מתוך ה-response.

לשם כך משתמשים ב-JSON Extractor.

לדוגמה:

  • Name of created variable: auth_token
  • JSON Path: $.token

אחרי זה אפשר להשתמש במשתנה:

${auth_token}

12) מה עושה JTL Writer

זה הרכיב ששומר את תוצאות ההרצה לקובץ.

הקובץ הזה יכול להיקרא למשל:

results.jtl

או:

results.csv

מבחינת הקורא, חשוב להבין שזו פשוט שמירה של תוצאות הריצה:

  • איזו בקשה רצה
  • כמה זמן לקח לה
  • האם הצליחה
  • איזה קוד תשובה חזר

13) איך לקרוא את התוצאות ב-JMeter

אם מוסיפים Listener כמו View Results Tree או View Results in Table, אפשר לראות את התוצאות ישר מתוך JMeter.

עמודות חשובות:

  • Label – שם הבקשה
  • Sample Time – כמה זמן לקח לבקשה
  • Status – הצלחה או כישלון
  • Latency – הזמן עד הבייט הראשון של התשובה
  • Connect Time – זמן יצירת החיבור
  • Thread Name – איזה משתמש וירטואלי הריץ את הבקשה

העמודות הכי חשובות למתחילים הן בדרך כלל:
Label, Sample Time, Status.


14) למה מריצים קודם Smoke?

בדיקת Smoke היא לא בדיקת עומס "אמיתית" במובן הכבד שלה, אלא בדיקת תקינות בסיסית.

המטרה שלה היא לוודא:

  • שהשרת זמין
  • שה-API מגיב
  • שהנתונים תקינים
  • שה-CSV נטען נכון
  • שה-token extraction עובד
  • שהתסריט עצמו לא שבור

רק אחרי שה-Smoke עובר בצורה תקינה, ממשיכים ל-Load, Stress, Soak או Spike.


ללימוד עמוק יותר: העתקו את הפרומט הבא ל-ChatGPT, הדביקו ושלחו.

אתה מומחה QA ובדיקות ביצועים. קראתי את המאמר הזה: https://qablog.co.il/jmeter

תסביר לי בפשטות (אבל מדויק) איך לעבוד עם JMeter דרך ה-GUI:
1) איך פותחים קובץ JMX
2) מה זה Test Plan
3) מה זה Thread Group
4) מה זה CSV Data Set Config
5) מה זה Header Manager
6) מה זה JSON Extractor
7) איך מריצים רק בקשה אחת, למשל Health
8) איך קוראים את התוצאות ב-View Results Tree / Table
9) למה מריצים קודם Smoke לפני Load / Stress / Soak / Spike

תשאל אותי עד 5 שאלות קצרות כדי להתאים את ההנחיות אליי (Windows/Mac, האם Java מותקן, האם JMeter כבר נפתח אצלי, האם המערכת שלי רצה, והאם אני רק לומד או כבר מריץ תסריטים אמיתיים).

מקורות רשמיים: