diff --git a/manage-task-new.ps1 b/manage-task-new.ps1
index ce134a4..8a6e94a 100644
--- a/manage-task-new.ps1
+++ b/manage-task-new.ps1
@@ -39,17 +39,16 @@ function Get-TaskStatus {
Write-Host "Name: $taskName"
Write-Host "State: $($task.State)"
+ # 获取更详细的任务信息
+ $taskInfo = Get-ScheduledTaskInfo -TaskName $taskName -ErrorAction SilentlyContinue
$trigger = $task.Triggers[0]
+
if ($trigger) {
Write-Host "Schedule: Daily at $($trigger.StartBoundary.Split('T')[1].Substring(0,5))"
- try {
- if ($task.NextRunTime) {
- Write-Host "Next Run: $($task.NextRunTime.ToString('yyyy-MM-dd HH:mm'))"
- } else {
- Write-Host "Next Run: Not yet scheduled"
- }
- } catch {
- Write-Host "Next Run: Not available"
+ if ($taskInfo -and $taskInfo.NextRunTime) {
+ Write-Host "Next Run: $($taskInfo.NextRunTime.ToString('yyyy-MM-dd HH:mm'))"
+ } else {
+ Write-Host "Next Run: Task needs to be enabled"
}
}
diff --git a/src/hooks/testLifecycle.js b/src/hooks/testLifecycle.js
index 55ab409..78dd488 100644
--- a/src/hooks/testLifecycle.js
+++ b/src/hooks/testLifecycle.js
@@ -130,55 +130,30 @@ class TestLifecycle {
-
页面测试详情
+ 测试执行详情
| 页面名称 |
- 测试数 |
- 成功数 |
- 失败数 |
- 总耗时 |
+ 测试结果 |
+ 执行时间 |
+ 成功数/总数 |
错误信息 |
- ${Object.entries(pageStats).map(([pageName, stats]) => `
-
- | ${pageName} |
- ${stats.totalTests} |
- ${stats.successCount} |
- ${stats.failureCount} |
- ${(stats.totalDuration / 1000).toFixed(2)}秒 |
-
- ${stats.errors.length > 0 ?
- ` ${stats.errors.join(' ')} ` :
- ''}
- |
-
- `).join('')}
-
-
-
- 详细测试记录
-
-
-
- | 页面名称 |
- 状态 |
- 耗时 |
- 错误信息 |
-
-
-
- ${performanceData.map(record => `
+ ${performanceData.map(record => {
+ const stats = pageStats[record.pageName];
+ return `
| ${record.pageName} |
${record.success ? '通过' : '失败'} |
${(record.duration / 1000).toFixed(2)}秒 |
+ ${stats ? `${stats.successCount}/${stats.totalTests}` : '0/0'} |
${record.errorMessage || ''} |
- `).join('')}
+ `;
+ }).join('')}
diff --git a/src/scripts/runTestsAndSendReport.js b/src/scripts/runTestsAndSendReport.js
index d72e17c..ca9cd10 100644
--- a/src/scripts/runTestsAndSendReport.js
+++ b/src/scripts/runTestsAndSendReport.js
@@ -10,94 +10,53 @@ console.log(`[Node] Starting test execution process...`);
console.log(`[Node] Current environment: ${env}`);
async function runTestsAndSendReport() {
- let testOutput = '';
- let testSuccess = false;
const startTime = new Date();
console.log(`[Node] Test started at: ${startTime.toLocaleString()}`);
try {
- // 根据环境设置加载对应的环境变量文件
+ // 加载环境变量
const envFile = `.env.${env}`;
console.log(`[Node] Loading environment file: ${envFile}`);
- // 检查环境文件是否存在
if (!fs.existsSync(envFile)) {
- console.error(`[Node] Error: Environment file ${envFile} not found!`);
throw new Error(`Environment file ${envFile} not found`);
}
- console.log(`[Node] Environment file found successfully`);
-
+
// 加载环境变量
- dotenv.config({ path: envFile });
- console.log(`[Node] Environment variables loaded successfully`);
+ const envConfig = dotenv.config({ path: envFile });
+ if (envConfig.error) {
+ throw new Error(`Failed to load environment variables: ${envConfig.error.message}`);
+ }
- // 运行测试并捕获输出
- console.log('[Node] ==========================================');
+ // 验证必要的环境变量
+ if (!process.env.BASE_URL) {
+ throw new Error('BASE_URL environment variable is not set in ' + envFile);
+ }
+
+ console.log(`[Node] Environment loaded: BASE_URL = ${process.env.BASE_URL}`);
+
+ // 运行测试
console.log('[Node] Starting Playwright test execution...');
- console.log('[Node] ==========================================');
-
- testOutput = execSync('npx playwright test', {
- encoding: 'utf8',
+ execSync('npx playwright test', {
+ stdio: 'inherit',
env: {
...process.env,
NODE_ENV: env
- },
- stdio: 'inherit' // 这将允许实时显示测试输出
+ }
});
-
- testSuccess = true;
- console.log('[Node] ==========================================');
- console.log('[Node] Test execution completed successfully');
- console.log('[Node] ==========================================');
- } catch (error) {
- console.log('[Node] ==========================================');
- console.error('[Node] Test execution failed with error:');
- console.error(error.message);
- console.log('[Node] ==========================================');
- testOutput = error.output ? error.output.join('\n') : error.message;
- }
+ console.log('[Node] Test execution completed');
- const endTime = new Date();
- const duration = (endTime - startTime) / 1000 / 60; // 转换为分钟
- console.log(`[Node] Test duration: ${duration.toFixed(2)} minutes`);
-
- // 读取性能报告
- console.log('[Node] Attempting to read performance report...');
- let performanceData = '';
- try {
+ // 读取性能报告
+ console.log('[Node] Reading performance report...');
const reportPath = path.join(process.cwd(), 'test-results', 'performance-report.html');
- if (fs.existsSync(reportPath)) {
- performanceData = fs.readFileSync(reportPath, 'utf8');
- console.log('[Node] Performance report read successfully');
- } else {
- console.log('[Node] No performance report found');
- }
- } catch (error) {
- console.error('[Node] Failed to read performance report:', error.message);
- }
+ const performanceReport = fs.readFileSync(reportPath, 'utf8');
- // 构建邮件内容
- console.log('[Node] Preparing email report...');
- const emailHtml = `
- Playwright 自动化测试报告 (${env}环境)
-
-
测试结果: ${testSuccess ? '成功 ✅' : '失败 ❌'}
-
执行环境: ${env}
-
执行时间: ${startTime.toLocaleString()}
-
持续时间: ${duration.toFixed(2)} 分钟
-
-
- ${performanceData ? '性能报告
' + performanceData : ''}
- `;
-
- // 发送邮件
- try {
- console.log('[Node] ==========================================');
+ // 发送邮件
console.log('[Node] Sending test report email...');
const result = await emailService.sendMail({
to: 'dengqichen@iscmtech.com',
- subject: `[${testSuccess ? '成功' : '失败'}] Playwright自动化测试报告 (${env}) - ${startTime.toLocaleDateString()}`,
- html: emailHtml
+ subject: `[成功] Playwright自动化测试报告 (${env}) - ${startTime.toLocaleDateString()}`,
+ html: performanceReport
});
if (result.success) {
@@ -105,11 +64,30 @@ async function runTestsAndSendReport() {
} else {
console.error('[Node] Failed to send test report email:', result.error);
}
- console.log('[Node] ==========================================');
+
} catch (error) {
- console.log('[Node] ==========================================');
- console.error('[Node] Error sending email:', error.message);
- console.log('[Node] ==========================================');
+ console.error('[Node] Error:', error.message);
+
+ // 如果测试失败,尝试读取已生成的报告
+ try {
+ const reportPath = path.join(process.cwd(), 'test-results', 'performance-report.html');
+ if (fs.existsSync(reportPath)) {
+ const performanceReport = fs.readFileSync(reportPath, 'utf8');
+ const result = await emailService.sendMail({
+ to: 'dengqichen@iscmtech.com',
+ subject: `[失败] Playwright自动化测试报告 (${env}) - ${startTime.toLocaleDateString()}`,
+ html: performanceReport
+ });
+
+ if (result.success) {
+ console.log('[Node] Error report email sent successfully');
+ }
+ } else {
+ console.error('[Node] No performance report found');
+ }
+ } catch (emailError) {
+ console.error('[Node] Failed to send error report:', emailError.message);
+ }
}
}
@@ -119,13 +97,9 @@ console.log('[Node] Starting test automation process...');
console.log('[Node] ==========================================');
runTestsAndSendReport().then(() => {
console.log('[Node] Process will exit in 3 seconds...');
- setTimeout(() => {
- process.exit(0);
- }, 3000);
+ setTimeout(() => process.exit(0), 3000);
}).catch(error => {
console.error('[Node] Fatal error:', error);
console.log('[Node] Process will exit in 3 seconds...');
- setTimeout(() => {
- process.exit(1);
- }, 3000);
+ setTimeout(() => process.exit(1), 3000);
});
\ No newline at end of file
diff --git a/test-data/test-progress.json b/test-data/test-progress.json
index 6396400..0637a08 100644
--- a/test-data/test-progress.json
+++ b/test-data/test-progress.json
@@ -1,4 +1 @@
-[
- 1,
- 2
-]
\ No newline at end of file
+[]
\ No newline at end of file