부하 테스트 API 통합

이 가이드에서는 명령줄 인터페이스(CLI)와 JavaScript 라이브러리를 애플리케이션에서 직접 사용하여 LoadFocus API Client를 사용하는 방법을 설명합니다.

목차

설치

전역 설치

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

로컬 프로젝트 설치

npm install @loadfocus/loadfocus-api-client

구성

LoadFocus API Client를 사용하기 전에 API 자격 증명을 구성해야 합니다.

CLI 구성

# API 키 및 팀 ID 설정
loadfocus-api config set apikey YOUR_API_KEY
loadfocus-api config set teamid YOUR_TEAM_ID
# 구성 확인
loadfocus-api config show

JavaScript 구성

const { configManager } = require('@loadfocus/loadfocus-api-client');
// 구성 설정
configManager.set('apikey', 'YOUR_API_KEY');
configManager.set('teamid', 'YOUR_TEAM_ID');
// 구성 확인
console.log(configManager.get('apikey')); // API 키를 출력해야 합니다
console.log(configManager.isConfigured()); // 필요한 구성이 모두 설정되었으면 true를 출력해야 합니다

명령줄 인터페이스(CLI)

LoadFocus API Client는 LoadFocus API와 상호 작용하기 위한 포괄적인 CLI를 제공합니다.

JMeter 테스트 실행

테스트 실행하기

# 이름으로 테스트 실행
loadfocus-api jmeter execute --name "My JMeter Test"
# 특정 파라미터로 테스트 실행
loadfocus-api jmeter execute --name "My JMeter Test" --threads 50 --rampup 30 --duration 300

테스트 실행 및 완료 대기

# 테스트를 실행하고 완료를 대기
loadfocus-api jmeter run-test --name "My JMeter Test"
# 임계값과 함께 테스트 실행
loadfocus-api jmeter run-test --name "My JMeter Test" --thresholds "avgresponse<=200,errors==0,p95<=250"
# 사용자 정의 타임아웃 및 폴링 간격으로 테스트 실행
loadfocus-api jmeter run-test --name "My JMeter Test" --waitTimeout 1800 --pollInterval 15

테스트 상태 모니터링

# 이름과 ID로 테스트 상태 확인
loadfocus-api jmeter status --name "My JMeter Test" --id 12345
# 최근 테스트 실행 목록 가져오기
loadfocus-api jmeter runs --limit 10

결과 조회

# 특정 테스트의 결과 가져오기
loadfocus-api jmeter results --name "My JMeter Test" --id 12345
# 특정 메트릭과 함께 결과 가져오기
loadfocus-api jmeter results --name "My JMeter Test" --id 12345 --include samples,avgresponse,errors

임계값 사용

run-test 명령은 성능 메트릭에 기반하여 테스트의 통과 또는 실패를 자동으로 결정하는 임계값 평가를 지원합니다.

# 여러 임계값으로 테스트 실행
loadfocus-api jmeter run-test --name "My JMeter Test" --thresholds "avgresponse<=200,errors==0,p95<=250,hitspersec>=10"

지원되는 임계값 연산자:

  • <= - 이하
  • < - 미만
  • >= - 이상
  • > - 초과
  • == - 같음
  • != - 같지 않음

출력 형식

# JSON 형식으로 결과 가져오기
loadfocus-api jmeter run-test --name "My JMeter Test" --format json > results.json
# 기본 정렬된 출력
loadfocus-api jmeter run-test --name "My JMeter Test"

JavaScript 라이브러리 사용법

LoadFocus API Client는 애플리케이션에서 직접 JavaScript 라이브러리로도 사용할 수 있습니다.

기본 설정

// LoadFocus API Client 가져오기
const loadfocus = require('@loadfocus/loadfocus-api-client');
// 특정 구성 요소 접근
const { JMeterClient, configManager } = loadfocus;

JMeter Client

// JMeter 클라이언트 생성
const jmeterClient = new loadfocus.JMeterClient();
// 또는 명시적 구성으로
const jmeterClient = new loadfocus.JMeterClient({
apikey: 'YOUR_API_KEY',
teamid: 'YOUR_TEAM_ID'
});

