golang自动从API调用生成测试用例和数据模拟插件库keploy的使用
Golang 自动从 API 调用生成测试用例和数据模拟插件库 Keploy 的使用
⚡️ 比单元测试更快的 API 测试,来自用户流量 ⚡️
🌟 AI 时代开发者的必备工具 🌟
Keploy 是一个开发者为中心的 API 测试工具,可以创建带有内置模拟(mocks)的测试,比单元测试更快。
Keploy 不仅记录 API 调用,还会记录数据库调用并在测试时重放它们,使其易于使用、功能强大且可扩展。
🚀 快速安装 (API 测试生成器)
通过本地安装代理来集成 Keploy。无需代码更改。
curl --silent -O -L https://keploy.io/install.sh && source install.sh
🎬 记录测试用例
使用 Keploy 启动你的应用,将 API 调用转换为测试和模拟/存根。
keploy record -c "CMD_TO_RUN_APP"
例如,如果你使用一个简单的 Golang 应用,CMD_TO_RUN_APP
类似于 go run main.go
:
keploy record -c "go run main.go"
🧪 运行测试
关闭你的应用使用的数据库、redis、kafka 或其他服务。Keploy 在测试期间不需要这些。
keploy test -c "CMD_TO_RUN_APP" --delay 10
✅ 测试覆盖率集成
要与你的单元测试库集成并查看组合测试覆盖率,请遵循此测试覆盖率指南。
Golang 示例 Demo
以下是一个简单的 Golang HTTP 服务器示例,展示如何使用 Keploy 记录和测试 API:
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/hello", helloHandler)
fmt.Println("Server starting on port 8080...")
http.ListenAndServe(":8080", nil)
}
func helloHandler(w http.ResponseWriter, r *http.Request) {
name := r.URL.Query().Get("name")
if name == "" {
name = "World"
}
fmt.Fprintf(w, "Hello, %s!", name)
}
记录测试用例
- 首先安装 Keploy
- 运行你的应用并记录 API 调用:
keploy record -c "go run main.go"
- 发送一些请求到你的 API:
curl http://localhost:8080/hello?name=Keploy
运行测试
- 停止你的应用
- 运行测试:
keploy test -c "go run main.go" --delay 10
Keploy 会重放之前记录的请求并验证响应。
🔧 核心特性
- ♻️ 组合测试覆盖率:将 Keploy 测试与你喜欢的测试库(JUnit, go-test, py-test, jest)合并,查看组合测试覆盖率。
- 🤖 EBPF 检测:Keploy 使用 EBPF 使集成无代码、语言无关且非常轻量级。
- 🌐 CI/CD 集成:可以在任何地方运行测试 - 本地 CLI、CI 管道(Jenkins, Github Actions…)或 Kubernetes 集群。
- 📽️ 记录-重放复杂流程:Keploy 可以记录和重放复杂的分布式 API 流程作为模拟和存根。
- 🎭 多用途模拟:你也可以将 Keploy 生成的模拟用作服务器测试!
🌐 语言支持
Keploy 支持多种语言,包括 Go、Java、Node.js、Rust、C# 和 Python。
总结
Keploy 是一个强大的工具,可以帮助 Golang 开发者:
- 自动从实际 API 调用生成测试用例
- 记录和模拟数据库调用等依赖
- 无需编写大量测试代码即可获得高测试覆盖率
- 与现有测试框架集成
通过简单的命令行工具,你可以快速开始使用 Keploy 来提升你的 API 测试效率和质量。
更多关于golang自动从API调用生成测试用例和数据模拟插件库keploy的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang自动从API调用生成测试用例和数据模拟插件库keploy的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用Keploy自动生成Golang API测试用例和数据模拟
Keploy是一个开源的Golang库,能够自动从API调用中生成测试用例和模拟数据,极大简化了API测试工作。下面我将详细介绍如何使用Keploy。
Keploy核心功能
- 自动记录API调用:捕获生产或开发环境中的真实API请求/响应
- 生成测试用例:将记录的交互转换为可执行的测试用例
- 数据模拟:基于真实数据生成模拟数据
- 无代码测试:无需手动编写大量测试代码
安装Keploy
go get -u github.com/keploy/go-sdk
基本使用示例
1. 初始化Keploy
package main
import (
"github.com/keploy/go-sdk/keploy"
"net/http"
)
func main() {
// 初始化Keploy
k := keploy.New(keploy.Config{
App: keploy.AppConfig{
Name: "my-api-service",
Port: "8080",
},
Server: keploy.ServerConfig{
URL: "http://localhost:6789", // Keploy服务器地址
},
})
// 你的HTTP处理器
http.HandleFunc("/api/user", func(w http.ResponseWriter, r *http.Request) {
// 你的业务逻辑
})
// 用Keploy包装HTTP服务器
http.ListenAndServe(":8080", k.HttpHandler(http.DefaultServeMux))
}
2. 记录测试用例
运行你的服务并发送API请求,Keploy会自动记录这些交互:
curl -X GET http://localhost:8080/api/user?id=123
Keploy会在keploy/test-<timestamp>
目录下生成测试用例。
3. 回放测试用例
package main
import (
"github.com/keploy/go-sdk/keploy"
"testing"
)
func TestAPI(t *testing.T) {
// 初始化Keploy测试
kc := keploy.NewTest(keploy.TestConfig{
App: keploy.AppConfig{
Name: "my-api-service",
Port: "8080",
},
Mocks: keploy.MockConfig{
Path: "./keploy/mocks", // 模拟数据路径
},
})
// 运行记录的测试用例
kc.Run(t, func() {
// 这里可以添加自定义测试逻辑
// 或者让Keploy自动运行记录的测试
})
}
高级功能
1. 自定义测试验证
func TestAPIWithValidation(t *testing.T) {
kc := keploy.NewTest(keploy.TestConfig{
App: keploy.AppConfig{
Name: "my-api-service",
},
})
kc.Run(t, func() {
// 自定义HTTP客户端
client := &http.Client{}
req, _ := http.NewRequest("GET", "http://localhost:8080/api/user?id=123", nil)
resp, err := client.Do(req)
if err != nil {
t.Fatalf("请求失败: %v", err)
}
// 自定义验证
if resp.StatusCode != 200 {
t.Errorf("期望状态码200, 得到 %d", resp.StatusCode)
}
// 也可以让Keploy自动验证记录的响应
kc.Assert(resp)
})
}
2. 模拟外部依赖
Keploy可以记录和模拟外部服务调用:
func TestWithExternalService(t *testing.T) {
kc := keploy.NewTest(keploy.TestConfig{
App: keploy.AppConfig{
Name: "my-api-service",
},
Mocks: keploy.MockConfig{
Path: "./keploy/mocks",
},
})
// 模拟HTTP客户端
mockClient := kc.HTTPClient()
// 这个请求会被Keploy拦截并使用模拟数据
resp, err := mockClient.Get("http://external-service.com/api/data")
if err != nil {
t.Fatal(err)
}
// 使用模拟数据进行测试
// ...
}
最佳实践
- 环境分离:为不同环境(dev/staging/prod)使用不同的Keploy配置
- 定期更新测试:随着API变化更新记录的测试用例
- 结合传统测试:将Keploy生成的测试与传统单元测试结合使用
- 版本控制:将生成的测试用例纳入版本控制
注意事项
- 敏感数据会被记录,生产环境使用时要注意数据脱敏
- 复杂的业务逻辑可能需要补充手动测试用例
- 测试用例依赖于网络交互顺序,有时需要手动调整
Keploy通过自动化API测试的创建和维护,可以显著提高开发效率,特别是在微服务架构中。它减少了手动编写和维护测试用例的工作量,同时确保了测试基于真实的用户行为。