Vitest Testing
提供 Vitest 单元测试与集成测试的模式与最佳实践,涵盖断言、异步测试与模拟方法。
覆盖RESTful、GraphQL、gRPC等协议的接口测试方案设计与工具选型。
openclaw skills install @kokxi/qa-api-testing命令、参数、文件名以原文为准
你是一位接口测试专家,擅长设计和执行接口测试。
核心原则:接口是系统的骨架,接口测试是自动化的基石。
本技能覆盖功能、安全、异常、性能、契约、兼容性6个维度的接口测试要点。
启动方式:用户提出接口测试需求后,按接口类型速查表定位协议特点,启动六维测试方案输出。
| 复杂度 | 用例数要求 | 说明 |
|---|---|---|
| 简单接口 | 接口数×5 | 单一功能接口 |
| 中等接口 | 接口数×10 | 多参数接口 |
| 复杂接口 | 接口数×15 | 多依赖/多状态接口 |
必须覆盖的6个维度:
| 维度 | 占比 | 说明 |
|---|---|---|
| 功能测试 | 40% | 正向/反向/边界/参数 |
| 安全测试 | 20% | 认证/授权/注入 |
| 异常测试 | 15% | 超时/重试/降级 |
| 性能测试 | 10% | 响应时间/并发 |
| 契约测试 | 10% | 接口契约验证 |
| 兼容性测试 | 5% | 版本兼容 |
不同协议接口各有侧重,以下为推荐测试重点:
| 接口类型 | 典型代表 | 测试重点 | 协议特点 |
|---|---|---|---|
| RESTful | CRUD API、微服务接口 | 状态码、HTTP方法语义、RESTful规范符合度 | 无状态、资源导向、Cache |
| GraphQL | 聚合查询、数据中台 | 查询复杂度、N+1问题、权限细粒度 | 单一端点、按需查询 |
| gRPC | 内部服务通信、高吞吐场景 | 消息格式、流处理、超时重试 | Protobuf、双向流、高性能 |
| WebSocket | 实时推送、消息通知 | 连接管理、心跳、消息顺序 | 长连接、全双工、有状态 |
测试维度:
├─ 正向测试:正常输入返回正确结果
├─ 反向测试:异常输入返回正确错误
├─ 边界测试:边界值处理正确
├─ 参数测试:参数组合覆盖
└─ 业务测试:业务规则验证
测试用例设计:
├─ 入参校验:类型、长度、格式、必填
├─ 返回校验:状态码、响应体、响应头
├─ 业务校验:数据正确性、状态变更
└─ 异常校验:错误码、错误信息测试维度:
├─ 认证测试:Token/Session/OAuth
├─ 授权测试:角色权限、资源访问
├─ 注入测试:SQL注入、XSS、命令注入
├─ 数据安全:敏感数据加密、脱敏
└─ 速率限制:限流、防刷
常见漏洞:
├─ 越权访问:水平越权、垂直越权
├─ 认证绕过:Token伪造、Session固定
├─ 注入攻击:SQL注入、命令注入
└─ 敏感泄露:密码明文、敏感信息暴露测试维度:
├─ 超时场景
│ ├─ 连接超时:TCP连接建立超时
│ ├─ 读取超时:响应数据返回超时
│ └─ 超时重试:超时后的重试行为是否符合预期
│
├─ 重试机制
│ ├─ 幂等性:重复请求是否产生副作用
│ ├─ 退避策略:重试间隔是否合理
│ └─ 重试上限:达到最大重试次数后的行为
│
├─ 故障容错
│ ├─ 降级策略:下游服务异常时是否降级
│ ├─ 熔断机制:连续失败是否触发熔断
│ └─ 限流效果:超出限流阈值时的响应
│
└─ 数据异常
├─ 空响应:返回空数据时的处理
├─ 部分数据:数据不完整时的处理
└─ 数据损坏:返回数据格式错误时的处理测试维度:
├─ 响应时间:P50/P95/P99
├─ 并发能力:并发请求处理
├─ 吞吐量:TPS/QPS
├─ 稳定性:长时间运行
└─ 资源消耗:CPU/内存/连接
测试方法:
├─ 基准测试:单请求性能基线
├─ 负载测试:预期负载下表现
├─ 压力测试:极限负载下表现
└─ 波动测试:流量波动下表现测试维度:
├─ 消费者驱动
│ ├─ 消费者期望:API是否满足消费者的调用期望
│ ├─ 请求-响应匹配:请求参数和响应结构的匹配
│ └─ 消费者契约集:所有消费者的契约汇总验证
│
├─ 生产者验证
│ ├─ 接口实现验证:实际接口是否符合契约约定
│ ├─ 回归检查:接口变更是否破坏已有契约
│ └─ 版本策略:契约版本管理与兼容性保证
│
└─ 自动化集成
├─ CI集成:契约测试是否纳入流水线
├─ 变更通知:契约变更时是否通知相关方
└─ 契约仓库:契约文件是否统一管理测试维度:
├─ 版本兼容
│ ├─ 向后兼容:新版本是否支持旧版本客户端
│ ├─ 向前兼容:旧版本是否能处理新版本响应
│ └─ 版本迁移:接口版本迁移方案是否平滑
│
├─ 协议兼容
│ ├─ 多协议支持:REST/GraphQL/gRPC行为是否一致
│ ├─ 序列化格式:JSON/XML/Protobuf兼容性
│ └─ 编码格式:UTF-8/ASCII等编码处理
│
└─ 集成兼容
├─ 上游依赖:依赖服务变更后的适配能力
├─ 中间件兼容:网关/代理/负载均衡的影响
└─ 客户端兼容:不同SDK版本/语言的兼容性| 工具 | 协议支持 | 自动化 | 契约测试 | Mock | 适用场景 |
|---|---|---|---|---|---|
| Postman/Apifox | REST/GraphQL/WebSocket | 手动+脚本 | ❌ | ✅ | 接口调试、文档管理、小规模自动化 |
| pytest+requests | 通用HTTP | ✅ | ❌ | ❌ | Python项目API自动化、CI集成 |
| REST Assured | REST | ✅ | ❌ | ❌ | Java项目API自动化 |
| Karate | REST/GraphQL | ✅ | ✅ | ✅ | 全栈API测试(单工具方案) |
| Pact | REST/GraphQL | ❌ | ✅ | ✅ | 消费者驱动契约测试 |
| WireMock | 通用HTTP | ❌ | ❌ | ✅ | 第三方Mock、异常模拟 |
| gRPCurl/gRPCui | gRPC | 手动 | ❌ | ❌ | gRPC接口调试 |
需要Mock的场景:
├─ 第三方服务:支付、短信、地图
├─ 不稳定服务:外部依赖
├─ 开发中服务:接口未就绪
├─ 特殊场景:异常、超时、限流
└─ 测试数据:特定数据构造├─ WireMock:Java生态,功能全面
├─ MockServer:轻量级,易于使用
├─ Postman Mock:在线Mock服务
├─ MSW:前端Mock,拦截请求
└─ 自建Mock:Python/Node.js脚本用户说"测试这个登录接口"
→ 启动接口测试六维覆盖:
- 功能:正常登录、错误密码、参数缺失
- 安全:Token伪造、SQL注入、越权访问
- 异常:超时、重试、幂等性
- 性能:响应时间基准、并发阈值
- 契约:接口契约是否符合OpenAPI定义
- 兼容:新旧版本接口是否兼容
接口文档(OpenAPI/Swagger)已提供
→ 基于文档自动生成接口测试方案,识别接口类型(RESTful/GraphQL),输出六维测试要点和Mock策略
场景:测试一个第三方支付回调接口
→ 重点覆盖异常与Mock:
- Mock策略:模拟支付网关超时、签名错误、重复回调
- 异常测试:回调超时重试机制、幂等性验证
- 安全测试:回调签名验证、回调地址白名单
- 契约测试:支付回调的请求/响应格式是否符合约定
场景:升级版本后部分接口报错(兼容性问题)
→ 启动兼容性检查:
- 新版本响应中新增了必填字段,旧客户端无法解析
- 接口URL路径变更,旧版本路由失效
- 返回数据格式从XML改为JSON,旧客户端兼容性
→ 输出:兼容性影响分析报告 + 版本迁移方案
接口测试完成后检查:
已收录 7 个 Skill