mcpField
A
api-testing

api-testing

github.com/fugazi测试与质量256103 次安装6 天前更新
代码仓库

关于 api-testing

api-testing 是面向 REST 和 GraphQL 接口测试的技能,适用于使用 TypeScript 或 Java 的开发与测试工作。它涵盖响应模式校验、认证、错误状态、边界数据和服务契约测试。

主要功能

  1. 01Playwright 与 REST Assured 测试
  2. 02使用 Zod 或 JSON Schema 校验
  3. 03覆盖认证与错误状态
  4. 04测试分页、过滤和排序
  5. 05检查幂等性与服务契约

适用场景

  1. 01为 REST 或 GraphQL 接口编写测试
  2. 02验证接口请求与响应模式
  3. 03检查受保护接口的认证行为
  4. 04测试分页及异常输入

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/fugazi/test-automation-skills-agents --skill api-testing

安装后在 Claude Code 中输入/api-testing确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE.txt
references/
contract-testing.md
playwright-api-testing.md
rest-api-patterns.md
rest-assured-testing.md
schema-validation.md
scripts/
api-health-check.sh
templates/
playwright-api-spec.ts
rest-assured-test.java

详细介绍

API 测试(Playwright + REST Assured)

全面的 API 测试技能,涵盖 Playwright TypeScript(request fixture、Supertest、Zod)和 Java(REST Assured、AssertJ、JSON Schema Validator)。

何时使用此技能

  • 为 REST 或 GraphQL 端点创建 API 测试
  • 验证请求/响应架构(Zod、JSON Schema)
  • 测试身份验证流程(OAuth2、JWT、API 密钥、Bearer 令牌)
  • 验证错误处理(400、401、403、404、409、422、500)
  • 测试分页、筛选、排序的边界情况
  • 验证 PUT/DELETE 操作的幂等性
  • 测试服务之间的契约
  • 验证速率限制
不要用于
  • 由浏览器驱动的 UI 流程(Playwright 测试规范请使用 playwright-e2e-testing,Selenium 请使用 webapp-selenium-testing)
  • 实时交互式浏览器会话或快照(请使用 playwright-cli)
  • 视觉/布局回归(不在范围内 — 不涉及 DOM)
  • 必须通过真实浏览器跨页面执行的端到端流程

前置条件

技术栈要求
TypeScriptNode.js 18+、@playwright/test 或 supertest、zod
JavaJava 21+、REST Assured 5.x、AssertJ、Jackson、json-schema-validator

核心原则

  1. 验证每个响应的架构 — 绝不信任未经验证的响应
  2. 测试所有 HTTP 状态码 — 成功路径和错误状态都要测试
  3. 身份验证测试是必须的 — 验证受保护端点是否返回 401/403
  4. 数据驱动 — 使用有效、无效、边界和空值进行测试
  5. 尽可能保持无状态 — 每项测试都应清理数据或使用唯一数据

快速参考 — Playwright

import { test, expect } from "@playwright/test";

test("GET /api/users returns 200 with valid schema", async ({ request }) => {
  const response = await request.get("/api/users");
  expect(response.ok()).toBeTruthy();
  const body = await response.json();
  expect(body).toMatchObject({ data: expect.any(Array) });
});

快速参考 — REST Assured

import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;

import java.util.List;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

@Test
@DisplayName("GET /api/users returns 200 with valid schema")
void getUsers() {
    String token = "test-token";

    given()
        .header("Authorization", "Bearer " + token)
    .when()
        .get("/api/users")
    .then()
        .statusCode(200)
        .body("data", is(instanceOf(List.class)))
        .body("data.size()", greaterThan(0));
}

危险信号

如果生成的 API 测试中出现以下任何情况,请停下来重新考虑:

  • 只断言状态码,不验证响应正文/架构 — 未经验证的响应会掩盖契约偏差。
  • 在测试文件中提交硬编码的密钥/令牌 — 应从环境变量或密钥管理器中读取。
  • 测试共享可变状态且没有清理 — 容易不稳定,且依赖执行顺序。
  • 跳过身份验证测试(没有对受保护端点断言 401/403)— 存在安全回归风险。
  • 未覆盖错误状态(只有成功路径的 200 响应)— 未测试错误处理。

参考资料

文档内容
REST API 模式CRUD、分页、筛选、错误模式
Playwright API 测试Request fixture、Supertest、TypeScript 模式
REST Assured 测试REST Assured、AssertJ、Java 模式
架构验证Zod(TS)、JSON Schema(Java)、严格与宽松
契约测试请求/响应契约、幂等性、版本管理

模板

脚本

故障排除

问题解决方案
经过身份验证的端点返回 401确认令牌仍然有效;检查是否过期;重新进行身份验证
API 测试不稳定添加重试逻辑;检查是否触发速率限制;使用唯一的测试数据
架构验证过于严格对灵活字段使用 .passthrough()(Zod)或 additionalProperties: true
慢速端点超时增加请求选项中的 timeout;检查服务负载

验证

  • 已设置架构验证 — 每个响应都根据架构(Zod 或 JSON Schema)进行验证
  • 已测试身份验证 — 受保护的端点在没有有效凭据时返回 401
  • 已验证幂等性 — 多次调用 PUT/DELETE 会产生相同结果
  • 已覆盖边缘情况 — 空载荷、无效类型、边界值、SQL 注入尝试

评论

支持 Markdown