api-test-strategy
API 测试策略——测试金字塔(单元/集成/E2E)、测试用例设计(Given/When/Then)、Mock 策略、边界值覆盖。当编写或审查测试代码时自动触发。 触发词:写测试、测试策略、测试用例、单元测试、集成测试、API 测试。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
API 测试策略——测试金字塔(单元/集成/E2E)、测试用例设计(Given/When/Then)、Mock 策略、边界值覆盖。当编写或审查测试代码时自动触发。 触发词:写测试、测试策略、测试用例、单元测试、集成测试、API 测试。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | api-test-strategy |
| type | testing-rule |
| description | API 测试策略——测试金字塔(单元/集成/E2E)、测试用例设计(Given/When/Then)、Mock 策略、边界值覆盖。当编写或审查测试代码时自动触发。 触发词:写测试、测试策略、测试用例、单元测试、集成测试、API 测试。 |
| version | 1.0.0 |
| author | wta |
禁止在测试之前编写生产代码。 必须先有失败的测试才能写实现。如果已经写了生产代码而没有测试,先删除生产代码。
╱ E2E ╲ 少量(5-10%):关键用户流程
╱ 集成 ╲ 中量(20-30%):API 端点 + 数据库
╱ 单元 ╲ 大量(60-70%):函数/方法/类
| 层级 | 测试内容 | 速度 | Mock 策略 |
|---|---|---|---|
| 单元 | 单一函数/方法逻辑 | 毫秒级 | Mock 所有外部依赖 |
| 集成 | API 端点、数据库交互 | 秒级 | 真实数据库(测试库)、Mock 外部服务 |
| E2E | 完整用户流程 | 分钟级 | 全部真实(测试环境) |
不论何种技术栈,单个测试都遵循 Given(前置)/ When(操作)/ Then(断言)三段。下方按语言给出集成测试入口示例,单元测试使用对应 Mock 库即可。
describe('UserService.createUser', () => {
it('应该成功创建用户 When 手机号未注册', async () => {
// Given(前置条件)
const input = { phone: '13800138000', name: '张三' };
mockUserRepo.findByPhone.resolves(null);
// When(执行操作)
const result = await userService.createUser(input);
// Then(预期结果)
expect(result).toMatchObject({ phone: '13800138000', name: '张三' });
expect(mockUserRepo.save).toHaveBeenCalledTimes(1);
});
});
@pytest.mark.asyncio
async def test_create_user_success(client: AsyncClient, db_session):
# Given
payload = {"phone": "13800138000", "name": "张三"}
# When
resp = await client.post("/users", json=payload)
# Then
assert resp.status_code == 201
body = resp.json()
assert body["phone"] == "13800138000"
@pytest.mark.asyncio
async def test_create_user_duplicate(client: AsyncClient, existing_user):
resp = await client.post("/users", json={"phone": existing_user.phone})
assert resp.status_code == 409
@SpringBootTest + RestAssured)@SpringBootTest(webEnvironment = RANDOM_PORT)
class UserControllerIT {
@LocalServerPort int port;
@Test
void shouldCreateUserWhenPhoneNotRegistered() {
// Given
var payload = Map.of("phone", "13800138000", "name", "张三");
// When
var response = given().port(port).contentType(JSON).body(payload)
.when().post("/users");
// Then
response.then().statusCode(201).body("phone", equalTo("13800138000"));
}
@Test
void shouldReturn409WhenPhoneAlreadyRegistered() {
// Given:通过 fixture 已存在用户
// ...
// When + Then
given().port(port).contentType(JSON).body(Map.of("phone", "13800138000"))
.when().post("/users")
.then().statusCode(409);
}
}
func TestCreateUser_Success(t *testing.T) {
// Given
srv := httptest.NewServer(routes(testRepo))
defer srv.Close()
body := bytes.NewBufferString(`{"phone":"13800138000","name":"张三"}`)
// When
resp, err := http.Post(srv.URL+"/users", "application/json", body)
// Then
require.NoError(t, err)
require.Equal(t, http.StatusCreated, resp.StatusCode)
}
对每个 API 端点,确保覆盖:
1. RED → 编写失败的测试(断言要具体)
2. GREEN → 实现最少代码使测试通过(不要多写)
3. 重构 → 消除重复、改善命名(测试保护下进行)
| 反模式 | 说明 | 改进 |
|---|---|---|
| 测试依赖执行顺序 | 每个测试应该独立 | 使用 beforeEach 重置状态 |
| 测试太复杂 | 测试本身有 bug | 保持测试简单直接 |
| Mock 一切 | 过度 Mock 使测试失去意义 | 集成测试层使用真实依赖 |
| 只测 golden path | 没有错误路径覆盖 | 补充异常和边界测试 |
用 citty + @clack/prompts 构建 Node.js CLI 的端到端工作流,覆盖命令路由、参数 schema、 终端交互、异步任务 UI 与 ESM 发布。触发词:citty、clack、prompts、CLI、命令行、子命令、 交互式、spinner、defineCommand、runMain、ESM 发布。
构建、扩展或调试 CodeMirror 6 浏览器代码编辑器,覆盖状态事务、扩展原语、 装饰、Compartment、语言包、补全诊断、主题、React 集成与 CM5→CM6 迁移。 触发词:CodeMirror 6、CM6、@codemirror/、EditorView、StateField、 Lezer、@uiw/react-codemirror。
使用 @pierre/diffs 与 @pierre/trees 构建代码审查、PR 视图、IDE 文件树、Merge Conflict 解决器。 覆盖 React/Vanilla API、虚拟化、Worker Pool、SSR、Shadow DOM 主题、CodeMirror 集成。 触发词:pierre、diff 渲染、文件树、PR 视图、merge conflict。
GitHub 仓库运营 + npm 包 tag 触发发布的一体化工作流。覆盖 issue/PR 分诊、CI 排障、 安全告警,以及 npm publish(provenance / scoped)+ 自动 GitHub Release(CHANGELOG 段落注入)。 触发词:github、gh、release、publish、tag、npm、provenance、changelog、triage、ci broken、版本发布。
为长跑 AI Coding 任务(Codex /goal、Claude Code、Cursor、Kiro autopilot)构建可审计、 不假完成、抗漂移的提示词。激活后先澄清需求、自动加载 AGENTS.md / 当前 spec / lessons.md, 再产出 5 段式 goal 与长跑健康守则。触发词:goal、写 goal、长任务、长跑、ralph。
使用 Mantine 组件库构建 React UI。涵盖核心组件选型、主题定制、Styles API、 布局模式、表单处理、日期选择器、图表、日程组件、通知系统、模态框管理、 Spotlight 搜索、文件上传、轮播、富文本编辑与 50+ hooks。 触发词:Mantine、UI 组件、主题配置、Styles API、DatePicker、Schedule、 Heatmap、通知、模态框、表单布局、Spotlight、Dropzone、Carousel、hooks。