README.md 6.2 KB

灾害去除系统 E2E 测试

本目录包含了灾害去除系统的完整端到端测试套件,用于验证除虫、除草、浇水等功能的正确性。

测试结构

Land/
├── DisasterRemovalBaseTest.php      # 测试基类,提供通用方法
├── PesticideHandlerTest.php         # 除虫Handler测试
├── WeedicideHandlerTest.php         # 除草Handler测试  
├── WateringHandlerTest.php          # 浇水Handler测试
├── DisasterRemovalTestSuite.php     # 综合测试套件
└── README.md                        # 本文档

配置文件

  • TestConfig.php - 集中管理所有测试配置和环境变量

快速开始

1. 环境准备

设置测试环境变量:

# 在 .env 文件中添加
UNITTEST_URL=http://localhost:8000

2. 运行测试

使用测试运行器(推荐)

# 运行所有测试
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 测试命令

# 运行单个测试类
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/

测试配置

测试用户

'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 来自定义测试配置:

// 修改测试用户
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 日志中:

tail -f storage/logs/laravel.log

扩展测试

添加新的测试场景

  1. TestConfig.php 中添加新的配置
  2. 在对应的测试类中添加新的测试方法
  3. DisasterRemovalTestSuite.php 中集成新测试

添加新的灾害类型

  1. 更新 TestConfig.php 中的配置
  2. 创建新的测试类继承 DisasterRemovalBaseTest
  3. 实现对应的测试方法

持续集成

这些测试可以集成到 CI/CD 流程中:

# 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. 确保测试环境与生产环境隔离