Keploy API 测试平台全面指南
Keploy 是一个革命性的 API 测试平台,通过智能记录真实流量自动生成测试用例,让 API 测试变得简单高效。它支持多种编程语言和框架,是现代微服务架构的理想测试解决方案。
2025年9月18日
DocsLib Team
KeployAPI测试自动化测试流量录制微服务测试
Keploy API 测试平台全面指南
什么是Keploy?
Keploy 是一个革命性的 API 测试平台,专为现代微服务架构设计。与传统的 API 测试工具不同,Keploy 通过智能记录真实的 API 流量来自动生成测试用例,大大简化了 API 测试的复杂性。它已经成为现代开发团队进行 API 测试的首选工具之一。
Keploy 的主要特点
- 智能流量录制:自动记录真实的 API 请求和响应,无需手动编写测试用例
- 自动测试生成:基于录制的流量自动生成完整的测试套件
- 多语言支持:支持 Go、Java、Python、Node.js 等多种编程语言
- 微服务友好:专为微服务架构设计,支持服务间依赖测试
- 零配置测试:无需复杂的配置,开箱即用
- 智能断言:自动生成智能断言,减少测试维护成本
- CI/CD 集成:完美集成到持续集成和部署流程中
- 实时测试:支持实时测试和调试
安装与设置
前提条件
- Docker 和 Docker Compose
- Go 1.19+ (如果使用 Go 应用)
- 现代浏览器
- 基本的命令行知识
安装步骤
- 使用 Docker 快速启动 Keploy:
# 克隆 Keploy 仓库
git clone https://github.com/keploy/keploy.git
cd keploy
# 启动 Keploy 服务
docker-compose up -d
- 或者使用二进制安装:
# 下载并安装 Keploy CLI
curl --silent --location "https://github.com/keploy/keploy/releases/latest/download/keploy_linux_amd64.tar.gz" | tar xz -C /tmp
sudo mkdir -p /usr/local/bin && sudo mv /tmp/keploy /usr/local/bin
- 验证安装:
keploy --version
快速开始
让我们通过一个简单的示例来了解 Keploy 的基本用法。
1. 准备测试应用
首先,我们创建一个简单的 Go HTTP 服务:
// main.go
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"strconv"
)
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
}
var users = []User{
{ID: 1, Name: "张三", Email: "zhangsan@example.com"},
{ID: 2, Name: "李四", Email: "lisi@example.com"},
}
func getUsers(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(users)
}
func getUserByID(w http.ResponseWriter, r *http.Request) {
idStr := r.URL.Query().Get("id")
id, err := strconv.Atoi(idStr)
if err != nil {
http.Error(w, "Invalid ID", http.StatusBadRequest)
return
}
for _, user := range users {
if user.ID == id {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(user)
return
}
}
http.Error(w, "User not found", http.StatusNotFound)
}
func main() {
http.HandleFunc("/users", getUsers)
http.HandleFunc("/user", getUserByID)
fmt.Println("Server starting on :8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
2. 启动 Keploy 录制
# 启动 Keploy 录制模式
keploy record --pid $(pgrep -f "go run main.go")
3. 生成测试流量
使用 curl 或其他工具发送请求:
# 获取所有用户
curl http://localhost:8080/users
# 获取特定用户
curl "http://localhost:8080/user?id=1"
4. 运行测试
# 停止录制并运行测试
keploy test --pid $(pgrep -f "go run main.go")
核心功能详解
流量录制
Keploy 的流量录制功能是其核心特性之一:
# 录制特定端口的流量
keploy record --pid $(pgrep -f "your-app")
# 录制特定时间段的流量
keploy record --pid $(pgrep -f "your-app") --duration 30s
# 录制特定路径的流量
keploy record --pid $(pgrep -f "your-app") --path "/api/v1"
测试生成
基于录制的流量,Keploy 自动生成测试用例:
# 自动生成的测试文件示例
version: api.keploy.io/v1beta1
kind: Test
metadata:
name: test-1
spec:
req:
method: GET
proto_major: 1
proto_minor: 1
url: http://localhost:8080/users
header:
Accept: ["*/*"]
User-Agent: ["curl/7.68.0"]
resp:
status_code: 200
header:
Content-Type: ["application/json"]
body: '[{"id":1,"name":"张三","email":"zhangsan@example.com"},{"id":2,"name":"李四","email":"lisi@example.com"}]'
智能断言
Keploy 提供多种断言类型:
# 状态码断言
assertions:
- type: status_code
expected: 200
# 响应体断言
assertions:
- type: body
expected: '{"status":"success"}'
# 头部断言
assertions:
- type: header
key: "Content-Type"
expected: "application/json"
高级功能
1. 微服务测试
对于微服务架构,Keploy 支持服务间依赖测试:
# 录制多个服务的交互
keploy record --services user-service,order-service,payment-service
2. 数据库模拟
Keploy 可以模拟数据库响应:
# 数据库模拟配置
mocks:
- type: database
name: postgres
responses:
- query: "SELECT * FROM users WHERE id = ?"
result: '[{"id":1,"name":"张三","email":"zhangsan@example.com"}]'
3. 外部 API 模拟
模拟外部 API 调用:
# 外部 API 模拟
mocks:
- type: http
url: "https://api.external.com/users"
method: GET
response:
status: 200
body: '{"external_user_id": 123, "name": "外部用户"}'
4. 测试数据管理
# 使用测试数据集
keploy test --dataset test-data-1
# 创建测试数据快照
keploy snapshot --name "baseline-data"
实际项目示例
让我们创建一个完整的电商 API 测试示例。
项目结构
ecommerce-api/
├── main.go
├── handlers/
│ ├── user.go
│ ├── product.go
│ └── order.go
├── models/
│ ├── user.go
│ ├── product.go
│ └── order.go
└── keploy/
├── test-1.yaml
├── test-2.yaml
└── mocks/
用户服务测试
// handlers/user.go
package handlers
import (
"encoding/json"
"net/http"
"strconv"
)
type UserHandler struct {
users []User
}
func (h *UserHandler) CreateUser(w http.ResponseWriter, r *http.Request) {
var user User
if err := json.NewDecoder(r.Body).Decode(&user); err != nil {
http.Error(w, "Invalid JSON", http.StatusBadRequest)
return
}
user.ID = len(h.users) + 1
h.users = append(h.users, user)
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode(user)
}
func (h *UserHandler) GetUser(w http.ResponseWriter, r *http.Request) {
idStr := r.URL.Query().Get("id")
id, err := strconv.Atoi(idStr)
if err != nil {
http.Error(w, "Invalid ID", http.StatusBadRequest)
return
}
for _, user := range h.users {
if user.ID == id {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(user)
return
}
}
http.Error(w, "User not found", http.StatusNotFound)
}
录制测试场景
# 1. 启动应用
go run main.go &
# 2. 开始录制
keploy record --pid $(pgrep -f "go run main.go")
# 3. 执行测试场景
curl -X POST http://localhost:8080/users \
-H "Content-Type: application/json" \
-d '{"name":"张三","email":"zhangsan@example.com"}'
curl "http://localhost:8080/users?id=1"
# 4. 停止录制
# Keploy 会自动生成测试用例
生成的测试用例
# keploy/test-1.yaml - 创建用户测试
version: api.keploy.io/v1beta1
kind: Test
metadata:
name: create-user-test
spec:
req:
method: POST
url: http://localhost:8080/users
header:
Content-Type: ["application/json"]
body: '{"name":"张三","email":"zhangsan@example.com"}'
resp:
status_code: 201
header:
Content-Type: ["application/json"]
body: '{"id":1,"name":"张三","email":"zhangsan@example.com"}'
assertions:
- type: status_code
expected: 201
- type: body
expected: '{"id":1,"name":"张三","email":"zhangsan@example.com"}'
最佳实践
1. 测试组织
keploy/
├── unit/ # 单元测试
├── integration/ # 集成测试
├── e2e/ # 端到端测试
└── mocks/ # 模拟数据
2. 环境配置
# keploy.yaml
version: api.keploy.io/v1beta1
kind: Config
metadata:
name: keploy-config
spec:
app:
name: ecommerce-api
port: 8080
server:
url: http://localhost:6789
test:
path: ./keploy
timeout: 30s
record:
path: ./keploy
filters:
- path: "/health"
- path: "/metrics"
3. CI/CD 集成
# .github/workflows/keploy.yml
name: Keploy Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Go
uses: actions/setup-go@v2
with:
go-version: 1.19
- name: Install Keploy
run: |
curl --silent --location "https://github.com/keploy/keploy/releases/latest/download/keploy_linux_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/keploy /usr/local/bin
- name: Run Keploy Tests
run: |
go run main.go &
sleep 5
keploy test --pid $(pgrep -f "go run main.go")
4. 测试数据管理
# 创建测试数据快照
keploy snapshot --name "production-like-data"
# 使用特定数据集运行测试
keploy test --dataset "production-like-data"
# 清理测试数据
keploy clean --all
常见问题与解决方案
1. 录制失败
问题:无法录制到 API 流量
解决方案:
- 确保应用正在运行且可访问
- 检查端口配置是否正确
- 验证 Keploy 进程权限
# 检查应用状态
ps aux | grep your-app
# 检查端口占用
netstat -tlnp | grep :8080
2. 测试不稳定
问题:测试结果不一致
解决方案:
- 使用固定时间戳和 ID
- 配置适当的等待时间
- 使用模拟数据替代真实数据
# 配置稳定的测试环境
spec:
test:
timeout: 60s
retries: 3
record:
filters:
- header: "X-Request-ID"
- timestamp: true
3. 复杂依赖处理
问题:微服务间依赖复杂
解决方案:
- 使用服务模拟
- 配置依赖注入
- 分层测试策略
# 服务依赖配置
dependencies:
- name: user-service
url: http://user-service:8080
mock: true
- name: payment-service
url: http://payment-service:8080
mock: true
性能优化
1. 并行测试
# 并行运行测试
keploy test --parallel 4
# 分布式测试
keploy test --distributed --nodes 3
2. 测试缓存
# 启用测试缓存
keploy test --cache-enabled
# 清理缓存
keploy cache --clear
3. 资源限制
# 资源配置
spec:
resources:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "1000m"
memory: "1Gi"
监控和报告
1. 测试报告
# 生成详细报告
keploy test --report-format html
# 导出测试结果
keploy export --format json --output test-results.json
2. 集成监控
# 监控配置
monitoring:
enabled: true
metrics:
- test_execution_time
- test_success_rate
- api_response_time
alerts:
- condition: "success_rate < 0.95"
action: "notify_team"
总结
Keploy 是一个革命性的 API 测试平台,它通过智能流量录制和自动测试生成,大大简化了 API 测试的复杂性。无论是简单的单体应用还是复杂的微服务架构,Keploy 都能提供强大的测试解决方案。
通过本指南,你已经学习了 Keploy 的核心概念、安装配置、基本用法和高级功能。现在你可以开始为你的项目设置自动化 API 测试了。记住,良好的 API 测试覆盖率不仅能提高系统稳定性,还能加速开发流程,让团队更有信心地进行代码重构和新功能开发。
要了解更多信息,请访问 Keploy 官方文档中文版