GitHub Actions

Bu kılavuz, otomatik performans testi için LoadFocus JMeter API Client'ı GitHub Actions ile nasıl entegre edeceğinizi açıklar.

Kurulum Adımları

1. Kimlik Bilgilerini GitHub Secrets Olarak Saklayın

Öncelikle LoadFocus API kimlik bilgilerinizi GitHub depo secrets olarak saklayın:

  1. GitHub deponuza gidin
  2. Settings > Secrets and variables > Actions bölümüne gidin
  3. Aşağıdaki depo secrets'larını ekleyin:
    • LOADFOCUS_API_KEY: LoadFocus API anahtarınız
    • LOADFOCUS_TEAM_ID: LoadFocus takım kimliğiniz

2. GitHub Actions İş Akışı Oluşturun

Deponuzda .github/workflows/performance-test.yml yolunda yeni bir dosya oluşturun:

name: Performance Tests
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
# Optional: Run on a schedule
schedule:
- cron: '0 0 * * 1' # Run at midnight every Monday
jobs:
performance-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Install LoadFocus JMeter API Client
run: npm install -g @loadfocus/loadfocus-api-client
- name: Configure LoadFocus API Client
run: |
loadfocus-api config set apikey ${{ secrets.LOADFOCUS_API_KEY }}
loadfocus-api config set teamid ${{ secrets.LOADFOCUS_TEAM_ID }}
- name: Run Performance Tests
run: |
loadfocus-api jmeter run-test \
--name "GitHub_${{ github.repository_owner }}_${{ github.repository }}_${{ github.ref_name }}" \
--thresholds "avgresponse<=200,errors==0,p95<=250" \
--format json > performance_results.json
- name: Upload Performance Test Results
uses: actions/upload-artifact@v3
with:
name: performance-test-results
path: performance_results.json

3. Dağıtım İş Akışınıza Performans Testi Ekleyin

Dağıtımı performans testi sonuçlarına bağımlı hale getirmek için:

name: Build, Test, and Deploy
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
# Your build steps...
performance-test:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Install LoadFocus JMeter API Client
run: npm install -g @loadfocus/loadfocus-api-client
- name: Configure LoadFocus API Client
run: |
loadfocus-api config set apikey ${{ secrets.LOADFOCUS_API_KEY }}
loadfocus-api config set teamid ${{ secrets.LOADFOCUS_TEAM_ID }}
- name: Run Performance Tests
run: |
loadfocus-api jmeter run-test \
--name "GitHub_${{ github.repository }}_${{ github.ref_name }}" \
--thresholds "avgresponse<=200,errors==0,p95<=250" \
--format json > performance_results.json
- name: Upload Performance Test Results
uses: actions/upload-artifact@v3
with:
name: performance-test-results
path: performance_results.json
deploy:
needs: performance-test
runs-on: ubuntu-latest
steps:
# Your deployment steps...

Gelişmiş Yapılandırma

Birden Fazla Ortam İçin Matris Testi

Birden fazla ortama veya yapılandırmaya karşı testler çalıştırın:

jobs:
performance-test:
runs-on: ubuntu-latest
strategy:
matrix:
environment: [dev, staging, production]
test-type: [api, frontend]
steps:
# Setup steps...
- name: Run Performance Tests
run: |
TEST_NAME="${{ matrix.test-type }}_test_${{ matrix.environment }}"
# Adjust thresholds based on environment
if [ "${{ matrix.environment }}" == "production" ]; then
THRESHOLDS="avgresponse<=150,errors==0,p95<=200"
else
THRESHOLDS="avgresponse<=300,errors==0,p95<=500"
fi
loadfocus-api jmeter run-test \
--name "$TEST_NAME" \
--thresholds "$THRESHOLDS" \
--format json > "performance_results_${{ matrix.environment }}_${{ matrix.test-type }}.json"

Performans Testi Raporları Oluşturma

JSON sonuçlarından HTML raporları oluşturun:

- name: Generate HTML Report
run: |
# Install report generator
npm install -g performance-report-generator
# Generate HTML report
performance-report-generator \
--input performance_results.json \
--output performance_report.html
- name: Upload HTML Report
uses: actions/upload-artifact@v3
with:
name: performance-test-report
path: performance_report.html
# Optional: Publish to GitHub Pages
- name: Publish to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./reports
destination_dir: performance-reports

