--- name: backend-tests description: 通用的测试脚本管理技能,专注于测试脚本的归类、组织和管理,避免脚本散落在根目录 --- # Tester Skill 本技能专注于测试脚本的组织、归类和管理。当需要创建、管理或执行测试脚本时,应使用此技能来确保所有测试脚本都按标准目录结构归类存放。 ## 何时使用此技能 当遇到以下情况时使用此技能: 1. 测试脚本散落在项目根目录,需要整理归类 2. 需要创建新的测试脚本,需要遵循标准目录结构 3. 需要管理和组织测试脚本文件 4. 需要执行批量测试或验证 5. 需要统一的测试脚本管理规范 ## 如何使用此技能 ### 1. 测试目录结构管理规范 所有测试脚本必须归类存放,禁止在项目根目录创建临时测试文件。使用以下简化目录结构(最多一层子目录): ``` backend/tests/ ├── plugin/ # 插件相关测试(直接放文件) ├── unit/ # 单元测试(直接放文件) ├── integration/ # 集成测试(直接放文件) ├── e2e/ # 端到端测试(直接放文件) ├── scripts/ # 测试脚本工具(直接放文件) └── fixtures/ # 测试数据文件(直接放文件) ``` ### 2. 测试脚本创建和归类流程 创建测试脚本时应遵循以下流程: 1. **确定测试类型**:根据测试目的选择适当的目录(unit/integration/e2e/plugin等) 2. **创建标准目录**:如果目录不存在,先创建标准目录结构 3. **命名规范**:使用有意义的文件名,如 `user-model-test.php`、`api-auth-test.php` 4. **归类存放**:将脚本放在正确的子目录中,避免根目录 5. **清理临时文件**:测试完成后,清理并删除临时测试文件 6. **更新目录文档**:更新相应目录的 README 或说明文件 ### 2. 测试脚本归类规则 所有测试脚本必须按以下规则归类存放(最多一层目录): #### 2.1 按测试类型归类 - **单元测试**:`tests/unit/` - 测试单个类或方法(直接放文件) - **集成测试**:`tests/integration/` - 测试多个组件的交互(直接放文件) - **端到端测试**:`tests/e2e/` - 测试完整业务流程(直接放文件) - **插件测试**:`tests/plugin/` - 专门测试插件功能(直接放文件) - **性能测试**:`tests/performance/` - 测试性能和负载(直接放文件) #### 2.2 命名规范 - 使用有意义的文件名,如 `user-model-test.php`、`api-auth-test.php` - 文件名应反映测试内容,避免通用名称如 `test.php`、`check.php` #### 2.3 禁止行为 - ❌ 禁止在项目根目录创建测试脚本 - ❌ 禁止在 `public/`、`vendor/` 等目录创建测试脚本 - ❌ 禁止使用临时文件名(如 `test1.php`、`temp.php`) - ❌ 禁止测试脚本残留临时文件 - ❌ 禁止创建多层子目录结构(最多一层) ### 4. 测试脚本质量标准 所有测试脚本应满足以下质量标准: - ✅ 按标准目录结构归类存放 - ✅ 使用有意义的文件名,描述测试内容 - ✅ 包含清晰的注释和文档说明 - ✅ 输出标准的测试结果格式(✓/✗/⚠) - ✅ 自动清理临时文件和资源 - ✅ 支持命令行参数和配置选项 - ✅ 可独立运行,不依赖复杂环境 ### 5. 常用测试脚本模板 #### 4.1 单元测试模板(简化版) ```php 'Test User']); if ($user->name === 'Test User') { echo "✓ 用户创建测试成功\n"; } else { echo "✗ 用户创建测试失败\n"; } } } ``` #### 4.2 API集成测试模板(简化版) ```php simulateApiCall('/api/login', [ 'username' => 'test', 'password' => 'password' ]); if ($response['status'] === 200 && isset($response['token'])) { echo "✓ API认证测试成功\n"; } else { echo "✗ API认证测试失败\n"; } } private function simulateApiCall($endpoint, $data) { // 模拟API调用逻辑 return ['status' => 200, 'token' => 'mock_token']; } } ``` #### 4.3 插件安装测试模板(简化版) ```php testMigrationSyntax(); // 测试索引名称长度 $this->testIndexNames(); // 测试引擎设置 $this->testEngineSettings(); } private function testMigrationSyntax() { // 迁移文件语法测试逻辑 } } ``` ### 6. 批量测试执行和归类检查 #### 5.1 运行所有测试(简化版) 使用 `tests/scripts/run-all-tests.php` 脚本执行所有归类好的测试: ```php 0) { echo "⚠ 发现 " . count($unclassified) . " 个未正确归类的测试脚本:\n\n"; foreach ($unclassified as $file) { $relativePath = str_replace($projectRoot . '/', '', $file); echo " • " . $relativePath . "\n"; } echo "\n请将这些文件移动到 tests/ 目录下的相应子目录中。\n"; } else { echo "✓ 所有测试脚本都已正确归类到 tests/ 目录中。\n"; } ``` ### 6. 测试结果验证 每个测试脚本应输出明确的验证结果: - ✓ 成功:绿色标记 - ✗ 失败:红色标记 - ⚠ 警告:黄色标记 - 详细说明:问题描述和修复建议 ### 7. 临时文件管理 所有测试脚本应在完成后清理临时文件: ```php // 清理临时文件 $tempFiles = ['test_*.php', 'check_*.php', 'fix_*.php']; foreach ($tempFiles as $pattern) { // 查找并删除临时文件 } ``` ## 技能资源 本技能包含以下资源: ### 脚本资源 (`scripts/`) - `create-test-directory.php`:创建测试目录结构的脚本 - `test-template-generator.php`:生成各种测试脚本模板 - `validate-migration-files.php`:验证迁移文件的完整脚本 - `check-index-names.php`:检查索引名称长度的脚本 ### 参考资源 (`references/`) - `mysql-limitations.md`:MySQL 限制参考(标识符长度、引擎等) - `laravel-migration-guide.md`:Laravel 迁移最佳实践指南 - `plugin-install-flow.md`:插件安装流程和常见问题 - `testing-best-practices.md`:测试最佳实践和标准 ### 资产资源 (`assets/`) - `test-directory-structure.txt`:测试目录结构模板 - `test-script-templates/`:各种测试脚本模板文件 - `expected-output-examples/`:预期输出示例 ## 执行流程示例 ### 场景1:测试脚本归类检查 1. 使用 `tests/scripts/check-classification.php` 检查是否有未归类的测试脚本 2. 将发现的临时测试文件移动到正确的 `tests/` 子目录中 3. 使用有意义的文件名重命名测试文件 4. 执行 `tests/scripts/cleanup-temp.php` 清理残留临时文件 ### 场景2:创建新的插件测试 1. 在 `tests/plugin/` 目录下创建新的测试文件,如 `official-plugin-test.php` 2. 编写测试逻辑,包含清晰的注释和输出格式 3. 执行测试验证功能是否正常 4. 确保测试完成后清理所有临时资源 ### 场景3:批量执行测试 1. 使用 `tests/scripts/run-all-tests.php` 执行所有测试 2. 查看测试结果报告,识别失败的测试 3. 修复失败的测试或相关问题 4. 重新执行测试确保所有测试通过 通过本技能,可以系统化地管理和执行插件安装相关的测试工作,确保所有修复都经过充分验证,避免重复问题。