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

אוטומציית בדיקות - אופטימיזציה של דוחות בדיקה של Playwright: איחוד אוטומטי של תוצאות Allure עם GitHub Actions

פורסם:

הקדמה

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

פעולת GitHub שפורסמה לאחרונה, Allure Results Combiner and Publisher, מפשטת תהליך זה, ומאפשרת איחוד חלק של תוצאות בדיקה על פני עבודות מטריצה ופרסום אוטומטי ל-GitHub Pages. במאמר זה, אדון כיצד מינפתי את פעולת ה-GitHub הזו כדי לייעל את זרימת העבודה של דיווח בדיקות ה-Playwright שלי. שיתפתי את הפתרון המוצג במאמר זה בפרויקט הדוגמה שלי Playwright Typescript example project.

האתגר: איחוד דוחות Allure ב-CI/CD

כאשר מריצים בדיקות Playwright ב-GitHub Actions באמצעות אסטרטגיית מטריצה, כל shard מייצר קבצי תוצאות Allure נפרדים. יש לשלב אותם כדי ליצור דוח HTML מאוחד. בעבר, יישמתי ידנית שלבים ל:

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

מה הייתי צריך לעשות קודם

בעבר, זרימת עבודת בדיקות הרגרסיה הליליות שלי נראתה כך:

name: Nightly regression tests

on:
  schedule:
    - cron: "0 0 * * *"
  workflow_dispatch:
    inputs:
      test_command:
        description: "Custom test command"
        required: true
        default: '--grep-invert "@devRun"'
        type: string
      parallelism:
        description: "Number of machines to split tests"
        required: false
        default: 2
        type: number

jobs:
  setup-matrix:
    runs-on: ubuntu-latest
    outputs:
      matrix: ${{ steps.set-matrix.outputs.matrix }}
    steps:
      - id: set-matrix
        run: |
          count=${{ github.event.inputs.parallelism || 2 }}
          matrix=$(seq -s ',' 1 $count)
          echo "matrix=$(jq -cn --argjson groups "[${matrix}]" '{group: $groups}')" >> $GITHUB_OUTPUT

  nightly-test:
    needs: setup-matrix
    if: always()
    runs-on: ubuntu-latest
    container:
      image: mcr.microsoft.com/playwright:v1.50.1-jammy
    env:
      BASE_URL: ${{ vars.BASE_URL }}
    strategy:
      fail-fast: false
      matrix: ${{ fromJson(needs.setup-matrix.outputs.matrix) }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: lts/*
      - name: Cache node_modules
        uses: actions/cache@v4
        id: cache-node-modules
        with:
          path: node_modules
          key: modules-${{ hashFiles('package-lock.json') }}
      - name: Install dependencies
        if: steps.cache-node-modules.outputs.cache-hit != 'true'
        run: npm ci
      - name: Run Playwright tests
        run: |
          npx playwright test ${{ github.event.inputs.test_command || '--grep-invert "@devRun"' }} --shard=${{ matrix.group }}/${{ github.event.inputs.parallelism || 2 }}
      - name: Upload test results and artifacts
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: test-results-${{ matrix.group }}
          path: |
            test-results/
            allure-results
          retention-days: 7

  merge-reports:
    needs: nightly-test
    if: always()
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Download all test results
        uses: actions/download-artifact@v4
        with:
          path: artifacts
      - name: Merge Allure Results
        run: |
          mkdir -p allure-results
          for dir in artifacts/test-results-*/allure-results; do
            cp -r $dir/* allure-results/
          done
      - name: Link Git Information And Browser Version To Allure Report
        working-directory: allure-results
        run: |
          git config --global --add safe.directory "$GITHUB_WORKSPACE"
          {
            echo BUILD_URL=${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
            echo GIT_BRANCH=${{ github.head_ref || github.ref_name }}
            echo GIT_COMMIT_ID=$(git rev-parse HEAD)
            echo GIT_COMMIT_MESSAGE="$(git show -s --format=%s HEAD)"
            echo GIT_COMMIT_AUTHOR_NAME="$(git show -s --format='%ae' HEAD)"
            echo GIT_COMMIT_TIME="$(git show -s --format=%ci HEAD)"
          } >> environment.properties
      - name: Generate Allure Report
        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@v4
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: allure-history

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

כיצד הגישה החדשה פישטה את זרימת העבודה שלי

ניתן למצוא את קוד הפתרון כאן.

על ידי שילוב Allure Results Combiner and Publisher, הצלחתי:

merge-reports:
  needs: nightly-test
  if: always()
  runs-on: ubuntu-latest
  steps:
    - name: Merge and Publish Allure Report
      uses: Valiantsin2021/allure-shard-results-publish@1.0.6
      with:
        github-token: ${{ secrets.GITHUB_TOKEN }}
        add-env: "true"

זה הפחית משמעותית את המורכבות ואת תקורת התחזוקה ושיפר את אמינות דיווח הבדיקות.

מסקנה

פעולת ה-GitHub Allure Results Combiner and Publisher היא משנה משחק עבור אוטומציית בדיקות עם Playwright. היא מפשטת את דיווח הבדיקות, משפרת את יעילות ניפוי הבאגים ומבטיחה רישום היסטורי מובנה ונגיש של הרצות הבדיקה.

אם אתם משתמשים ב-Playwright עם GitHub Actions, אני ממליץ בחום לשלב פעולה זו בזרימת העבודה שלכם כדי לשפר את יכולות הדיווח שלכם.

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


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

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


הפוסט הקודם
אוטומציית בדיקות - לכידת Console Logs ושגיאות JavaScript עם Selenium WebDriver BiDi בפייתון
הפוסט הבא
אוטומציית בדיקות – שחרור כוח ה-AI עם Playwright ו-Typescript