שימוש ב-Locust בפרודקשיין

Locust

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

התשתית – הצעה ראשונית

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

אז המחשבה הראשונית הייתה כזאת:

להכין מכונת VM, אשר יהיה מותקן עליה כבר Python ו-Locust
אחרי זה אנחנו נרצה להכין פייפליין ב-Jenkins אשר ידאג להעביר את הקוד העדכני לתוך המכונה ויריץ את האוטומציה (עשיתי משהו דומה ב-Checkpoint במערכת אוטומציה שהייתה לנו שם).

הבעיה בגישה כזאת היא שזה שם הרבה מקומות בהן הפייפליין שלנו יכול להיכשל:

  • בחיבוריות מול GitHub
  • בחיבוריות מול המכונת VM
  • באוטומציה עצמה

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

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

תשתית – פתרון

על מנת לצמצם את הצורך במכונת VM ובחיבוריות ל-GitHub החלטנו שאנחנו נכניס את הקוד של האוטומציה יחד עם Locust לתוך Docker Image.
היתרון פה הוא שהפייפליין שלנו ימשוך בכל פעם את ה-image האחרון ואז יריץ אותו.

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

אז איך אנחנו יכולים לבנות Docker Image עם locust?

ככה נראה ה-Docker File:

Dockerfile
FROM python:3.11.0

# Install Poetry
RUN curl -sSL https://install.python-poetry.org | python3 - \
    && /root/.local/bin/poetry config virtualenvs.in-project true

WORKDIR /app

# Copy Poetry configurations
COPY pyproject.toml poetry.lock /app/
# Copy test files
COPY . /app
# Install packages with Poetry
RUN /root/.local/bin/poetry install --no-interaction --no-ansi

CMD ["bash"]

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

הנה קובץ הקונפיגורציה שאנחנו משתמשים בו

TOML
[tool.poetry]
name = "load-test"
version = "1.0.0"
description = "load test for the new service"
authors = ["Shaked Eyal <[email protected]>"]
readme = "README.md"
packages = [{include = "load_test"}]

[tool.poetry.dependencies]
python = "^3.11"
locust = "^2.15.0"
requests = "^2.31.0"


[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

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

אחרי שהתקנו את Poetry, אנחנו מגדירים מהי ה-Workdir שהדוקר שלנו ישתמש.
אנחנו מעתיקים את קבצי הקונפיגורציה של poetry לתוך הדוקר  ואת כל קבצי הטסטים פנימה.

ובסוף אנחנו מתקינים את כל החבילות.
חשוב לשים לב שאנחנו מעבירים את `–no-interaction –no-ansi` כי אחרת כאשר מריצים את `docker build` יש בעיות מסוימות.

הרצת הפייפליין

אחרי שהגדרנו את ה-docker image שלנו, אנחנו צריכים להריץ אותו.

כיוון שאנחנו משתמשים ב-poetry אנחנו צריכים להיכנס לסביבה הוירטואלית שלה על מנת להשתמש ב-Locust.
העניין הוא שבתוך דוקר יש בעיה להריץ את הפקודה `poetry shell` כדי להיכנס לסביבה הוירטואלית, ולכן אנחנו נשתמש בפקודה אחרת של poetry שנקראת poetry run

Bash
poetry run locust --headless -H $host -f $scriptFile -u $users -r $spawnRate -t $timeout

כפי שאתם יכולים לראות אנחנו מעבירים את הפרמטרים ל-locust בצורה דינמית דרך jenkins.

סיכום

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

השאר תגובה

Scroll to Top