61 lines
1.7 KiB
JavaScript
61 lines
1.7 KiB
JavaScript
/**
|
|
* 認證功能夜間測試
|
|
*
|
|
* 此測試用於 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');
|
|
}
|
|
|