איך להשתמש ב-Python לבדיקות טעינה של אתרים

דמיין שיש לך אפליקציה אינטרנט חדשה ואתה יודע שהיא פועלת טוב עם קבוצה קטנה של משתמשים. אך איך האפליקציה שלך תגיב לתעבורת התעבורה המוגבלת שלא נצפתה? הפעל בדיקת עומס על האפליקציה שלך באמצעות Python!

במאמר זה, תלמד איך להפעיל בדיקת עומס על אפליקציה אינטרנט על ידי הדמיה של מאות משתמשים שגושבים על האפליקציה שלך בו זמנית.

המשך לקרוא כדי להתחיל בבדיקת עומס של אתרים!

דרישות מקדימות

המדר הזה יהיה הדגמה מעשית. אם ברצונך להתחיל, הקפד לוודא שיש לך את הדברים הבאים:

הגדרת אתר אינטרנט סטטי

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

אם ברצונך להתחיל לרוץ בדיקת עומס נגד API, אתה יכול לדלג לקטע הבא, שבו תתקין את Locust ותריץ אותו על המחשב שלך. הדמוים במדריך זה משתמשים ב-דמו API של Swagger Petstore.

  1. צור קובץ חדש בעורך הקוד המועדף עליך, העתק את הקוד למטה לתוך הקובץ החדש ושמור אותו בשם המועדף עליך. לדוגמה, הקובץ נקרא load_test_page.html.

למטה נמצא מסמך HTML, שמציג את הטקסט "זהו דף בדיקה" כאשר נפתח בדפדפן אינטרנט.

<!DOCTYPE html>
<html>
	<head>
		<title>ATA Load Balancing Demo</title>
	</head>
	<body>
		<h1>This is a test page.</h1>
	</body>
</html>

2. לאחר מכן, פתח את דפדפן האינטרנט האהוב עליך ונווט אל חשבון האחסון שלך ב-פורטל Azure.

3. עקוב אחרי השלבים למטה כדי לאפשר את אחסון אתר סטטי בחשבון אחסון ולהגדיר את דף הבית של האתר שלך:

  • לחץ על אתר סטטי בפאנל הניווט השמאלי. הדף של אתר סטטי הוא המקום בו תעלה את הקבצים לאתר הדגמה שלך.
  • לחץ על מופעל, כפי שמוצג למטה, כדי להפעיל את אירוח האתר הסטטי.
  • הזן load_test_page.html בשדה שם מסמך האינדקס, ולחץ על שמור. בכך יוצר זאת תיק blob ו-URL (נקודת קצה ראשית), המצביעה לאתר שלך. ה-URL עדיין לא יעבוד, אך שמור אותו למען העתיד.
Enabling Static Website Hosting

4. לחץ על ממגד שמור (תצוגה מקדימה) בפאנל השמאלי ונווט אל מכולות Blob → $web. מכולת blob של $web, שנוצרה על ידי יכולת האתר הסטטי, תארח את כל הקבצים הסטטיים שלך.

לחץ על העלאה, ולהעלות את load_test_page.html שיצרת בשלב הראשון.

Uploading Static Files (HTML Page)

5. לבסוף, פתח כרטיסיה חדשה בדפדפן האינטרנט שלך, נווט ל-URL שסימנת בשלב השני, וראה האם ה-URL עובד כעת.

Accessing Static Website’s URL

התקנת מסגרת Locust

עכשיו יש לך אתר לבדיקה, אך עדיין נדרשות כלי בדיקת עומס כדי לבדוק את האתר שלך. כתיבת קוד לניהול בדיקת עומס גבוהה היא זמן רב ומוכרת לשגיאות. למה לא להשתמש ב-מסגרת Locust? Locust הוא כלי פתוח הכתוב ב-Python שאפשר להתקין דרך מנהל החבילות pip.

אם תרצה לשפר את יכולות התכנות שלך ב-Python, כדאי לבדוק את פונקציות Python למתחילים.

Locust יכול להריץ בדיקות עומס נגד אתרים סטטיים, יישומי אינטרנט או אפילו APIים. הדרישה היחידה היא שכל מה שאתה בודק יש לו נקודת קצה HTTP(S) שבאפשרותך להגיע אליה מהמכשיר שלך.

