SuperPowers零代码开发测试平台
一,什么是SuperPowers?
Superpowers (https://github.com/obra/superpowers)是一个完整的软件开发工作流程,适用于您的编码代理,它建立在一组可组合的“技能”和一些初始指令之上,以确保您的代理使用它们。
安装和配置可以参考:https://zhuanlan.zhihu.com/p/1994894438053470382,网上还有很多相关的文章,在此就不展开了,本文主要介绍如何使用SuperPowers实现零代码开发测试平台。
二,如何开发测试平台?
首先我是在公司内部的龙虾平台Codeflicker上安装的SuperPower插件,大模型使用的是glm-5,当然token消耗不要考虑。安装完成后就可以尝试通过提要求来生成测试平台。
1,提出需求进行头脑风暴
我的需求是:写一下模仿Apifox格式的接口自动化测试平台,前端使用vue3来实现,增加大模型生成接口自动化用例功能。
SuperPower针对这个需求提出一些问题,根据自己的需要做选择即可,最后会给出几个架构方案让我来选择:
我已了解需求。现在让我提出几个架构方案: 方案对比 方案一:微服务架构(推荐) * 前端:Vue3 + Element Plus + Pinia + TypeScript * 后端:Spring Boot 多模块(API模块、调度模块、AI模块分离) * 优点:模块解耦清晰,便于团队协作开发,AI模块可独立扩展 * 缺点:初期架构稍复杂 方案二:单体分层架构 * 前端:Vue3 + Element Plus + Pinia * 后端:Spring Boot 单模块,标准三层架构 * 优点:简单直接,开发快速 * 缺点:AI功能耦合,后期扩展受限 方案三:前后端一体化 + Node中间层 * 前端:Vue3 * 后端:Spring Boot 核心 + Node.js AI代理层 * 优点:AI模型调用灵活(Node生态SDK丰富) * 缺点:运维复杂度增加 我推荐方案一,理由: 1. 团队协作场景下,模块分离便于并行开发 2. AI模块独立,后续接入更多模型时改动小 3. Spring Boot 生态成熟,适合企业级 你觉得哪个方案更合适?2,具体方案设计
选择了方案一后,SuperPower就会给出具体的设计方案:
一、系统架构
┌─────────────────────────────────────────────────────────────────┐ │ 前端 (Vue3) │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐│ │ │ 接口管理 │ │ 用例管理 │ │ 环境管理 │ │ 测试执行 │ │ 报告中心││ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └────────┘│ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ AI用例生成 (调用后端AI服务) │ │ │ └──────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Spring Boot 后端 │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ API模块 │ │ 调度模块 │ │ AI模块 │ │ │ │ - 接口CRUD │ │ - 定时任务 │ │ - 多模型适配 │ │ │ │ - 用例管理 │ │ - 任务执行 │ │ - 用例生成 │ │ │ │ - 环境管理 │ │ - 报告生成 │ │ - Prompt管理 │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ 公共模块 (认证/工具/配置) │ │ │ └──────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ┌─────────────────────┼─────────────────────┐ ▼ ▼ ▼ ┌─────────┐ ┌──────────┐ ┌──────────┐ │ MySQL │ │ Redis │ │ AI模型API │ └─────────┘ └──────────┘ └──────────┘技术栈明细:
* 前端:Vue3 + TypeScript + Element Plus + Pinia + Axios + Vue Router
* 后端:Spring Boot 3.x + MyBatis-Plus + MySQL 8.0 + Redis + XXL-Job
* AI:支持 OpenAI / 通义千问 / 其他模型(策略模式适配)
二、数据模型设计
┌──────────────────┐ ┌──────────────────┐ │ Project │ │ User │ ├──────────────────┤ ├──────────────────┤ │ id │ │ id │ │ name │ │ username │ │ description │ │ password │ │ owner_id │────▶│ email │ │ created_at │ │ avatar │ └──────────────────┘ │ role │ │ └──────────────────┘ ▼ ┌──────────────────┐ ┌──────────────────┐ │ ApiEndpoint │ │ Environment │ ├──────────────────┤ ├──────────────────┤ │ id │ │ id │ │ project_id │────▶│ project_id │ │ name │ │ name │ │ method │ │ base_url │ │ path │ │ variables (JSON) │ │ headers (JSON) │ │ headers (JSON) │ │ params (JSON) │ │ created_at │ │ description │ └──────────────────┘ │ created_at │ │ └──────────────────┘ ▼ │ ┌──────────────────┐ ▼ │ TestReport │ ┌──────────────────┐ ├──────────────────┤ │ TestCase │ │ id │ ├──────────────────┤ │ task_id │ │ id │ │ total_count │ │ endpoint_id │ │ pass_count │ │ name │ │ fail_count │ │ request_config │ │ duration │ │ pre_script │ │ result (JSON) │ │ post_script │ │ created_at │ │ assertions(JSON) │ └──────────────────┘ │ ai_generated │ │ created_at │ └──────────────────┘ │ ▼ ┌──────────────────┐ │ ScheduleTask │ ├──────────────────┤ │ id │ │ project_id │ │ name │ │ cron_expression │ │ case_ids (JSON) │ │ notify_config │ │ enabled │ │ created_at │ └──────────────────┘核心实体说明:
* Project: 项目,用例和环境的项目隔离* ApiEndpoint: 接口定义,支持从Swagger/OpenAPI导入* TestCase: 测试用例,关联接口,包含请求配置、断言、前后置脚本* Environment: 环境配置,baseUrl + 变量 + 公共headers* ScheduleTask: 定时任务,cron表达式配置执行计划* TestReport: 测试报告,记录执行结果
三、前端模块设计
src/ ├── api/ # API请求模块 │ ├── project.ts │ ├── endpoint.ts │ ├── testcase.ts │ ├── environment.ts │ ├── schedule.ts │ ├── report.ts │ └── ai.ts ├── assets/ # 静态资源 ├── components/ # 公共组件 │ ├── ApiForm/ # 接口表单组件 │ ├── CaseEditor/ # 用例编辑器 │ ├── CodeEditor/ # 代码编辑器(脚本) │ ├── AssertEditor/ # 断言编辑器 │ └── ThemeSwitch/ # 主题切换 ├── composables/ # 组合式函数 │ ├── useTheme.ts │ ├── useRequest.ts │ └── useMessage.ts ├── layouts/ # 布局组件 │ └── MainLayout.vue ├── router/ # 路由配置 ├── stores/ # Pinia状态管理 │ ├── project.ts │ ├── environment.ts │ └── user.ts ├── styles/ # 样式文件 │ ├── dark.scss │ └── light.scss ├── types/ # TypeScript类型 ├── utils/ # 工具函数 └── views/ # 页面组件 ├── project/ │ ├── List.vue │ └── Detail.vue ├── endpoint/ │ ├── List.vue │ ├── Editor.vue │ └── Import.vue # Swagger导入 ├── testcase/ │ ├── List.vue │ ├── Editor.vue │ └── AIGenerate.vue # AI生成页面 ├── environment/ │ └── Manager.vue ├── schedule/ │ ├── List.vue │ └── Editor.vue └── report/ ├── List.vue └── Detail.vue页面布局(类似Apifox):
┌────────────────────────────────────────────────────────────┐ │ Logo 项目选择 环境选择 🔔 👤 🌙主题切换 │ ├──────────┬─────────────────────────────────────────────────┤ │ │ │ │ 📁项目 │ 内容区 │ │ │ │ │ 🔌接口 │ - 接口列表 / 用例列表 / 报告列表 │ │ │ - 编辑器区域 │ │ ✅用例 │ - 响应预览 │ │ │ │ │ 🌍环境 │ │ │ │ │ │ ⏰定时 │ │ │ │ │ │ 📊报告 │ │ │ │ │ └──────────┴─────────────────────────────────────────────────┘四、后端模块设计
api-test-platform/ ├── api-platform-common/ # 公共模块 │ ├── config/ │ │ ├── RedisConfig.java │ │ └── MybatisPlusConfig.java │ ├── exception/ │ │ ├── GlobalExceptionHandler.java │ │ └── BusinessException.java │ ├── result/ │ │ └── Result.java │ └── utils/ │ ├── JwtUtil.java │ └── JsonUtil.java │ ├── api-platform-api/ # API模块 (端口: 8080) │ ├── controller/ │ │ ├── ProjectController.java │ │ ├── EndpointController.java │ │ ├── TestCaseController.java │ │ ├── EnvironmentController.java │ │ ├── ScheduleController.java │ │ └── ReportController.java │ ├── service/ │ │ ├── ProjectService.java │ │ ├── EndpointService.java │ │ ├── TestCaseService.java │ │ ├── EnvironmentService.java │ │ └── ReportService.java │ ├── mapper/ │ └── entity/ │ ├── api-platform-schedule/ # 调度模块 (端口: 8081) │ ├── config/ │ │ └── XxlJobConfig.java │ ├── job/ │ │ └── TestExecuteJob.java │ ├── executor/ │ │ ├── HttpExecutor.java # HTTP请求执行器 │ │ ├── ScriptExecutor.java # 脚本执行器 │ │ └── AssertExecutor.java # 断言执行器 │ └── service/ │ └── ScheduleService.java │ ├── api-platform-ai/ # AI模块 (端口: 8082) │ ├── controller/ │ │ └── AIController.java │ ├── service/ │ │ ├── AIProviderService.java │ │ └── CaseGenerateService.java │ ├── provider/ # 多模型适配器 │ │ ├── AIProvider.java # 接口 │ │ ├── OpenAIProvider.java │ │ ├── QwenProvider.java │ │ └── ProviderFactory.java │ ├── prompt/ │ │ └── PromptTemplate.java │ └── config/ │ └── AIConfig.java │ └── pom.xml # 父POM模块职责:
* common: 公共配置、工具类、统一响应、异常处理* api: 核心业务接口,提供REST API* schedule: 定时任务调度,用例执行引擎* ai: AI模型适配,用例生成服务
五、AI用例生成功能设计
5.1 多模型适配架构
┌─────────────────────────────────────────────────────┐ │ AIController │ │ POST /api/ai/generate-cases │ │ POST /api/ai/analyze-endpoint │ └──────────────────────┬──────────────────────────────┘ ▼ ┌─────────────────────────────────────────────────────┐ │ CaseGenerateService │ │ - 解析接口信息 │ │ - 构建Prompt │ │ - 调用AI模型 │ │ - 解析生成结果 │ └──────────────────────┬──────────────────────────────┘ ▼ ┌─────────────────────────────────────────────────────┐ │ AIProviderService │ │ - 管理模型配置 │ │ - 选择可用模型 │ │ - 负载均衡/故障转移 │ └──────────────────────┬──────────────────────────────┘ ▼ ┌─────────────────────────────────────────────────────┐ │ ProviderFactory │ │ 根据配置创建对应Provider实例 │ └──────────┬──────────────────┬───────────────────────┘ ▼ ▼ ┌──────────────────┐ ┌──────────────────┐ │ OpenAIProvider │ │ QwenProvider │ │ - chat() │ │ - chat() │ │ - parseResult() │ │ - parseResult()│ └──────────────────┘ └──────────────────┘5.2 用例生成流程
用户选择接口 → 点击"AI生成用例" │ ▼ ┌─────────────────────────────────┐ │ 构建Prompt │ │ - 接口路径、方法、参数 │ │ - 请求体Schema │ │ - 业务上下文(可选) │ └──────────────┬──────────────────┘ ▼ ┌─────────────────────────────────┐ │ AI模型生成 │ │ - 正向用例(正常流程) │ │ - 边界用例(边界值测试) │ │ - 异常用例(错误处理测试) │ └──────────────┬──────────────────┘ ▼ ┌─────────────────────────────────┐ │ 解析AI响应 │ │ - 提取用例名称 │ │ - 提取请求参数 │ │ - 提取断言规则 │ └──────────────┬──────────────────┘ ▼ ┌─────────────────────────────────┐ │ 用户确认/编辑 → 保存用例 │ └─────────────────────────────────┘5.3 Prompt模板设计
// 用例生成Prompt模板 String promptTemplate = """ 你是一个API测试专家。请根据以下接口信息生成测试用例。 接口信息: - 方法: {method} - 路径: {path} - 描述: {description} - 请求参数: {params} - 请求体Schema: {bodySchema} 请生成以下类型的测试用例(JSON格式): 1. 正向用例:正常业务流程测试 2. 边界用例:参数边界值测试 3. 异常用例:错误处理测试 返回格式: { "cases": [ { "name": "用例名称", "type": "positive|boundary|exception", "request": { 请求配置 }, "assertions": [ 断言列表 ] } ] } """;5.4 前端交互设计
┌─────────────────────────────────────────────────────────┐ │ AI生成测试用例 [配置模型] │ ├─────────────────────────────────────────────────────────┤ │ │ │ 选择接口: [GET /api/users ▼] │ │ │ │ 生成类型: ☑ 正向用例 ☑ 边界用例 ☑ 异常用例 │ │ │ │ 用例数量: [3] 个(每种类型) │ │ │ │ 业务上下文(可选): │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 这是一个用户查询接口,支持分页和筛选 │ │ │ └─────────────────────────────────────────────────┘ │ │ │ │ [ 生成用例 ] │ │ │ ├─────────────────────────────────────────────────────────┤ │ 生成结果预览: │ │ ┌─────────────────────────────────────────────────┐ │ │ │ ☑ 正向-查询用户列表 │ │ │ │ GET /api/users?page=1&size=10 │ │ │ │ 断言: status=200, data.length > 0 │ │ │ │ │ │ │ │ ☑ 边界-分页边界测试 │ │ │ │ GET /api/users?page=0&size=100 │ │ │ │ 断言: status=200 │ │ │ │ │ │ │ │ ☑ 异常-无效参数测试 │ │ │ │ GET /api/users?page=-1 │ │ │ │ 断言: status=400 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ [取消] [保存选中用例] │ └─────────────────────────────────────────────────────────┘6.2 接口管理
GET /api/endpoints # 接口列表
POST /api/endpoints # 创建接口PUT /api/endpoints/{id} # 更新接口DELETE /api/endpoints/{id} # 删除接口POST /api/endpoints/import # Swagger/OpenAPI导入
6.3 测试用例
GET /api/testcases # 用例列表POST /api/testcases # 创建用例PUT /api/testcases/{id} # 更新用例DELETE /api/testcases/{id} # 删除用例POST /api/testcases/{id}/run # 单个执行POST /api/testcases/batch-run # 批量执行
6.4 环境管理
GET /api/environments # 环境列表POST /api/environments # 创建环境PUT /api/environments/{id} # 更新环境DELETE /api/environments/{id} # 删除环境
6.5 定时任务
GET /api/schedules # 任务列表POST /api/schedules # 创建任务PUT /api/schedules/{id} # 更新任务DELETE /api/schedules/{id} # 删除任务PUT /api/schedules/{id}/toggle # 启用/禁用
6.6 测试报告
GET /api/reports # 报告列表GET /api/reports/{id} # 报告详情DELETE /api/reports/{id} # 删除报告
6.7 AI服务
POST /api/ai/generate-cases # AI生成用例GET /api/ai/models # 可用模型列表PUT /api/ai/models/{provider} # 配置模型
七、技术实现要点
7.1 前端主题切换
// 使用CSS变量 + Element Plus主题 // dark.scss :root { --bg-primary: #1a1a1a; --bg-secondary: #252525; --text-primary: #ffffff; } // light.scss :root { --bg-primary: #ffffff; --bg-secondary: #f5f5f5; --text-primary: #333333; }7.2 Swagger导入解析
// 解析OpenAPI 3.0规范 @Service public class SwaggerImportService { public List<ApiEndpoint> parse(String swaggerJson) { OpenAPI openAPI = new OpenAPIV3Parser().parse(swaggerJson); // 转换为ApiEndpoint实体 } }7.3 用例执行引擎
public class HttpExecutor { public HttpResponse execute(RequestConfig config, Environment env) { // 1. 替换环境变量 // 2. 执行前置脚本 // 3. 发送HTTP请求 // 4. 执行后置脚本 // 5. 执行断言 } }7.4 多模型策略模式
public interface AIProvider { String chat(String prompt); } @Component @ConditionalOnProperty(name = "ai.provider", havingValue = "openai") public class OpenAIProvider implements AIProvider { ... } @Component @ConditionalOnProperty(name = "ai.provider", havingValue = "qwen") public class QwenProvider implements AIProvider { ... }设计呈现完毕。我来编写设计文档。然后就开发生成具体的设计文档,存储到docs/superpowers/specs中。
3,具体实施计划
计划包含20个任务:
* Task 1-3: 后端父项目与Common模块* Task 4-6: API模块实体类与数据库脚本* Task 7-11: 用户认证、项目管理服务与控制器* Task 12-13: Schedule和AI模块初始化* Task 14-20: 前端项目初始化、路由、布局、主题、API模块
是否需要我继续创建 Phase 2-5 的实现计划?
按龙虾输出与其进行交互,具体流程就不在此展示了,经过漫长的交互过程,SuperPower会按计划生成对应的代码文档,最后输出:
codeflicker ✅ 项目完成总结
项目结构
api-test-platform/ # 后端 ├── api-platform-common/ # 公共模块 ├── api-platform-api/ # 核心业务模块 ├── api-platform-schedule/ # 定时任务模块 └── api-platform-ai/ # AI模块 api-test-platform-web/ # 前端 (Vue3 + TypeScript) ├── src/views/ # 页面组件 ├── src/api/ # API接口 ├── src/composables/ # 组合式函数 └── src/styles/ # 主题样式已实现功能
┌──────────┬─────────────────────┐ │ 模块 │ 功能 │ ├──────────┼─────────────────────┤ │ 用户管理 │ 登录、注册、JWT认证 │ ├──────────┼─────────────────────┤ │ 项目管理 │ CRUD、成员协作 │ ├──────────┼─────────────────────┤ │ API管理 │ 导入、编辑、文档 │ ├──────────┼─────────────────────┤ │ 测试用例 │ 手动/AI生成、断言 │ ├──────────┼─────────────────────┤ │ 环境管理 │ 多环境变量 │ ├──────────┼─────────────────────┤ │ 执行引擎 │ HTTP请求、断言验证 │ ├──────────┼─────────────────────┤ │ 定时任务 │ 调度、执行 │ ├──────────┼─────────────────────┤ │ 测试报告 │ 生成、查看 │ ├──────────┼─────────────────────┤ │ AI集成 │ OpenAI/Qwen多模型 │ └──────────┴─────────────────────┘启动方式
# 后端 cd api-test-platform && mvn spring-boot:run -pl api-platform-api # 前端 cd api-test-platform-web && npm install && npm run dev最后会生成如下结构的接口自动化平台:
本地安装或是选择一个mysql数据库,创建api-test-platform/api-platform-aip/src/main/resources/schema.sql中的数据库和表,同时导入data.sql中的数据。
按SuperPower输出的方式启动前端和后端服务,即可进入平台。
SuperPower生成平台的所有交互,以及生成的文件,可以去下面的仓库中下载:https://github.com/songxianfeng/SuperPowersTest
三,SuperPower使用思考
从最近使用这个工具生成了几个简单的平台,并验证了生成的效果,结合我多年开发测试平台的经验,得出如下几点反思吧,与大家交流一下。
1,大模型发展势头对测试冲击很大
最近大模型发展确实很猛,各种大模型,Agent, MCP, 龙虾,Skills,感觉学都学不过来,有很强大的无力感。业界也有很多人在积极探索大模型在测试行业的使用,如大模型生成手工用例,生成接口自动化用例,生成UI自动化用例,代码分析,bug分析,安全探索等等。如今把常规的测试流程生成Skills, 就可以保证在测试过程中不会遗漏任何环节。使用SuperPower花一两个小时,就可以开发一个测试平台,真是非常牛X,不服不行。
2,自身实力非常重要,大模型替代不了
大模型虽然非常牛X ,但是我们也不用过于担心,自身积累的各种经验还是非常重要的。比如说,对业务的理解,项目流程中的各种工具使用,风险预警等等。当产品提出一个新需求时,如果他不讲解,相关的开发和测试根本无法理解的情况下,我们可以根据以入的经验快速评估其中的风险。这个大模型做不到,他可以做设计好的流程化的东西,暂时还无法做到经验的应用。
虽然使用SuperPower生成测试平台非常快,但是你如果没有开发测试平台的经验。从提出需求,到头脑风暴讨论,再到设计方案评估等,都无法提出自己有效的建议。同时,SuperPower开发出的测试平台,从常规角度帮你实现了部分功能,但是代码中也存在不少Bug, 需要你根据具体使用场景进行优化和修改。如果你完全没有开发经验,也很难应付接下来的工作。
3,大模型助力提效工作
在当前形势下,要保持传统工作方式,保持工匠精神也大可不必,不如结合自己的经验,借助于大模型让自己的工作如虎添翼。比如说,在接到一个需求的情况下,需要先分析需求文档,编写测试用例,提测试后再部署环境,创建测试数据进行测试。就可以把工作流程写成Skills,通过把需求给龙虾,让它帮你实现一些很简单而繁琐的工作。同时测试完成后,也可以通过编写项目总结 的skill来实现对项目流程的汇总分析工作。
像早期提效工作,可以通过大模型相关工具,分析代码调用链路,评估影响的接口,页面,从而生成相应的接口自动化和UI自动化用例,在提测的时候自动执行。借助于覆盖率相关工具,评估测试效果,分析可能存在的问题,给出测试建议,或是自动补充相应的测试用例。
4,全面评估不可急躁
大模型冲击比较大,容易让人造成无所是从的情况。要么不知道如何使用,要么就感觉到大模型可以做任何事情。在没有考虑好如何在日常工作中使用大模型的情况下,什么都想用大模型来处理,这个也是不行的。为了使用大模型而使用,创建了一堆Agent, 生成海量的skills。总想让大模型帮你做很多工作,最后发现什么也做不了,或是根据达不到想要的效果。
不妨从一两个痛点切入,无论用任何工具或是方案,只要完美解决了问题,实现的提效。再向其他方面进行扩张,慢慢在形成一片,最生形成体系,最后才能达到想要的效果。
