הקדמה
בעבודה עם 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 מאוחד. בעבר, יישמתי ידנית שלבים ל:
- הורדת תוצאות Allure ממספר עבודות.
- איחודם באמצעות סקריפטים של bash.
- יצירת דוח סופי.
- פריסת הדוח ל-GitHub Pages.
גישה זו, על אף שהייתה פונקציונלית, הייתה מסורבלת ונוטה לשגיאות.
מה הייתי צריך לעשות קודם
בעבר, זרימת עבודת בדיקות הרגרסיה הליליות שלי נראתה כך:
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, הצלחתי:
- לבטל את הצורך בשלבים נפרדים של
download-artifact
,merge-reports
ו-deploy-report
. - לאכן את יצירת דוח ה-Allure בשלב אחד.
- לפרסם אוטומטית את היסטוריית הבדיקות ל-GitHub Pages.
- לשפר את ניפוי הבאגים עם פרטי commit וסביבה מקושרים.
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, אני ממליץ בחום לשלב פעולה זו בזרימת העבודה שלכם כדי לשפר את יכולות הדיווח שלכם.
בדיקות מהנות!