כברירת מחדל, מנהל החבילות pip מתקין חבילות בתיקייה ~/.local על Linux ו-MacOS, שאינה בנתיב המערכת. הנתיב הזה זמין רק לסביבת פיתוח וירטואלית של Python, ולכן תשתמש ב־pip במדריך זה.

  1. פתח את הטרמינל שלך והרץ את הפקודות שלמטה כדי ליצור סביבה וירטואלית חדשה ולהתקין את Locust.
# משתמש במודול venv כדי ליצור סביבה וירטואלית חדשה של Python
python3 -m venv venv 
# הפעל את הסביבה הווירטואלית
source venv/bin/activate 
# התקן את locust בסביבה הווירטואלית החדשה
python3 -m pip install locust
Starting and installing locust in a virtual environment

2. הרץ את הפקודות שלמטה כדי ליצור ספרייה חדשה ולנווט אליה. כך תשמור על קבצי locust מבודדים משאר בסיס הקוד שלך, וזה יעזור לך לארגן טוב יותר. לדוגמה, הספרייה תקרא locust_dir.

mkdir locust_dir
cd locust_dir

3. לבסוף, צור קובץ חדש בשם locustfile.py בתוך הספרייה locust_dir, ואז העתק/הדבק את הקוד לתוך קובץ locustfile.py. קובץ זה יכיל את ההוראות לבדיקה שלך, כגון איך לדמות משתמשים, אילו נקודות קצה המשתמשים יגיעו אליהן, ואילו פרמטרים להעביר.

כאשר ה-Locust רץ, הוא מחפש קובץ ספציפי בשם locustfile.py. לכן הכי טוב לשמור על קובץ כזה בתיקייה נפרדת (locust_dir), כך שה-Locust יוכל למצוא אותו, וניתן ליצור בדיקות נוספות בלתי תלויות בדיקות אחרות.

הקוד למטה מבצע בקשת HTTP GET נגד נתיב המארח שאתה מספק, שזה שווה להרצת curl http://<Host>/ מהשורת פקודה.

פעם שהתגובה מתקבלת, ה-Locust שולח מיידית את הבקשה הבאה, והתהליך חוזר על עצמו לכל משתמש וירטואלי במבחן.

# מייבא מחלקות מה-Locust
from locust import HttpUser, task 

# יצירת משתמש וירטואלי חדש
class HelloWorldUser(HttpUser): 
    # זה אומר ל-Locust לטפל בשיטה למטה 
    # כמשהו שהמשתמש הווירטואלי היה עושה
    @task 
    # הגדרת שיטה חדשה
    def hello_world(self): 
        # השיטה הזו תריץ בקשת HTTP GET על הנתיב `/` 
        # של האתר שאתה בודק
        self.client.get("/") 

אם הנתיב בשיטה נראה בלתי שלם, זה בגלל שהוא כזה. רק הנתיב ופרמטרי השאילתה מוגדרים בקובץ locust, בעוד המארח מועבר בזמן ריצה. השיטה הזו תהיה יותר הגיונית בשלב הבא.

ביצוע מבחן עומס נגד אתרים סטטיים

עכשיו, לאחר שהתקנת את Locust, הגיע הזמן לבצע מבחן עומס! בדיקת עומס היא יותר מכתיבה של סדרת בקשות אינטרנט כדי לראות מה היישום שלך עושה. מבחן מלא תועד זמני תגובה, שיעורי כשל וקודי שגיאה בצומתים והגדרות שונות.

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

הפעל את הפקודה locust כדי להתחיל את היישום הגרפי של locust באמצעות תרחיש הבדיקה מקובץ locustfile.py שלך.

locust 
Run the locust command

2. פתח דפדפן אינטרנט ונווט אל http://localhost:8089/ כדי לגשת ל-Locust. הפורט 8089 הוא הפורט המוגדר כברירת מחדל שעליו רץ Locust.

זכור את ה-URL (נקודת קצה ראשית) שרשמת בשלב שלוש תחת הסעיף "הקמת אתר סטטי"? הגיע הזמן להשתמש בו בשלב הבא!

3. לבסוף, הזן את ה-URL (נקודת קצה ראשית) לתוך שדה ה-Host שנראה בצילום המסך למטה, ולחץ על התחל להמון כדי להתחיל את מבחן העומס. עשייה זו אומרת לכל הבדיקות בקובץ locustfile.py שלך לרוץ נגד ה-URL שהזנת בשדה Host.

לדמו זה, שינוי ערך שדות מספר המשתמשים או קצב ההפקה הוא אופציונלי.

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

Running Locust load test on localhost:8089

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

