GitHub Actions

Ten przewodnik wyjasnia, jak zintegrowac klienta API JMeter LoadFocus z GitHub Actions w celu automatycznego testowania wydajnosci.

Kroki konfiguracji

1. Przechowywanie danych uwierzytelniajacych jako sekretow GitHub

Najpierw przechowuj dane uwierzytelniajace API LoadFocus jako sekrety repozytorium GitHub:

  1. Przejdz do swojego repozytorium GitHub
  2. Przejdz do Settings > Secrets and variables > Actions
  3. Dodaj nastepujace sekrety repozytorium:
    • LOADFOCUS_API_KEY: Twoj klucz API LoadFocus
    • LOADFOCUS_TEAM_ID: ID Twojego zespolu LoadFocus

2. Utworz workflow GitHub Actions

Utworz nowy plik w repozytorium w lokalizacji .github/workflows/performance-test.yml:

name: Performance Tests
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
schedule:
- cron: '0 0 * * 1' # Uruchom o polnocy kazdego poniedzialku
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. Dodaj testowanie wydajnosci do workflow wdrozeniowego

Aby wdrozenie zaleลผalo od wynikow testow wydajnosci:

name: Build, Test, and Deploy
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
# Twoje kroki budowania...
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:
# Twoje kroki wdrozenia...

Zaawansowana konfiguracja

Testowanie macierzowe dla wielu srodowisk

Uruchamiaj testy dla wielu srodowisk lub konfiguracji:

jobs:
performance-test:
runs-on: ubuntu-latest
strategy:
matrix:
environment: [dev, staging, production]
test-type: [api, frontend]
steps:
# Kroki konfiguracji...
- name: Run Performance Tests
run: |
TEST_NAME="${{ matrix.test-type }}_test_${{ matrix.environment }}"
# Dostosuj progi na podstawie srodowiska
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"

Komentowanie wynikow testow w PR

Dodaj wyniki testow wydajnosci jako komentarz do pull requestow:

- 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 = '## Wyniki testow wydajnosci\n\n';
comment += `**Ogolny wynik:** ${results.overallResult}\n\n`;
comment += '### Wyniki wedlug etykiet\n\n';
for (const label of results.labels) {
comment += `#### ${label.label}\n`;
comment += `- **Wynik:** ${label.result}\n`;
comment += `- **Probki:** ${label.metrics.samples}\n`;
comment += `- **Srednia odpowiedz:** ${label.metrics.avgresponse}ms\n`;
comment += `- **Wskaznik bledow:** ${label.metrics.errors}\n\n`;
}
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: comment
});

Wskazowki dotyczace integracji z GitHub Actions

  1. Buforowanie: Buforuj zaleznosci npm, aby przyspieszyc uruchamianie workflow:

    - 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. Kontrola wspolbieznosci: Ogranicz rownolegle testy wydajnosci:

    concurrency:
    group: performance-test-${{ github.ref }}
    cancel-in-progress: false
  3. Testy specyficzne dla srodowiska: Uzyj srodowisk GitHub dla roznych konfiguracji testow:

    jobs:
    performance-test:
    runs-on: ubuntu-latest
    environment: staging
    # Zmienne specyficzne dla srodowiska sa tutaj dostepne
  4. Testowanie warunkowe: Uruchamiaj testy wydajnosci tylko gdy zmienia sie okreslone pliki:

    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]')

Aby uzyskac wiecej informacji, zapoznaj sie z dokumentacja GitHub Actions i dokumentacja klienta API LoadFocus.