PR'lara Test Sonuçlarını Yorum Olarak Ekleme

Pull request'lere performans testi sonuçlarını yorum olarak ekleyin:

- name: Comment PR
uses: actions/github-script@v6
if: github.event_name == 'pull_request'
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const fs = require('fs');
const results = JSON.parse(fs.readFileSync('performance_results.json', 'utf8'));
let comment = '## Performance Test Results\n\n';
comment += `**Overall Result:** ${results.overallResult}\n\n`;
comment += '### Results by Label\n\n';
for (const label of results.labels) {
comment += `#### ${label.label}\n`;
comment += `- **Result:** ${label.result}\n`;
comment += `- **Samples:** ${label.metrics.samples}\n`;
comment += `- **Avg Response:** ${label.metrics.avgresponse}ms\n`;
comment += `- **Error Rate:** ${label.metrics.errors}\n\n`;
}
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: comment
});

Yeniden Kullanılabilir İş Akışı

Performans testi için yeniden kullanılabilir bir iş akışı oluşturun:

# .github/workflows/reusable-performance-test.yml
name: Reusable Performance Test
on:
workflow_call:
inputs:
test-name:
required: true
type: string
thresholds:
required: false
type: string
default: "avgresponse<=200,errors==0,p95<=250"
wait-timeout:
required: false
type: number
default: 1800
secrets:
LOADFOCUS_API_KEY:
required: true
LOADFOCUS_TEAM_ID:
required: true
jobs:
performance-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Install LoadFocus JMeter API Client
run: npm install -g @loadfocus/loadfocus-api-client
- name: Configure LoadFocus API Client
run: |
loadfocus-api config set apikey ${{ secrets.LOADFOCUS_API_KEY }}
loadfocus-api config set teamid ${{ secrets.LOADFOCUS_TEAM_ID }}
- name: Run Performance Tests
run: |
loadfocus-api jmeter run-test \
--name "${{ inputs.test-name }}" \
--thresholds "${{ inputs.thresholds }}" \
--waitTimeout ${{ inputs.wait-timeout }} \
--format json > performance_results.json
- name: Upload Performance Test Results
uses: actions/upload-artifact@v3
with:
name: performance-test-results
path: performance_results.json

Ardından başka bir iş akışından çağırın:

# .github/workflows/main.yml
jobs:
call-performance-test:
uses: ./.github/workflows/reusable-performance-test.yml
with:
test-name: "API_Performance_Test"
thresholds: "avgresponse<=150,errors==0"
secrets:
LOADFOCUS_API_KEY: ${{ secrets.LOADFOCUS_API_KEY }}
LOADFOCUS_TEAM_ID: ${{ secrets.LOADFOCUS_TEAM_ID }}

GitHub Actions Entegrasyonu İçin İpuçları

  1. Önbellek: İş akışı çalışmalarını hızlandırmak için npm bağımlılıklarını önbelleğe alın:

    - name: Cache Node modules
    uses: actions/cache@v3
    with:
    path: ~/.npm
    key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
    restore-keys: |
    ${{ runner.os }}-node-
  2. Eşzamanlılık Kontrolü: Eşzamanlı performans testlerini sınırlayın:

    concurrency:
    group: performance-test-${{ github.ref }}
    cancel-in-progress: false
  3. Ortama Özel Testler: Farklı test yapılandırmaları için GitHub ortamlarını kullanın:

    jobs:
    performance-test:
    runs-on: ubuntu-latest
    environment: staging
    # Environment-specific variables are available here
  4. Koşullu Test: Performans testlerini yalnızca belirli dosyalar değiştiğinde çalıştırın:

    jobs:
    performance-test:
    if: |
    contains(github.event.pull_request.labels.*.name, 'performance-test') ||
    github.event_name == 'schedule' ||
    contains(github.event.head_commit.message, '[perf-test]')

Daha fazla bilgi için GitHub Actions dokümantasyonuna ve LoadFocus API Client dokümantasyonuna başvurun.