Integracja API testow obciazeniowych

Ten przewodnik wyjasnia, jak korzystac z klienta API LoadFocus, zarowno przez interfejs wiersza polecen (CLI), jak i bezposrednio uzywajac biblioteki JavaScript w aplikacjach.

Spis tresci

Instalacja

Instalacja globalna

npm install -g @loadfocus/loadfocus-api-client

Instalacja lokalna w projekcie

npm install @loadfocus/loadfocus-api-client

Konfiguracja

Przed uzyciem klienta API LoadFocus nalezy skonfigurowac dane uwierzytelniajace API.

Konfiguracja CLI

# Ustaw klucz API i ID zespolu
loadfocus-api config set apikey YOUR_API_KEY
loadfocus-api config set teamid YOUR_TEAM_ID
# Zweryfikuj konfiguracje
loadfocus-api config show

Konfiguracja JavaScript

const { configManager } = require('@loadfocus/loadfocus-api-client');
// Ustaw konfiguracje
configManager.set('apikey', 'YOUR_API_KEY');
configManager.set('teamid', 'YOUR_TEAM_ID');
// Zweryfikuj konfiguracje
console.log(configManager.get('apikey')); // Powinno wyswietlic Twoj klucz API
console.log(configManager.isConfigured()); // Powinno wyswietlic true jesli cala wymagana konfiguracja jest ustawiona

Interfejs wiersza polecen (CLI)

Klient API LoadFocus zapewnia kompleksowy CLI do interakcji z API LoadFocus.

Wykonywanie testow JMeter

Wykonanie testu

# Wykonaj test wedlug nazwy
loadfocus-api jmeter execute --name "My JMeter Test"
# Wykonaj test z konkretnymi parametrami
loadfocus-api jmeter execute --name "My JMeter Test" --threads 50 --rampup 30 --duration 300

Uruchomienie testu i oczekiwanie na zakonczenie

# Uruchom test i czekaj na zakonczenie
loadfocus-api jmeter run-test --name "My JMeter Test"
# Uruchom test z progami
loadfocus-api jmeter run-test --name "My JMeter Test" --thresholds "avgresponse<=200,errors==0,p95<=250"
# Uruchom test z niestandardowym timeout i interwlem odpytywania
loadfocus-api jmeter run-test --name "My JMeter Test" --waitTimeout 1800 --pollInterval 15

Monitorowanie statusu testow

# Sprawdz status testu wedlug nazwy i ID
loadfocus-api jmeter status --name "My JMeter Test" --id 12345
# Pobierz liste ostatnich uruchomien testow
loadfocus-api jmeter runs --limit 10

Pobieranie wynikow

# Pobierz wyniki dla konkretnego testu
loadfocus-api jmeter results --name "My JMeter Test" --id 12345
# Pobierz wyniki z konkretnymi metrykami
loadfocus-api jmeter results --name "My JMeter Test" --id 12345 --include samples,avgresponse,errors

Praca z progami

Polecenie run-test obsluguje ewaluacje progow do automatycznego okreslenia, czy test przeszedl lub nie na podstawie metryk wydajnosci.

# Uruchom test z wieloma progami
loadfocus-api jmeter run-test --name "My JMeter Test" --thresholds "avgresponse<=200,errors==0,p95<=250,hitspersec>=10"

Obslugiwane operatory progow:

  • <= - Mniejsze lub rowne
  • < - Mniejsze niz
  • >= - Wieksze lub rowne
  • > - Wieksze niz
  • == - Rowne
  • != - Rozne od

Formaty wyjsciowe

# Pobierz wyniki w formacie JSON
loadfocus-api jmeter run-test --name "My JMeter Test" --format json > results.json
# Domyslne sformatowane wyjscie
loadfocus-api jmeter run-test --name "My JMeter Test"

Uzywanie biblioteki JavaScript

Klient API LoadFocus moze byc rowniez uzywany bezposrednio jako biblioteka JavaScript w aplikacjach.

Podstawowa konfiguracja

// Importuj klienta API LoadFocus
const loadfocus = require('@loadfocus/loadfocus-api-client');
// Uzyskaj dostep do konkretnych komponentow
const { JMeterClient, configManager } = loadfocus;

Klient JMeter

// Utworz klienta JMeter
const jmeterClient = new loadfocus.JMeterClient();
// Lub z jawna konfiguracja
const jmeterClient = new loadfocus.JMeterClient({
apikey: 'YOUR_API_KEY',
teamid: 'YOUR_TEAM_ID'
});

Wykonywanie testow

async function executeTest() {
try {
const result = await jmeterClient.execute({
testrunname: 'My JMeter Test',
threads: 50,
rampup: 30,
duration: 300
});
console.log('Test execution started:', result);
return result.testrunid; // Zwroc ID testu do pozniejszego uzycia
} catch (error) {
console.error('Error executing test:', error);
}
}

Monitorowanie statusu testow

async function checkTestStatus(testName, testId) {
try {
const status = await jmeterClient.getStatus({
testrunname: testName,
testrunid: testId
});
console.log('Test status:', status);
return status.state; // Zwroc biezacy stan
} catch (error) {
console.error('Error checking test status:', error);
}
}

