דלג לתוכן
חזור

אוטומציית בדיקות - איך לבנות תהליך CI/CD באמצעות Pytest ו-GitHub Actions

פורסם:

הקדמה

במאמר זה, אסביר כיצד לבנות תהליך בדיקות CI/CD באמצעות GitHub Actions. העבודה על פרויקט זה פותחה יחד עם אליאס שורוש.

קישור לפרויקט.

המחסנית הטכנולוגית ששימשה למימוש הפתרון הם:

שפת תכנות: פייתון

סביבת בדיקות (Framework): pytest

סביבת דיווח (Framework): Allure

מה זה GitHub Actions?

לפי מאמר זה:

GitHub Actions הוא API של סיבה ותוצאה ב-GitHub: תזמור כל תהליך עבודה (workflow), המבוסס על כל אירוע, בזמן ש-GitHub מנהלת את הביצוע, מספקת משוב עשיר ומאבטחת כל שלב בדרך. עם GitHub Actions, תהליכי עבודה ושלבים הם פשוט קוד בפרוייקט (repository), כך שתוכלו ליצור, לשתף, לעשות שימוש חוזר ולבצע פיצול (fork) לפרקטיקות פיתוח התוכנה שלכם.

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

מימוש הפתרון

עלינו ליצור תיקיית .github בשורש הפרויקט שלנו, ובתוכה ליצור תיקיית workflows. בתוכה, ניצור את תהליכי העבודה שלנו, שהם קבצי YAML.

github workflow

זהו תוכן קובץ ה-workflow:

name: Python application

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Starting Selenoid Server (aerokube/selenoid) within actions
        uses: ajinx/selenoid@2.0
      - name: Set up Python 3.9
        uses: actions/setup-python@v2
        with:
          python-version: 3.9
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
      - name: Install plugin
        run: pip install pytest-github-actions-annotate-failures
      - name: Test with pytest
        run: |
          pytest --alluredir=allure-results --browser remote
      - name: Allure results
        uses: simple-elf/allure-report-action@master
        if: always()
        id: allure-report
        with:
          allure_results: allure-results
          allure_report: allure-report
          gh_pages: gh-pages
          allure_history: allure-history
      - name: Deploy report to Github Pages
        if: always()
        uses: peaceiris/actions-gh-pages@v2
        env:
          PERSONAL_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          PUBLISH_BRANCH: gh-pages
          PUBLISH_DIR: allure-history

הסבר שלב אחר שלב

אנו מריצים את ה-workflow על כל push או pull request לענף הראשי (main).

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

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

runs-on: ubuntu-latest

כעת סדרה של שלבים בתהליך העבודה מבוצעים לפי הסדר:

- uses: actions/checkout@v2
- name: Starting Selenoid Server (aerokube/selenoid) within actions
  uses: ajinx/selenoid@2.0
- name: Set up Python 3.9
  uses: actions/setup-python@v2
  with:
    python-version: 3.9
- name: Install dependencies
  run: |
    python -m pip install --upgrade pip
    pip install -r requirements.txt

התקנת תוסף Pytest שמוסיף הערות לכשלונות בדיקה ב-GitHub Actions באמצעות פקודת ה-bash הבאה:

- name: Install plugin
  run: pip install pytest-github-actions-annotate-failures
- name: Test with pytest
  run: |
    pytest --alluredir=allure-results --browser remote
- name: Allure results
  uses: simple-elf/allure-report-action@master
  if: always()
  id: allure-report
  with:
    allure_results: allure-results
    allure_report: allure-report
    gh_pages: gh-pages
    allure_history: allure-history
- name: Deploy report to Github Pages
  if: always()
  uses: peaceiris/actions-gh-pages@v2
  env:
    PERSONAL_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    PUBLISH_BRANCH: gh-pages
    PUBLISH_DIR: allure-history

תוצאת הריצה מוצגת בסטטוס ה-PR כבדיקה (check), אנו יכולים לקבוע אם בדיקה זו נדרשת.

build status

אנו יכולים לקבוע בהגדרות הפרויקט אם הבדיקה היא חובה עבור ה-push.

ניתן לצפות בהיסטוריית התוצאות של הריצה בלשונית ה-Actions.

result history

ניתן למצוא את דוחות Allure בדפי ה-GitHub Pages של הפרויקט:

github pages

לסיכום

במאמר זה, סקרנו את יצירת תהליך אוטומציית CI/CD באמצעות GitHub Actions, פייתון ו-pytest.

קריאה נוספת על התכונות של GitHub Actions ניתן למצוא בקישור זה.

בדיקות מהנות!


הציעו שינויים

מוכנים לבנות את מפת הדרכים שלכם? נתחיל כאן


הפוסט הקודם
אוטומציית בדיקות - כיצד להציג את שם הבדיקה הנוכחית לפני כל בדיקה
הפוסט הבא
אוטומציית בדיקות - כיצד לצרף כתובת IP ציבורית לדוח Allure באמצעות Pytest ו-Requests