תראה רשימה של הנקודות הנבדקות למטה, וכן סטטיסטיקות אודות זמני התגובה, הכשלים והבקשות לכל שנייה.

Viewing Locust Chart Showing the Number of Requests, Failures, and Response Times for the Test Case

אם ברצונך לראות את מדדי ביצועי האתר שלך בפלט גרפי, כפי שמוצג למטה, לחץ על לשונית תרשימים.

Viewing graphical output of load tests statistics

ביצוע בדיקת עומס נגד ממשקי API

עכשיו שאתה מכיר ביסודות של לוקוסט, בוא נסתכל על מקרה בדיקה מותאם למציאות יותר. אתר סטטי די יציב, ואין הרבה דברים שיכולים להשתבש כשאתה בוצע בדיקת ביצועים. אז למה לבצע בדיקת עומס נגד ממשקי API?

ממשק API יכול להכיל הרבה יותר שוני בתגובות, אפשרויות אחסון פחות יציבות והשפעה רבה יותר אם ישנה זמן השבת עבור הארגון שלך.

אם אתה לא מכיר את ממשקי ה-API ואיך הם עובדים, יש כתבה כאן שעוסקת ביסודות כמו אימות, שיטות HTTP ותגובות JSON. המאמר מיועד ל-PowerShell, אך המושגים של ה-API יהיו חשובים מאוד מאוחר יותר במאמר זה.

  1. החלף את תוכן הקובץ locustfile.py בקוד הבא, אשר עושה מספר פעולות:
  • מפעיל בקשת GET כדי לאמת את המשתמש כאשר Locust מציע משתמש וירטואלי חדש
  • מפעיל בקשת GET על המארח, שתכשיל כי משאב זה אינו קיים
  • מפעיל בקשת POST שמעבירה גוף JSON על פני טווח של פריטים באותו נקודת קצה.
import time # יבוא של הספריה time מספרג
from locust import HttpUser, task

class HelloWorldUser(HttpUser):

    # המשימה תופעל כאשר המשתמש מופעל
		def on_start(self): 
        # API של Petstore אין לו מסד נתונים של משתמש
        # כל שם משתמש וסיסמה יעבודו
        username = "foo" 
        password = "bar"
        # יש להסתכל על זה כהתאמה ל- loginUser הנמצא במסמכי ה- API
        self.client.get("/user/login?username="+username+"&password="+password) 

    # המשימה תיכשל מכיוון שאין נקודת קצה ב- https://petstore.swagger.io/v2/
    @task
    def hello_world(self): 
        self.client.get("/")

    # ה- (3) לאחר התכתבות המשימה מודיעה ל-Locust להפעיל את המשימה הזו 3 פעמים בתדירות
    @task(3) 
    def update_pets(self):
        # באמצעות לולאה, ספור מ-0 עד 4 והשתמש בזה בבקשת HTTP למטה
        for pet_id in range(5): 
            # בצע בקשת POST ב-HTTP והעבר גוף JSON
            self.client.post(f"/pet?petId={pet_id}", json={"name":"Mittens"}) 
            time.sleep(1) # המתן שנייה אחת לפני שתמשיך

ללא הוספת הצהרת on_start למחלקת הבדיקות שלך, שיטות אחרות תחזיר שגיאת "403 אינם מורשים" כאשר Locust מנסה לבצע בדיקות עליהם. נסה להעריך את השיטה הזו ולהריץ מחדש את Locust כדי לראות כיצד זה משפיע על הבדיקה.

2. לאחר מכן, פתח את מסמכי ה-API של חנות החיות המחמד. המקרה הבדיקה שלמעלה כתוב במיוחד עבור API זה, לכן יש לפתוח את העמוד הזה לצד המדריך כדי לעבור דרך הנקודות הסופיות.

הרץ את הפקודה locust למטה כפי שעשית בקטע "ביצוע בדיקת העומס נגד אתרים סטטיים" (שלב אחד).

locust
Run the locust command

לבסוף, הזן https://petstore.swagger.io/v2 כשרת בממשק המשתמש של Locust.

Viewing endpoints of pet store API being tested

מסקנה

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

עכשיו חשב על האפליקציות הנוכחיות שלך או על אלו שאתה תומך בהן. איך הן יגיבו כאשר זוחלים של משתמשים תומכים בהם? אילו סוגי דברים אתה חושב שבדיקות העומס יכולות להבהיר כדי לשפר את ביצועי האפליקציה שלך?

Source:
https://adamtheautomator.com/load-test/