Pobieranie wynikow

async function getTestResults(testName, testId) {
try {
// Pobierz dostepne etykiety dla testu
const labels = await jmeterClient.getLabels({
testrunname: testName,
testrunid: testId
});
console.log('Test labels:', labels);
// Pobierz wyniki dla kazdej etykiety
const allResults = [];
for (const label of labels) {
const labelResults = await jmeterClient.getResults({
testrunname: testName,
testrunid: testId,
filter: label
});
allResults.push({
label,
results: labelResults
});
}
console.log('Test results:', allResults);
return allResults;
} catch (error) {
console.error('Error retrieving test results:', error);
}
}

Pelny przyklad

Oto pelny przyklad, ktory wykonuje test, czeka na zakonczenie i pobiera wyniki:

const { JMeterClient, configManager } = require('@loadfocus/loadfocus-api-client');
// Konfiguracja
configManager.set('apikey', 'YOUR_API_KEY');
configManager.set('teamid', 'YOUR_TEAM_ID');
// Utworz klienta
const jmeterClient = new JMeterClient();
async function runCompleteTest() {
try {
// Wykonaj test
console.log('Executing test...');
const executeResult = await jmeterClient.execute({
testrunname: 'My JMeter Test'
});
const testId = executeResult.testrunid;
console.log(`Test execution started with ID: ${testId}`);
// Czekaj na zakonczenie
console.log('Waiting for test to complete...');
let completed = false;
while (!completed) {
const status = await jmeterClient.getStatus({
testrunname: 'My JMeter Test',
testrunid: testId
});
console.log(`Current state: ${status.state}`);
if (status.state === 'finished') {
completed = true;
} else if (status.state === 'failed' || status.state === 'error') {
throw new Error(`Test failed with state: ${status.state}`);
} else {
// Czekaj przed ponownym sprawdzeniem
await new Promise(resolve => setTimeout(resolve, 10000));
}
}
// Pobierz wyniki
console.log('Getting test results...');
const labels = await jmeterClient.getLabels({
testrunname: 'My JMeter Test',
testrunid: testId
});
const allResults = [];
for (const label of labels) {
const labelResults = await jmeterClient.getResults({
testrunname: 'My JMeter Test',
testrunid: testId,
filter: label
});
allResults.push({
label,
results: labelResults
});
}
console.log('Test results:', JSON.stringify(allResults, null, 2));
return allResults;
} catch (error) {
console.error('Error running test:', error);
}
}
// Uruchom test
runCompleteTest();

Zaawansowane uzycie

Niestandardowa konfiguracja HTTP

Mozesz dostosowac klienta HTTP uzywaneego przez klienta API LoadFocus:

const { JMeterClient } = require('@loadfocus/loadfocus-api-client');
// Utworz klienta z niestandardowymi opcjami HTTP
const jmeterClient = new JMeterClient({
apikey: 'YOUR_API_KEY',
teamid: 'YOUR_TEAM_ID',
httpOptions: {
timeout: 30000, // 30 sekund
retries: 3,
headers: {
'User-Agent': 'My Custom Application'
}
}
});

Obsluga bledow

Klient API LoadFocus dostarcza szczegolowe informacje o bledach:

try {
const result = await jmeterClient.execute({
testrunname: 'My JMeter Test'
});
} catch (error) {
if (error.response) {
// Zadanie zostalo wyslane i serwer odpowiedzial kodem statusu
// spoza zakresu 2xx
console.error('API Error:', error.response.status, error.response.data);
} else if (error.request) {
// Zadanie zostalo wyslane, ale nie otrzymano odpowiedzi
console.error('Network Error:', error.request);
} else {
// Cos poszlo nie tak podczas konfiguracji zadania
console.error('Request Error:', error.message);
}
}

Rozwiazywanie problemow

Typowe problemy

  1. Bledy uwierzytelniania:

    • Upewnij sie, ze klucz API i ID zespolu sa prawidlowo skonfigurowane
    • Sprawdz, czy klucz API ma wymagane uprawnienia
  2. Niepowodzenia wykonania testow:

    • Zweryfikuj, ze nazwa testu istnieje na Twoim koncie LoadFocus
    • Sprawdz, czy nie osiagnales limitu rownoczesnych testow konta
  3. Problemy z timeout:

    • Dla dlugo trwajacych testow zwieksz parametr waitTimeout
    • Rozwaลผ implementacje mechanizmu odpytywania zamiast synchronicznego oczekiwania
  4. Problemy z pobieraniem wynikow:

    • Upewnij sie, ze test zostal zakonczony przed pobieraniem wynikow
    • Sprawdz, czy ID testu jest prawidlowe

Debugowanie

Wlacz logowanie debugowania dla bardziej szczegolowych informacji:

// W kodzie JavaScript
process.env.DEBUG = 'true';
// Lub przy uzywaniu CLI
DEBUG=true loadfocus-api jmeter run-test --name "My JMeter Test"

Aby uzyskac dodatkowa pomoc, zapoznaj sie z dokumentacja API LoadFocus lub skontaktuj sie z zespolem wsparcia.