부하 테스트 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_KEYloadfocus-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);}}
문제 해결
일반적인 문제
인증 오류:
- API 키와 팀 ID가 올바르게 구성되었는지 확인합니다
- API 키에 필요한 권한이 있는지 확인합니다
테스트 실행 실패:
- LoadFocus 계정에 테스트 이름이 존재하는지 확인합니다
- 계정의 동시 테스트 한도에 도달했는지 확인합니다
타임아웃 문제:
- 장시간 실행되는 테스트의 경우
waitTimeout파라미터를 늘립니다 - 동기식 대기 대신 폴링 메커니즘 구현을 고려합니다
- 장시간 실행되는 테스트의 경우
결과 조회 문제:
- 결과를 조회하기 전에 테스트가 완료되었는지 확인합니다
- 테스트 ID가 올바른지 확인합니다
디버깅
더 자세한 정보를 위해 디버그 로깅을 활성화합니다:
// JavaScript 코드에서process.env.DEBUG = 'true';// 또는 CLI를 사용할 때DEBUG=true loadfocus-api jmeter run-test --name "My JMeter Test"
추가 도움이 필요하시면 LoadFocus API 문서를 참조하거나 지원팀에 문의하세요.