# 灾害去除系统 E2E 测试 本目录包含了灾害去除系统的完整端到端测试套件,用于验证除虫、除草、浇水等功能的正确性。 ## 测试结构 ``` Land/ ├── DisasterRemovalBaseTest.php # 测试基类,提供通用方法 ├── PesticideHandlerTest.php # 除虫Handler测试 ├── WeedicideHandlerTest.php # 除草Handler测试 ├── WateringHandlerTest.php # 浇水Handler测试 ├── DisasterRemovalTestSuite.php # 综合测试套件 └── README.md # 本文档 ``` ## 配置文件 - `TestConfig.php` - 集中管理所有测试配置和环境变量 ## 快速开始 ### 1. 环境准备 设置测试环境变量: ```bash # 在 .env 文件中添加 UNITTEST_URL=http://localhost:8000 ``` ### 2. 运行测试 #### 使用测试运行器(推荐) ```bash # 运行所有测试 php app/Module/AppGame/Tests/run_disaster_removal_tests.php --all # 只运行除虫测试 php app/Module/AppGame/Tests/run_disaster_removal_tests.php --pesticide # 只运行除草测试 php app/Module/AppGame/Tests/run_disaster_removal_tests.php --weedicide # 只运行浇水测试 php app/Module/AppGame/Tests/run_disaster_removal_tests.php --watering # 运行完整测试套件 php app/Module/AppGame/Tests/run_disaster_removal_tests.php --suite # 查看测试配置 php app/Module/AppGame/Tests/run_disaster_removal_tests.php --config # 查看帮助 php app/Module/AppGame/Tests/run_disaster_removal_tests.php --help ``` #### 使用 Laravel 测试命令 ```bash # 运行单个测试类 php artisan test app/Module/AppGame/Tests/Land/PesticideHandlerTest.php # 运行特定测试方法 php artisan test app/Module/AppGame/Tests/Land/PesticideHandlerTest.php --filter testPesticideSuccess # 运行所有灾害去除测试 php artisan test app/Module/AppGame/Tests/Land/ ``` ## 测试配置 ### 测试用户 ```php 'user_id' => 1, 'password' => 'test123456', 'username' => 'test_user' ``` ### 测试物品 - **除虫剂** (ID: 101) - 80%成功率 - **除草剂** (ID: 102) - 75%成功率 - **浇水道具** (ID: 103) - 90%成功率 - **无效物品** (ID: 999) - 用于测试失败情况 ### 测试土地 - **虫害土地** (ID: 1) - 有虫害的土地 - **杂草土地** (ID: 2) - 有杂草的土地 - **干旱土地** (ID: 3) - 有干旱的土地 - **正常土地** (ID: 4) - 无灾害的土地 - **其他用户土地** (ID: 5) - 用于测试权限 ## 测试场景 ### 成功场景 1. **除虫成功** - 使用有效除虫剂对有虫害的土地进行除虫 2. **除草成功** - 使用有效除草剂对有杂草的土地进行除草 3. **浇水成功** - 使用有效浇水道具对有干旱的土地进行浇水 ### 失败场景 1. **无效物品** - 使用不具备对应属性的物品 2. **权限验证** - 尝试操作其他用户的土地 3. **无对应灾害** - 对没有对应灾害的土地进行操作 4. **参数验证** - 传入无效的参数 ### 边界情况 1. **概率测试** - 验证成功率机制 2. **重复操作** - 对同一土地重复操作 3. **并发请求** - 同时发送多个请求 4. **性能测试** - 测试响应时间 ## 测试类详解 ### DisasterRemovalBaseTest 测试基类,提供: - 通用的断言方法 - 响应验证逻辑 - 测试场景运行框架 - 调试输出方法 ### PesticideHandlerTest 除虫功能测试,包含: - `testPesticideSuccess()` - 成功除虫 - `testPesticideWithInvalidItem()` - 无效物品测试 - `testPesticideOnOtherUserLand()` - 权限测试 - `testPesticideProbability()` - 概率机制测试 ### WeedicideHandlerTest 除草功能测试,包含: - `testWeedicideSuccess()` - 成功除草 - `testWeedicideWithWrongItemType()` - 错误物品类型测试 - `testConcurrentWeedicideRequests()` - 并发请求测试 ### WateringHandlerTest 浇水功能测试,包含: - `testWateringSuccess()` - 成功浇水 - `testRepeatedWateringOnSameLand()` - 重复操作测试 - `testWateringPerformance()` - 性能测试 ### DisasterRemovalTestSuite 综合测试套件,提供: - 完整的测试流程编排 - 测试结果统计 - 错误收集和报告 - 集成测试场景 ## 自定义测试配置 可以通过修改 `TestConfig.php` 来自定义测试配置: ```php // 修改测试用户 public const TEST_USER = [ 'user_id' => 2, // 改为其他用户ID 'password' => 'your_password', 'username' => 'your_username' ]; // 修改测试物品 public const TEST_ITEMS = [ 'pesticide' => [ 'item_id' => 201, // 改为实际的除虫剂ID 'name' => '超级除虫剂', 'numeric_attributes' => [ 'fram_pesticide_rate' => 95 // 改为95%成功率 ] ] ]; ``` ## 调试和故障排除 ### 查看详细输出 测试会输出详细的调试信息,包括: - 请求参数 - 响应内容 - 测试配置 - 执行时间 ### 常见问题 1. **连接失败** - 检查 `UNITTEST_URL` 环境变量 - 确保测试服务器正在运行 2. **验证失败** - 检查测试数据是否存在 - 确认用户权限设置 3. **概率测试不稳定** - 概率测试允许一定误差范围 - 可以调整测试次数或误差范围 ### 日志查看 测试过程中的错误会记录到 Laravel 日志中: ```bash tail -f storage/logs/laravel.log ``` ## 扩展测试 ### 添加新的测试场景 1. 在 `TestConfig.php` 中添加新的配置 2. 在对应的测试类中添加新的测试方法 3. 在 `DisasterRemovalTestSuite.php` 中集成新测试 ### 添加新的灾害类型 1. 更新 `TestConfig.php` 中的配置 2. 创建新的测试类继承 `DisasterRemovalBaseTest` 3. 实现对应的测试方法 ## 持续集成 这些测试可以集成到 CI/CD 流程中: ```yaml # GitHub Actions 示例 - name: Run Disaster Removal Tests run: | php app/Module/AppGame/Tests/run_disaster_removal_tests.php --all ``` ## 性能基准 - 单个请求响应时间:< 5秒 - 并发请求处理:支持同时处理多个请求 - 概率准确性:误差范围 ±30% ## 注意事项 1. 测试会实际消耗物品,请使用测试环境 2. 某些测试可能会修改数据库状态 3. 概率测试结果可能因随机性而有所不同 4. 确保测试环境与生产环境隔离