const http = require('http'); const BACKEND_HEALTH_URL = 'http://192.168.110.64:8084/actuator/health'; const MAX_RETRIES = 5; const RETRY_INTERVAL_MS = 3000; function checkBackendHealth() { return new Promise((resolve, reject) => { const url = new URL(BACKEND_HEALTH_URL); const req = http.get(url, (res) => { let data = ''; res.on('data', (chunk) => { data += chunk; }); res.on('end', () => { if (res.statusCode === 200) { console.log('[global-setup] 后端服务健康检查通过:', data); resolve(true); } else { reject(new Error(`后端服务返回非200状态码: ${res.statusCode}, 响应: ${data}`)); } }); }); req.on('error', (err) => { reject(new Error(`无法连接后端服务 ${BACKEND_HEALTH_URL}: ${err.message}`)); }); req.setTimeout(5000, () => { req.destroy(); reject(new Error(`连接后端服务超时: ${BACKEND_HEALTH_URL}`)); }); }); } async function retryCheck(retries) { for (let i = 0; i < retries; i++) { try { await checkBackendHealth(); return; } catch (err) { console.warn(`[global-setup] 第 ${i + 1}/${retries} 次尝试失败: ${err.message}`); if (i < retries - 1) { await new Promise((resolve) => setTimeout(resolve, RETRY_INTERVAL_MS)); } } } throw new Error(`后端服务不可用,已重试 ${retries} 次`); } module.exports = async () => { console.log('[global-setup] 开始 E2E 测试环境准备...'); // 检查后端服务可用性 try { await retryCheck(MAX_RETRIES); console.log('[global-setup] 后端服务可用'); } catch (err) { console.error('[global-setup] 后端服务不可用,测试可能失败:', err.message); // 不阻塞测试,但记录警告 } console.log('[global-setup] E2E 测试环境准备完成'); };