skills/mercury-api.wepieoa.com/activity-ai-test-generator

activity-ai-test-generator

SKILL.md

Activity AI Test Generator

为 WesPy-HTTP-Go 活动自动生成基于 acttest.AiTest 框架的 AI 自动化测试文件。

用户调用方式

/activity-ai-test-generator activity=jk_wilderness_enforcers act_id=6534
/activity-ai-test-generator activity=in_limited_lies act_id=6204 module=hook
/activity-ai-test-generator activity=jk_riyadh_city_race act_id=6500 module=all

参数说明

  • activity: 必需 - 活动目录名称(如 jk_wilderness_enforcersin_limited_lies
  • act_id: 必需 - 活动ID(如 65346204
  • module: 可选 - 指定生成的模块(默认 all
    • route - 只生成接口测试
    • event - 只生成事件测试
    • hook - 只生成钩子测试
    • service - 只生成 service 层测试
    • all - 生成所有模块测试

核心功能

  1. 自动扫描活动目录结构

    • 扫描 internal/route/ 下的所有接口处理函数
    • 扫描 internal/event/ 下的所有事件处理函数
    • 扫描 internal/hook/ 下的所有钩子结构体和方法
    • 扫描 internal/service/ 下的核心业务逻辑函数
  2. 智能提取测试目标

    • 识别 HTTP 路由处理函数(参数包含 *gin.Context
    • 识别事件处理函数(参数包含 string 或事件结构体)
    • 识别钩子接口实现(如 TaskHookerBlindBoxHookExtraGiftHook
    • 识别核心业务逻辑函数(公开导出的业务方法)
  3. 生成精准的测试文件

    • 包名:使用 <package_name>_test 避免循环依赖
    • init 函数:自动设置正确的区域(RegionMiddleEastJackaroo、RegionIndia 等)
    • 测试函数:为每个目标方法生成对应的 TestXxx 函数
    • 提示词:为每个测试编写精准的场景描述和参数构造指导

生成的测试文件结构

1. 接口测试文件(route_test.go<activity>_test.go

package <activity>_test

import (
	"context"
	"testing"
	"wespy-http-go/app/activity/<year>/<region>/<activity>/internal/conf"
	"wespy-http-go/app/activity/<year>/<region>/<activity>/internal/service"
	"wespy-http-go/app/activity/common/acttest"
	"wespy-http-go/app/bootutil"
	"wespy-http-go/pkg/weconfig"
)

func init() {
	bootutil.ActLocalTest.SetRegion(weconfig.Region<Region>).AddRedis("user").Init()
}

func TestDoLottery(t *testing.T) {
	acttest.AiTest(
		conf.ActId,
		"这是一个抽奖接口,用户消耗能量碎片进行抽奖...",
		service.DoLottery,
		map[string]interface{}{
			"arg0": context.Background(),
		},
	)
}

2. 事件测试文件(event_test.go

func TestHandleSendGift(t *testing.T) {
	acttest.AiTest(
		conf.ActId,
		"这是送礼事件处理函数...",
		event.HandleSendGift,
		nil,
	)
}

3. 钩子测试文件(hook_test.go

func TestTaskHooker_BeforeSendReward(t *testing.T) {
	h := &hook.TaskHooker{}
	acttest.AiTest(
		conf.ActId,
		"这是发奖前的钩子...",
		h.BeforeSendReward,
		nil,
	)
}

提示词生成规则

每个测试函数的提示词(playPromote)必须包含以下内容:

  1. 功能描述:简要说明这是什么类型的接口/事件/钩子
  2. 业务逻辑:核心业务流程(如"抽奖后会自动触发能量值累积任务")
  3. 测试账号:建议的测试 UID 统一使用 1(用户可根据需要自行修改)
  4. 配置依赖:提示从活动动态配置 JSON 中提取参数(如"请结合 LotteryConfig 配置...")
  5. 参数说明:简要说明各参数的含义

示例

"这是一个抽奖接口,用户消耗能量碎片进行抽奖,抽奖后会自动触发能量值累积任务,并检查是否获得大奖(大奖获得者会加入荣耀殿堂并通知其他抽奖用户)。" +
"测试 uid 建议使用 1。" +
"请结合活动动态配置 JSON 中的 LotteryConfig 配置(包含 BigReward、ReplaceReward、ReceiveLimit、LotteryCumTask、LikeLotteryType 等字段)和抽奖池配置进行参数构造,切勿盲猜抽奖类型。" +
"参数说明:ctx 是上下文,lotteryReq 包含 ActId、Uid、Number(抽奖次数)、AutoPurchase(自动购买)等字段。"

区域映射表

根据活动路径自动选择正确的区域常量:

路径前缀 区域常量
jk/ weconfig.RegionMiddleEastJackaroo
in/ weconfig.RegionIndia
us/ weconfig.RegionUsa
jp/ weconfig.RegionJapan
kr/ weconfig.RegionKorean

测试 UID:所有测试统一建议使用 1,用户可根据实际需要自行修改。

执行流程

  1. 参数验证

    • 检查 activityact_id 参数是否提供
    • 检查活动目录是否存在(app/activity/<year>/<region>/<activity>
  2. 扫描活动目录

    • 使用 Glob 查找 internal/route/*.gointernal/event/*.gointernal/hook/*.gointernal/service/*.go
    • 读取源文件,提取公开导出的函数和方法
  3. 提取测试目标

    • 接口:查找以 func (c *gin.Context) 开头的函数
    • 事件:查找 func Handle*func *Event 函数
    • 钩子:查找实现钩子接口的结构体(type *Hook struct)及其方法
    • Service:查找公开导出的业务逻辑函数(首字母大写)
  4. 生成测试文件

    • 根据 module 参数决定生成哪些测试文件
    • 自动设置包名、导入、init 函数
    • 为每个目标方法生成对应的测试函数
    • 编写精准的提示词
  5. 编译验证

    • 使用 go test -c 验证生成的测试文件语法正确
    • 输出生成的测试文件路径和统计信息

示例输出

✅ 成功生成 AI 自动化测试文件

📁 活动目录: app/activity/2026/jk/jk_wilderness_enforcers
📊 统计信息:
  - 接口测试: 4 个 (DoLottery, GetTaskInfo, GetNewHonorRank, Like)
  - 钩子测试: 2 个 (AfterQueryTaskInfo, BeforeSendReward)
  - 总计: 6 个测试函数

📄 生成的文件:
  - lottery_test.go (101 行)

✅ 编译验证通过

注意事项

  1. 避免循环依赖:测试文件包名必须使用 <package>_test
  2. 区域设置准确:根据活动路径自动选择正确的区域常量
  3. 配置 ID 准确:使用活动配置中的常量(如 conf.ActId)而非硬编码
  4. 提示词精准:必须包含配置字段提示,避免 AI 盲猜参数
  5. context.Background():对于首参数是 context.Context 的方法,必须在 fixedParams 中传入

现在开始根据用户提供的参数生成 AI 自动化测试文件。

Installs
6
First Seen
Apr 13, 2026