# FendxPHP 快速测试指南 ## 🚀 快速开始 ### 1. 环境准备 ```bash # 克隆项目 git clone https://github.com/your-org/fendx-php.git cd fendx-php # 安装依赖 composer install # 复制环境配置 cp .env.example .env ``` ### 2. 运行测试 #### Windows 环境 ```powershell # 运行所有测试 .\scripts\run-tests.ps1 # 运行单元测试 .\scripts\run-tests.ps1 unit --coverage # 运行集成测试 .\scripts\run-tests.ps1 integration # 运行API测试 .\scripts\run-tests.ps1 api # 运行性能测试 .\scripts\run-tests.ps1 performance ``` #### Linux/Mac 环境 ```bash # 设置执行权限 chmod +x scripts/run-tests.sh # 运行所有测试 ./scripts/run-tests.sh # 运行单元测试 ./scripts/run-tests.sh unit --coverage # 运行集成测试 ./scripts/run-tests.sh integration # 运行API测试 ./scripts/run-tests.sh api # 运行性能测试 ./scripts/run-tests.sh performance ``` ### 3. 使用控制台命令 ```bash # 运行单元测试 php bin/console test:unit # 运行集成测试 php bin/console test:integration # 运行API测试 php bin/console test:api # 运行性能测试 php bin/console test:performance # 运行所有测试 php bin/console test:all --coverage ``` ## 📊 测试类型说明 ### 单元测试 (Unit Tests) - **位置**: `tests/Unit/` - **用途**: 测试单个类和方法 - **运行时间**: 快速 (< 1分钟) - **覆盖率**: 代码覆盖率分析 ```bash # 运行单元测试 php bin/console test:unit --coverage # 过滤特定测试 php bin/console test:unit --filter=UserTest ``` ### 集成测试 (Integration Tests) - **位置**: `tests/Integration/` - **用途**: 测试组件间交互 - **运行时间**: 中等 (2-5分钟) - **环境**: 需要数据库和缓存 ```bash # 运行集成测试 php bin/console test:integration # 使用Docker环境 ./scripts/run-tests.sh integration --no-docker=false ``` ### API测试 (API Tests) - **位置**: `tests/API/` - **用途**: 测试HTTP接口 - **运行时间**: 中等 (3-8分钟) - **环境**: 需要完整应用服务 ```bash # 运行API测试 php bin/console test:api # 启动服务器进行测试 php -S localhost:8000 -t public/ vendor/bin/codecept run api ``` ### 性能测试 (Performance Tests) - **位置**: `tests/Performance/` - **用途**: 性能基准测试 - **运行时间**: 较长 (5-15分钟) - **指标**: 响应时间、吞吐量、内存使用 ```bash # 运行性能测试 php bin/console test:performance # 并发测试 ab -n 1000 -c 10 http://localhost:8000/api/users ``` ### 安全测试 (Security Tests) - **位置**: `tests/Security/` - **用途**: 安全漏洞扫描 - **运行时间**: 中等 (2-5分钟) - **检查**: 依赖漏洞、代码安全 ```bash # 运行安全测试 php bin/console test:security # 依赖审计 composer audit ``` ## 🐳 Docker测试环境 ### 启动测试环境 ```bash # 启动所有测试服务 docker-compose -f docker-compose.test.yml up -d # 查看服务状态 docker-compose -f docker-compose.test.yml ps # 查看日志 docker-compose -f docker-compose.test.yml logs -f app ``` ### 测试服务说明 | 服务 | 端口 | 用途 | |------|------|------| | **app** | - | PHP应用 | | **mysql-test** | 3307 | 测试数据库 | | **redis-test** | 6380 | 测试缓存 | | **nginx-test** | 8080 | Web服务器 | | **selenium-hub** | 4444 | 浏览器自动化 | | **mailhog** | 8025 | 邮件测试 | | **minio** | 9000 | 对象存储测试 | ### 停止测试环境 ```bash # 停止并清理 docker-compose -f docker-compose.test.yml down --volumes # 清理所有测试数据 docker-compose -f docker-compose.test.yml down --volumes --remove-orphans ``` ## 📈 测试报告 ### 查看覆盖率报告 ```bash # HTML报告 open reports/coverage/index.html # XML报告(用于CI/CD) cat reports/coverage.xml ``` ### 查看测试结果 ```bash # JUnit格式报告 cat reports/junit.xml # 完整测试报告 open reports/test-report.html ``` ### 性能测试结果 ```bash # 查看并发测试结果 cat reports/performance/ab-results.txt # 查看内存测试结果 cat reports/performance/memory-test.txt # 查看数据库性能 cat reports/performance/database-test.txt ``` ## 🔧 故障排查 ### 常见问题 #### 1. 依赖安装失败 ```bash # 清理并重新安装 rm -rf vendor/ composer install --no-cache # 更新Composer composer self-update ``` #### 2. 数据库连接失败 ```bash # 检查MySQL服务 docker-compose -f docker-compose.test.yml logs mysql-test # 重启数据库 docker-compose -f docker-compose.test.yml restart mysql-test ``` #### 3. 测试超时 ```bash # 增加超时时间 php -d max_execution_time=300 bin/console test:integration # 并行运行 ./scripts/run-tests.sh all --parallel=4 ``` #### 4. 内存不足 ```bash # 增加内存限制 php -d memory_limit=1G bin/console test:unit # 检查内存使用 php -d memory_limit=1G -r "echo memory_get_usage(true) / 1024 / 1024 . ' MB\n';" ``` ### 调试技巧 #### 1. 详细输出 ```bash # 详细模式 php bin/console test:unit --verbose # 调试模式 XDEBUG_MODE=debug php bin/console test:unit ``` #### 2. 单个测试 ```bash # 运行单个测试类 vendor/bin/phpunit tests/Unit/UserServiceTest.php # 运行单个测试方法 vendor/bin/phpunit --filter testRegisterSuccess tests/Unit/UserServiceTest.php ``` #### 3. 停止在失败处 ```bash # 遇到失败停止 vendor/bin/phpunit --stop-on-failure # 遇到错误停止 vendor/bin/phpunit --stop-on-error ``` ## 🎯 测试最佳实践 ### 1. 编写测试 ```php // 测试命名规范 class UserServiceTest extends TestCase { public function testRegisterSuccess(): void { // Given - 准备测试数据 $userData = ['username' => 'test', 'email' => 'test@example.com']; // When - 执行操作 $result = $this->userService->register($userData); // Then - 验证结果 $this->assertTrue($result['success']); $this->assertArrayHasKey('user_id', $result); } } ``` ### 2. Mock对象 ```php // 创建Mock对象 $userDao = $this->createMock(UserDao::class); $userDao->method('findById')->willReturn($testUser); // 设置期望 $userDao->expects($this->once()) ->method('create') ->with($this->isInstanceOf(UserDto::class)); ``` ### 3. 数据库测试 ```php // 使用事务回滚 protected function setUp(): void { $this->app['db']->beginTransaction(); } protected function tearDown(): void { $this->app['db']->rollback(); } ``` ### 4. API测试 ```php // 发送HTTP请求 $response = $this->client->post('/api/users', [ 'json' => ['username' => 'test', 'email' => 'test@example.com'] ]); $this->assertEquals(201, $response->getStatusCode()); $this->assertJson($response->getContent()); ``` ## 📋 测试检查清单 ### 提交前检查 - [ ] 所有单元测试通过 - [ ] 代码覆盖率 > 80% - [ ] 集成测试通过 - [ ] API测试通过 - [ ] 无安全漏洞 ### 发布前检查 - [ ] 性能测试达标 - [ ] E2E测试通过 - [ ] 压力测试通过 - [ ] 兼容性测试通过 ### 持续集成 ```yaml # .github/workflows/test.yml name: Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' - name: Install dependencies run: composer install - name: Run tests run: ./scripts/run-tests.sh ``` ## 📞 获取帮助 ### 文档资源 - [完整部署指南](./部署测试指南.md) - [API文档](http://localhost:8000/docs) - [PHPUnit文档](https://phpunit.de/documentation.html) ### 社区支持 - GitHub Issues: 报告问题和建议 - 讨论区: 技术讨论和问答 - Wiki: 详细文档和教程 --- **最后更新:2024-01-15** **版本:v1.0** **维护:FendxPHP 开发团队**