/** * 使用者功能夜間測試 * * 此測試用於 Production 環境,在夜間低峰時段執行。 * 測試重點:監控生產環境的使用者功能穩定性,識別長期性能變化。 */ import { loginWithCredentials } from '../../scenarios/apis/auth.js'; import { getUserInfo, updateUserInfo } from '../../scenarios/apis/user.js'; export const options = { scenarios: { nightly_user: { executor: 'constant-vus', vus: 5, // 低並發,避免影響生產環境 duration: '5m', // 執行 5 分鐘 tags: { test_type: 'nightly', api: 'user', 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; } const accessToken = loginResult.tokens.accessToken; // 2. 取得使用者資訊 const getInfoResult = getUserInfo({ baseUrl, accessToken, }); if (!getInfoResult.success) { console.error('Nightly test failed: Get user info failed'); return; } // 3. 更新使用者資訊(僅更新非關鍵欄位,避免影響測試帳號) const updateInfoResult = updateUserInfo({ baseUrl, accessToken, updateData: { nickname: `NightlyTest_${Date.now()}`, }, }); if (!updateInfoResult.success) { console.error('Nightly test failed: Update user info failed'); return; } console.log('Nightly test passed: User operations succeeded'); }