golang自动从API调用生成测试用例和数据模拟插件库keploy的使用

Golang 自动从 API 调用生成测试用例和数据模拟插件库 Keploy 的使用

Keploy Logo

⚡️ 比单元测试更快的 API 测试,来自用户流量 ⚡️

🌟 AI 时代开发者的必备工具 🌟

Keploy 是一个开发者为中心的 API 测试工具,可以创建带有内置模拟(mocks)的测试,比单元测试更快。

Keploy 不仅记录 API 调用,还会记录数据库调用并在测试时重放它们,使其易于使用、功能强大且可扩展。

Convert API calls to test cases

🚀 快速安装 (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)
}

记录测试用例

  1. 首先安装 Keploy
  2. 运行你的应用并记录 API 调用:
keploy record -c "go run main.go"
  1. 发送一些请求到你的 API:
curl http://localhost:8080/hello?name=Keploy

运行测试

  1. 停止你的应用
  2. 运行测试:
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 开发者:

  1. 自动从实际 API 调用生成测试用例
  2. 记录和模拟数据库调用等依赖
  3. 无需编写大量测试代码即可获得高测试覆盖率
  4. 与现有测试框架集成

通过简单的命令行工具,你可以快速开始使用 Keploy 来提升你的 API 测试效率和质量。


更多关于golang自动从API调用生成测试用例和数据模拟插件库keploy的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang自动从API调用生成测试用例和数据模拟插件库keploy的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用Keploy自动生成Golang API测试用例和数据模拟

Keploy是一个开源的Golang库,能够自动从API调用中生成测试用例和模拟数据,极大简化了API测试工作。下面我将详细介绍如何使用Keploy。

Keploy核心功能

  1. 自动记录API调用:捕获生产或开发环境中的真实API请求/响应
  2. 生成测试用例:将记录的交互转换为可执行的测试用例
  3. 数据模拟:基于真实数据生成模拟数据
  4. 无代码测试:无需手动编写大量测试代码

安装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)
	}
	
	// 使用模拟数据进行测试
	// ...
}

最佳实践

  1. 环境分离:为不同环境(dev/staging/prod)使用不同的Keploy配置
  2. 定期更新测试:随着API变化更新记录的测试用例
  3. 结合传统测试:将Keploy生成的测试与传统单元测试结合使用
  4. 版本控制:将生成的测试用例纳入版本控制

注意事项

  1. 敏感数据会被记录,生产环境使用时要注意数据脱敏
  2. 复杂的业务逻辑可能需要补充手动测试用例
  3. 测试用例依赖于网络交互顺序,有时需要手动调整

Keploy通过自动化API测试的创建和维护,可以显著提高开发效率,特别是在微服务架构中。它减少了手动编写和维护测试用例的工作量,同时确保了测试基于真实的用户行为。

回到顶部