backend/test/tests/prod/nightly-auth-test.js

61 lines
1.7 KiB
JavaScript
Raw Normal View History

2025-11-07 07:44:23 +00:00
/**
* 認證功能夜間測試
*
* 此測試用於 Production 環境在夜間低峰時段執行
* 測試重點監控生產環境的認證功能穩定性識別長期性能變化
*/
import { loginWithCredentials, refreshToken } from '../../scenarios/apis/auth.js';
export const options = {
scenarios: {
nightly_auth: {
executor: 'constant-vus',
vus: 5, // 低並發,避免影響生產環境
duration: '5m', // 執行 5 分鐘
tags: { test_type: 'nightly', api: 'auth', environment: 'prod' },
},
},
thresholds: {
checks: ['rate>0.98'], // 98% 的檢查必須通過(生產環境要求更高)
http_req_duration: ['p(95)<2000'], // 95% 的請求應在 2 秒內完成
http_req_failed: ['rate<0.02'], // 失敗率應低於 2%
},
};
export default function () {
const baseUrl = __ENV.BASE_URL || 'https://localhost:8888';
// 注意:生產環境測試應使用預先創建的測試帳號
// 不要創建新帳號,避免污染生產資料
const loginId = __ENV.TEST_LOGIN_ID || 'test@example.com';
const password = __ENV.TEST_PASSWORD || 'TestPassword123!';
// 1. 登入(使用預先創建的測試帳號)
const loginResult = loginWithCredentials({
baseUrl,
loginId,
password,
});
if (!loginResult.success || !loginResult.tokens) {
console.error('Nightly test failed: Login failed');
return;
}
// 2. 刷新 Token
const refreshResult = refreshToken({
baseUrl,
accessToken: loginResult.tokens.accessToken,
refreshToken: loginResult.tokens.refreshToken,
});
if (!refreshResult.success) {
console.error('Nightly test failed: Token refresh failed');
return;
}
console.log('Nightly test passed: Auth operations succeeded');
}