הקדמה
במאמר זה, אסביר כיצד לבנות צינור בדיקות טרום-מיזוג (Pre-Merge Testing) באמצעות GitHub Actions.
הפרויקט פותח יחד עם אליאס שורוש.
המחסנית הטכנולוגית ששימשה ליישום הפתרון היא:
שפת תכנות: פייתון
מסגרת בדיקות: pytest
מסגרת דיווח: Allure
מהם GitHub Actions?
לפי מאמר זה:
GitHub Actions הוא API של סיבה ותוצאה ב-GitHub: תזמרו כל זרימת עבודה, המבוססת על כל אירוע, בזמן ש-GitHub מנהלת את הביצוע, מספקת משוב עשיר ומאבטחת כל שלב בדרך. עם GitHub Actions, זרימות עבודה ושלבים הם פשוט קוד בפרוייקט, כך שתוכלו ליצור, לשתף, לעשות שימוש חוזר ולהסתעף משיטות פיתוח התוכנה שלכם.
GitHub Actions הם בחינם ותומכים בפרוייקטים ציבוריים. המאמר יודגם באמצעות הפרוייקט הציבורי שלי, המכיל חבילת בדיקות E2E הכתובות בפייתון.
החשיבות של בדיקות טרום-מיזוג
בעוד שסקירות קוד ממלאות תפקיד חיוני באיתור שגיאות, הן עשויות שלא להספיק כדי להבטיח איכות קוד ועקביות כללית. בדיקות טרום-מיזוג, בשילוב עם סקירות קוד, הן צעד קריטי להבטיח שכל שינוי בבסיס הקוד הראשי עובר בדיקות יסודיות, ומונע רגרסיות ושומר על רמה גבוהה של איכות קוד. בנוסף, שמירה על עקביות בסיס הקוד והקפדה על תקני קידוד יכולה להיות מאתגרת ללא כלים אוטומטיים. עיצוב ידני ומיון של ייבואים הופכים למייגעים ככל שבסיס הקוד גדל, מה שמוביל לחוסר עקביות ולירידה בקריאות.
יישום הפתרון
עלינו ליצור תיקיית .github
בשורש הפרויקט שלנו, ובתוכה ליצור תיקיית workflows
. בתוכה, אנו יוצרים את זרימות העבודה שלנו שהן קבצי YAML.
ניתן למצוא את זרימת העבודה כאן
הדרכה
אנו מריצים את זרימת העבודה על כל push
או pull request
לענף הראשי (main
).
on:
push:
branches: [main]
pull_request:
branches: [main]
היא מריצה את ה-build על מופע של אובונטו המסופק על ידי GitHub, הנה המפרט עבור רצים המתארחים ב-GitHub. כמובן, ישנה גם אפשרות ליצור רצים מותאמים אישית. זרימת עבודה זו פשוטה למדי אז השתמשתי ברץ מתארח.
runs-on: ubuntu-latest
כעת סדרה של שלבי זרימת עבודה מבוצעים לפי הסדר:
- ביצוע
checkout
לקוד העדכני ביותר עם הפעולה הבאה:
- uses: actions/checkout@v2
- בדיקה אוטומטית שכל הקוד מעוצב בהתאם לסטנדרטים באמצעות black:
- uses: psf/black@stable
- בדיקה אוטומטית שהייבואים ממוינים בהתאם לסטנדרטים באמצעות isort:
- uses: isort/isort-action@v1
- התקנת פייתון עם הפעולה הבאה:
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.11"
- התקנת תלויות הפרויקט באמצעות poetry עם השלבים הבאים:
- name: Install Poetry
uses: snok/install-poetry@v1
with:
virtualenvs-create: true
virtualenvs-in-project: true
installer-parallel: true
- name: Load cached venv
id: cached-poetry-dependencies
uses: actions/cache@v3
with:
path: .venv
key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }}
- name: Install Dependencies
run: poetry install --no-interaction --no-root
- הרצת בדיקת טרום-מיזוג יחידה המסומנת בסמן
devRun
(-m devRun
).
- name: Test with pytest
run: |
source .venv/bin/activate
pytest --browser chrome_headless -m devRun
במקרה שלנו, זוהי בדיקה פשוטה שרק פותחת את כתובת ה-URL הבסיסית ומוודאת שאכן הגענו לשם:
@pytest.mark.devRun
def test_sanity(self, request: FixtureRequest):
assert_that(self.driver.current_url).is_equal_to(
request.config.getini("base_url")
)
בדיקה זו יכולה להיות הרבה יותר מסובכת, אך זו משרתת את מטרת הפרויקט שלנו.
שאר הצינור העלה את תוצאות ה-Allure ל-GitHub Pages.
כעת עם צינור זה, אנו יכולים לראות שהקוד נבדק לעיצוב וסדר ייבואים באופן אוטומטי, זרימת העבודה לא תמשיך אם שלבים אלה ייכשלו.
בדיקת הטרום-מיזוג שלנו גם עוברת:
כעת שבדיקות הטרום-מיזוג הושלמו בהצלחה, ואימתו את שינויי הקוד לאיכות ועקביות, אנו יכולים להמשיך בביטחון לתהליך סקירת הקוד. בדיקות הטרום-מיזוג האוטומטיות באמצעות GitHub Actions הבטיחו שרגרסיות פוטנציאליות ושגיאות קריטיות מזוהות ומטופלות מראש, ומספקות בסיס איתן לסקירת הקוד.
לסיכום
במאמר זה, סקרנו את יצירת צינור בדיקות טרום-מיזוג באמצעות GitHub Actions, פייתון ו-pytest.
קריאה נוספת על תכונות GitHub Actions ניתן למצוא בקישור זה.
בדיקות מהנות!