CI/CD Boru Kəmərində Avtomatlaşdırılmış Testlər: GitHub Actions İlə Praktiki Qurulum
Müasir proqram təminatı komandalarında gün ərzində onlarla yeni kod dəyişikliyi (commit) əsas depoya daxil edilir. Hər bir dəyişikliyin mövcud funksionallığı sındırmadığını (reqressiya) təmin etməyin yeganə yolu testləri avtomatik olaraq CI/CD boru kəmərində icra etməkdir.
1. Continuous Testing Konsepsiyası və DevOps-da Rolu
Continuous Testing (Davamlı Test) proqram təminatının çatdırılma boru kəməri boyunca fasiləsiz olaraq avtomatlaşdırılmış sınaqların icra edilməsidir. Əsas məqsəd erkən mərhələdə rəy (feedback) əldə etmək və xətalı kodun Production-a çatmasının qarşısını almaqdır.
Ənənəvi yanaşmada testlər yalnız sprintin sonunda manual icra edilirdi. DevOps və Agile mühitində isə hər bir Pull Request açıldıqda avtomatik olaraq Unit, Integration və E2E testlər işə düşür.
2. Hazır GitHub Actions Workflow Konfiqurasiyası (.github/workflows/e2e.yml)
name: E2E Automated Regression Suite
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
schedule:
- cron: '0 2 * * *' # Hər gecə saat 02:00-da avtomatik gecə reqressiyası
jobs:
e2e-tests:
timeout-minutes: 45
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
browser: [chromium, firefox, webkit]
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Setup Node.js Environment
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- name: Install Dependencies
run: npm ci
- name: Install Playwright Browsers with OS Dependencies
run: npx playwright install --with-deps ${{ matrix.browser }}
- name: Execute E2E Tests on ${{ matrix.browser }}
run: npx playwright test --project=${{ matrix.browser }}
env:
CI: true
BASE_URL: https://staging.qaacademy.az
- name: Publish Test Results Artifact
if: always()
uses: actions/upload-artifact@v4
with:
name: test-report-${{ matrix.browser }}
path: playwright-report/
retention-days: 14
3. Branch Protection: Xətalı Kodu Necə Bloklamalı?
GitHub Settings → Branches bölməsində Branch Protection Rule yaradaraq:
Require status checks to pass before mergingseçimini aktivləşdirin.- Yuxarıdakı
e2e-testsjob-unu məcburi qeyd edin. - Əgər hər hansı bir test uğursuz olarsa (FAIL), GitHub "Merge" düyməsini qırmızı edərək kodu bloklayacaq.
Tez-tez Verilən Suallar (FAQ)
Testlər uğursuz olduqda (fail) Telegram və ya Slack-ə bildiriş göndərmək olarmı?
Bəli, workflow-a `appleboy/telegram-action` və ya `slackapi/slack-github-action` əlavə edərək test nəticələrini komanda çatına anında göndərə bilərsiniz.