테스트 실행

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; // 나중에 사용할 테스트 ID 반환
} catch (error) {
console.error('Error executing test:', error);
}
}

테스트 상태 모니터링

async function checkTestStatus(testName, testId) {
try {
const status = await jmeterClient.getStatus({
testrunname: testName,
testrunid: testId
});
console.log('Test status:', status);
return status.state; // 현재 상태 반환
} catch (error) {
console.error('Error checking test status:', error);
}
}

결과 조회

async function getTestResults(testName, testId) {
try {
// 테스트에 사용 가능한 라벨 가져오기
const labels = await jmeterClient.getLabels({
testrunname: testName,
testrunid: testId
});
console.log('Test labels:', labels);
// 각 라벨에 대한 결과 가져오기
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);
}
}

전체 예시

테스트를 실행하고, 완료를 기다리고, 결과를 조회하는 전체 예시입니다:

const { JMeterClient, configManager } = require('@loadfocus/loadfocus-api-client');
// 구성 설정
configManager.set('apikey', 'YOUR_API_KEY');
configManager.set('teamid', 'YOUR_TEAM_ID');
// 클라이언트 생성
const jmeterClient = new JMeterClient();
async function runCompleteTest() {
try {
// 테스트 실행
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}`);
// 완료 대기
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 {
// 다시 확인하기 전 대기
await new Promise(resolve => setTimeout(resolve, 10000));
}
}
// 결과 가져오기
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);
}
}
// 테스트 실행
runCompleteTest();

고급 사용법

사용자 정의 HTTP 구성

LoadFocus API Client에서 사용하는 HTTP 클라이언트를 사용자 정의할 수 있습니다:

const { JMeterClient } = require('@loadfocus/loadfocus-api-client');
// 사용자 정의 HTTP 옵션으로 클라이언트 생성
const jmeterClient = new JMeterClient({
apikey: 'YOUR_API_KEY',
teamid: 'YOUR_TEAM_ID',
httpOptions: {
timeout: 30000, // 30초
retries: 3,
headers: {
'User-Agent': 'My Custom Application'
}
}
});

오류 처리

LoadFocus API Client는 상세한 오류 정보를 제공합니다:

try {
const result = await jmeterClient.execute({
testrunname: 'My JMeter Test'
});
} catch (error) {
if (error.response) {
// 요청이 이루어졌고 서버가 2xx 범위를 벗어나는 상태 코드로 응답
console.error('API Error:', error.response.status, error.response.data);
} else if (error.request) {
// 요청이 이루어졌지만 응답을 받지 못함
console.error('Network Error:', error.request);
} else {
// 요청 설정 중 오류가 발생
console.error('Request Error:', error.message);
}
}

문제 해결

일반적인 문제

  1. 인증 오류:

    • API 키와 팀 ID가 올바르게 구성되었는지 확인합니다
    • API 키에 필요한 권한이 있는지 확인합니다
  2. 테스트 실행 실패:

    • LoadFocus 계정에 테스트 이름이 존재하는지 확인합니다
    • 계정의 동시 테스트 한도에 도달했는지 확인합니다
  3. 타임아웃 문제:

    • 장시간 실행되는 테스트의 경우 waitTimeout 파라미터를 늘립니다
    • 동기식 대기 대신 폴링 메커니즘 구현을 고려합니다
  4. 결과 조회 문제:

    • 결과를 조회하기 전에 테스트가 완료되었는지 확인합니다
    • 테스트 ID가 올바른지 확인합니다

디버깅

더 자세한 정보를 위해 디버그 로깅을 활성화합니다:

// JavaScript 코드에서
process.env.DEBUG = 'true';
// 또는 CLI를 사용할 때
DEBUG=true loadfocus-api jmeter run-test --name "My JMeter Test"

추가 도움이 필요하시면 LoadFocus API 문서를 참조하거나 지원팀에 문의하세요.