# Hexo Container v0.0.3 测试脚本使用说明 (含日志轮转功能) 本指南详细说明了如何使用针对 Hexo Container v0.0.3 (已验证稳定版) 的 PowerShell 测试脚本套件。 ## v0.0.3 版本核心特性与测试说明 ### 🚀 日志轮转功能 (Log Rotation) v0.0.3 版本新增了自动日志轮转功能,包括: - **智能大小检测** - 当 `deployment.log` 文件达到 1MB 时自动轮转 - **自动备份** - 保留最近 5 个轮转文件 (例如 `deployment.log.1.gz`, `deployment.log.2.gz` 等) - **压缩存储** - 自动压缩旧日志文件 (如 `.gz` 格式) 节省空间 - **权限管理** - 确保 hexo 用户可正常写入日志及轮转操作 - **测试优化** - 相关测试脚本经过优化,可快速验证此功能 ### 📊 测试脚本优化成果 (针对 v0.0.3 测试流程) - **成功率提升** - 测试脚本的整体执行成功率得到提升 - **测试速度** - 日志轮转等测试的验证速度加快 - **阈值优化** - 日志轮转阈值在测试中调整为 1MB,以加速验证过程 - **快速验证** - `log_rotation_test.ps1` 脚本提供快速测试模式,生成少量日志即可验证核心轮转机制 ## 路径修正说明 本次更新修正了 `test/v0.0.3/windows` 目录下所有测试脚本的路径问题,确保脚本能够: 1. **正确调用对应文件** - 无论从哪个目录执行脚本 2. **正确生成文件** - 所有生成的文件都保存在测试目录及其子目录中 3. **使用相对路径** - 提高脚本的可移植性 ## 修正的关键问题 ### 1. 脚本工作目录统一 - 所有脚本现在都会自动切换到脚本所在目录作为工作目录 - 使用 `$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path` 获取脚本目录 - 使用 `Set-Location $ScriptDir` 设置工作目录 ### 2. PowerShell param 块位置修正 - 将 `param()` 块移动到脚本最开始 - 确保脚本可以正确接收参数 ### 3. 路径引用修正 - **Dockerfile 路径**: `../../../Dockerfile_v0.0.3` (相对于测试脚本目录) - **日志目录**: `./logs` (在测试脚本目录下) - **测试数据**: `./test_data` (在测试脚本目录下) - **SSH 密钥**: `./test_data/ssh_keys/test_key` ### 4. Docker 卷挂载路径修正 - 使用 `$ScriptDir` 构建绝对路径进行卷挂载 - 确保容器能正确访问主机文件 ## 文件结构 ``` test/v0.0.3/windows/ ├── build_test.ps1 # 构建测试脚本 ├── run_test.ps1 # 运行测试脚本 ├── functional_test.ps1 # 功能测试脚本 ├── log_rotation_test.ps1 # 🆕 日志轮转测试脚本 (v0.0.3核心新功能) ├── test_log_size_reset.ps1 # 🆕 日志大小重置专项测试脚本 (容器重启修复验证) ├── cleanup_test.ps1 # 清理测试脚本 ├── start.ps1 # 一键测试套件 ├── test_paths.ps1 # 路径验证脚本 ├── logs/ # 测试日志目录 (自动创建) └── test_data/ # 测试数据目录 (自动创建) ├── hexo_site/ # 测试站点文件 └── ssh_keys/ # SSH 密钥文件 ``` ## 🆕 日志轮转测试详解 ### log_rotation_test.ps1 参数 - `-FastRotationTest`: 快速轮转测试 (3批次×50条日志,约3KB) - `-QuickLogGen`: 快速日志生成 (5批次×100条日志,约100KB) - `-LogSizeThresholdMB`: 日志大小阈值(MB) (默认: 1) - `-ContainerName`: 容器名称 (默认: hexo-test-v003) ### test_log_size_reset.ps1 参数 (🆕 容器重启修复验证) - `-ContainerName`: 容器名称 (默认: hexo-test-v003) - `-SshPort`: SSH端口 (默认: 2222) - `-TargetSizeKB`: 目标日志大小(KB) (默认: 25KB,超过20KB阈值) - `-Verbose`: 详细输出模式 此脚本专门验证容器重启时的日志监控修复功能,确保: - 容器重启后不会重复输出旧的Git部署信息 - 日志位置跟踪文件正确工作 - 部署日志监控在重启后正常恢复 ### 测试模式说明 1. **FastRotationTest** - 验证轮转机制,生成少量日志快速验证 2. **QuickLogGen** - 测试日志写入和权限,生成中等量日志 3. **默认模式** - 完整测试,生成足够日志触发实际轮转 ### 使用示例 ```powershell # 快速验证日志轮转机制 (推荐,仅需2分钟) .\log_rotation_test.ps1 -FastRotationTest # 测试日志写入功能 .\log_rotation_test.ps1 -QuickLogGen # 完整日志轮转测试 .\log_rotation_test.ps1 # 自定义日志大小阈值 .\log_rotation_test.ps1 -LogSizeThresholdMB 2 # 🆕 容器重启修复验证测试 .\test_log_size_reset.ps1 # 详细模式运行重启修复测试 .\test_log_size_reset.ps1 -Verbose # 自定义目标大小测试 .\test_log_size_reset.ps1 -TargetSizeKB 30 ``` ### 测试报告 每次测试都会生成详细报告: - **执行日志**: `./logs/log_rotation_test_YYYYMMDD_HHMMSS.log` - **测试报告**: `./logs/log_rotation_test_report_YYYYMMDD_HHMMSS.txt` ## 使用方式 ### 方式1: 从测试目录运行 (推荐) ```powershell cd "c:\Users\Unbal\Desktop\dockerfiledir\test\v0.0.3\windows" .\start.ps1 ``` ### 方式2: 从任意目录运行 ```powershell & "c:\Users\Unbal\Desktop\dockerfiledir\test\v0.0.3\windows\start.ps1" ``` ### 方式3: 单独运行各个测试 ```powershell cd "c:\Users\Unbal\Desktop\dockerfiledir\test\v0.0.3\windows" .\build_test.ps1 # 构建镜像 .\run_test.ps1 # 启动容器 .\functional_test.ps1 # 功能测试 .\log_rotation_test.ps1 # 日志轮转测试 .\cleanup_test.ps1 # 清理环境 ``` ## 测试参数 ### start.ps1 参数 - `-SkipBuild`: 跳过构建阶段 - `-SkipFunctional`: 跳过功能测试 - `-SkipLogRotation`: 跳过日志轮转测试 - `-CleanupAfter`: 测试后自动清理 - `-Tag`: 镜像标签 (默认: hexo-test:v0.0.3) - `-ContainerName`: 容器名称 (默认: hexo-test-v003) - `-HttpPort`: HTTP端口 (默认: 8080) - `-SshPort`: SSH端口 (默认: 2222) ### 使用示例 ```powershell # 完整测试 (包含构建和清理) .\start.ps1 -CleanupAfter # 跳过构建,只测试功能 .\start.ps1 -SkipBuild # 自定义端口 .\start.ps1 -HttpPort 9999 -SshPort 3333 ``` ## 验证路径配置 运行路径验证脚本检查配置: ```powershell .\test_paths.ps1 ``` 此脚本会检查所有关键路径是否正确,并自动创建必需的目录。 ## 注意事项 1. **权限要求**: 需要管理员权限运行 Docker 命令 2. **端口冲突**: 确保指定的端口 (如 8080, 2222) 未被占用 3. **SSH 密钥**: 测试脚本 (`run_test.ps1`) 会优先尝试从用户 `~/.ssh/` 目录或测试子目录 `test_data/ssh_keys/` 中使用现有的 `test_key` (或 `id_rsa`)。如果找不到这些密钥,脚本会自动生成新的密钥对用于测试,并存放于 `test_data/ssh_keys/`。 4. **Docker 环境**: 确保 Docker Desktop 正在运行 5. **日志清理**: `cleanup_test.ps1` 或 `start.ps1 -CleanupAfter` 会清理测试容器和镜像。测试脚本自身产生的日志默认保留在 `logs` 目录下。 ## 故障排除 ### 权限错误 ```powershell # 以管理员身份运行 PowerShell Start-Process powershell -Verb RunAs ``` ### 路径不存在错误 ```powershell # 运行路径验证 .\test_paths.ps1 ``` ### Docker 连接错误 ```powershell # 检查 Docker 状态 docker version ``` ### 端口占用错误 ```powershell # 查看端口占用 netstat -ano | findstr :8080 ```