backend/test/scenarios/apis/health.js

68 lines
1.7 KiB
JavaScript
Raw Normal View History

2025-11-07 07:44:23 +00:00
/**
* 健康檢查 API 場景模組
*
* 此模組提供系統健康檢查場景用於監控系統狀態
*
* 使用方式
* import { healthCheck } from './scenarios/apis/health.js';
*/
import http from 'k6/http';
import { check } from 'k6';
import { Rate, Trend } from 'k6/metrics';
// 可選的自定義指標
const healthCheckSuccessRate = new Rate('health_check_success');
const healthCheckDuration = new Trend('health_check_duration');
/**
* 系統健康檢查
* @param {Object} options - 配置選項
* @param {string} options.baseUrl - API 基礎 URL
* @param {Object} options.customMetrics - 自定義指標對象可選
* @returns {Object} 健康檢查結果
*/
export function healthCheck(options = {}) {
const {
baseUrl = __ENV.BASE_URL || 'http://localhost:8888',
customMetrics = null,
} = options;
const url = `${baseUrl}/api/v1/health`;
const params = {
headers: {
'Content-Type': 'application/json',
},
tags: {
name: 'health_check',
api: 'health',
method: 'health_check',
},
};
const startTime = Date.now();
const res = http.get(url, params);
const duration = Date.now() - startTime;
const success = check(res, {
'health check status is 200': (r) => r.status === 200,
'health check response time < 500ms': (r) => r.timings.duration < 500,
}, { name: 'health_check_checks' });
if (customMetrics) {
customMetrics.healthCheckSuccessRate?.add(success);
customMetrics.healthCheckDuration?.add(duration);
} else {
healthCheckSuccessRate.add(success);
healthCheckDuration.add(duration);
}
return {
success,
status: res.status,
responseTime: res.timings.duration,
};
}