การผสานรวม API การทดสอบโหลด

คู่มือนี้อธิบายวิธีใช้ LoadFocus API Client ทั้งผ่าน command-line interface (CLI) และการใช้ JavaScript library โดยตรงในแอปพลิเคชันของคุณ

สารบัญ

การติดตั้ง

การติดตั้งแบบ Global

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

การติดตั้งในโปรเจกต์

npm install @loadfocus/loadfocus-api-client

การกำหนดค่า

ก่อนใช้ LoadFocus API Client คุณต้องกำหนดค่า API credentials ของคุณ

การกำหนดค่า CLI

# ตั้งค่า API key และ team 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')); // Should print your API key
console.log(configManager.isConfigured()); // Should print true if all required config is set

Command-Line Interface (CLI)

LoadFocus API Client ให้ CLI ที่ครอบคลุมสำหรับการทำงานกับ LoadFocus API

การรันทดสอบ 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"
# รันทดสอบพร้อม thresholds
loadfocus-api jmeter run-test --name "My JMeter Test" --thresholds "avgresponse<=200,errors==0,p95<=250"
# รันทดสอบพร้อม timeout และ polling interval ที่กำหนดเอง
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

การใช้ Thresholds

คำสั่ง run-test รองรับการประเมิน threshold เพื่อกำหนดโดยอัตโนมัติว่าการทดสอบผ่านหรือล้มเหลวตามเมตริกประสิทธิภาพ

# รันทดสอบพร้อม thresholds หลายตัว
loadfocus-api jmeter run-test --name "My JMeter Test" --thresholds "avgresponse<=200,errors==0,p95<=250,hitspersec>=10"

ตัวดำเนินการ threshold ที่รองรับ:

  • <= - น้อยกว่าหรือเท่ากับ
  • < - น้อยกว่า
  • >= - มากกว่าหรือเท่ากับ
  • > - มากกว่า
  • == - เท่ากับ
  • != - ไม่เท่ากับ

รูปแบบ Output

# ดูผลลัพธ์ในรูปแบบ JSON
loadfocus-api jmeter run-test --name "My JMeter Test" --format json > results.json
# Output แบบจัดรูปแบบเริ่มต้น
loadfocus-api jmeter run-test --name "My JMeter Test"

การใช้ JavaScript Library

LoadFocus API Client ยังสามารถใช้เป็น JavaScript library โดยตรงในแอปพลิเคชันของคุณ

การตั้งค่าพื้นฐาน

// นำเข้า LoadFocus API Client
const loadfocus = require('@loadfocus/loadfocus-api-client');
// เข้าถึงส่วนประกอบเฉพาะ
const { JMeterClient, configManager } = loadfocus;

JMeter Client

// สร้าง JMeter client
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; // Return the test ID for later use
} 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; // Return the current state
} catch (error) {
console.error('Error checking test status:', error);
}
}

การดึงผลลัพธ์

async function getTestResults(testName, testId) {
try {
// ดู labels ที่มีสำหรับการทดสอบ
const labels = await jmeterClient.getLabels({
testrunname: testName,
testrunid: testId
});
console.log('Test labels:', labels);
// ดูผลลัพธ์สำหรับแต่ละ label
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');
// สร้าง client
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 แบบกำหนดเอง

คุณสามารถปรับแต่ง HTTP client ที่ใช้โดย LoadFocus API Client:

const { JMeterClient } = require('@loadfocus/loadfocus-api-client');
// สร้าง 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) {
// Request ถูกส่งและเซิร์ฟเวอร์ตอบกลับด้วย status code
// ที่อยู่นอกช่วง 2xx
console.error('API Error:', error.response.status, error.response.data);
} else if (error.request) {
// Request ถูกส่งแต่ไม่ได้รับ response
console.error('Network Error:', error.request);
} else {
// มีบางอย่างเกิดขึ้นในการตั้งค่า request ที่ทำให้เกิด Error
console.error('Request Error:', error.message);
}
}

การแก้ไขปัญหา

ปัญหาที่พบบ่อย

  1. ข้อผิดพลาดการยืนยันตัวตน:

    • ตรวจสอบว่า API key และ team ID ถูกกำหนดค่าอย่างถูกต้อง
    • ตรวจสอบว่า API key มีสิทธิ์ที่จำเป็น
  2. ความล้มเหลวในการรันทดสอบ:

    • ยืนยันว่าชื่อทดสอบมีอยู่ในบัญชี LoadFocus ของคุณ
    • ตรวจสอบว่าคุณถึงขีดจำกัดการทดสอบพร้อมกันของบัญชีหรือไม่
  3. ปัญหา Timeout:

    • สำหรับการทดสอบที่ใช้เวลานาน เพิ่มพารามิเตอร์ waitTimeout
    • พิจารณาใช้กลไก polling แทนการรอแบบ synchronous
  4. ปัญหาการดึงผลลัพธ์:

    • ตรวจสอบว่าการทดสอบเสร็จแล้วก่อนดึงผลลัพธ์
    • ตรวจสอบว่า test ID ถูกต้อง

การดีบัก

เปิดใช้งาน debug logging สำหรับข้อมูลโดยละเอียดเพิ่มเติม:

// ในโค้ด JavaScript ของคุณ
process.env.DEBUG = 'true';
// หรือเมื่อใช้ CLI
DEBUG=true loadfocus-api jmeter run-test --name "My JMeter Test"

สำหรับความช่วยเหลือเพิ่มเติม กรุณาดู เอกสาร LoadFocus API หรือติดต่อฝ่ายสนับสนุน