golang支持HTTP和gRPC协议的API测试工具插件库Chapar的使用
Golang支持HTTP和gRPC协议的API测试工具插件库Chapar的使用
Chapar简介
Chapar是一个用Go语言构建的本地API测试工具,旨在简化并加速开发者的测试过程。目前仍处于早期测试阶段,Chapar旨在提供用户友好的体验,支持HTTP和gRPC协议。
Chapar名称由来
Chapar是古波斯皇家信使机构的名称。这些被称为Chapar的信使沿着皇家道路在相距一天路程的车站交替。骑手们专门为大王服务,这个网络允许消息在9天内从苏萨传递到萨迪斯(2699公里);步行则需要90天。
希罗多德这样描述Chapar:
世界上没有什么比这些波斯信使跑得更快的了。无论是雪、雨、热还是黑夜的黑暗,都不能阻止这些信使以最快的速度完成他们指定的阶段。
希罗多德,约公元前440年
项目状态
在仓库的主分支上,您可以找到Chapar的最新开发版本。这个版本还不稳定,可能包含错误或不完整的功能。我们正在积极改进应用程序并添加新功能。
当前未发布的功能
- 用于设置环境变量和读取请求/响应数据的预/后请求脚本
- 查看日志的控制台面板
- 通知的新UI设计
- 许多错误修复和改进
Chapar功能
- 创建和管理工作区来组织API端点
- 创建和管理环境来存储API端点的变量和配置
- 创建和管理请求来测试API端点
- 支持不同方法发送请求(GET, POST, PUT, DELETE, PATCH, HEAD, OPTION, CONNECT)
- 支持不同内容类型发送请求(JSON, XML, Form, Text, HTML)
- 支持不同认证方法(Basic, Bearer, API Key, No Auth)
- 支持不同请求体类型(Form, Raw, Binary)
- 使用JSONPath从请求响应中设置环境变量
- 支持暗黑模式
- 数据存储在本地机器上,不会发送到任何服务器
- 从Postman导入集合和请求
- 支持gRPC协议
- 支持gRPC反射和proto文件
- 加载给定gRPC方法的示例请求结构
- 通过预/后请求选项链接请求
安装使用
从源码安装
要从源码安装Chapar,克隆仓库,安装依赖项,并使用以下命令运行应用程序:
git clone https://github.com/chapar-rest/chapar.git
cd chapar
go build -o chapar .
示例代码
以下是使用Chapar进行HTTP和gRPC测试的示例代码:
package main
import (
"fmt"
"github.com/chapar-rest/chapar/core/client"
)
func main() {
// 创建HTTP客户端
httpClient := client.NewHTTPClient()
// 发送GET请求
resp, err := httpClient.Get("https://api.example.com/users", nil)
if err != nil {
fmt.Printf("HTTP GET请求失败: %v\n", err)
return
}
fmt.Printf("HTTP响应: %s\n", resp.Body)
// 创建gRPC客户端
grpcClient := client.NewGRPCClient()
// 设置gRPC服务器地址
err = grpcClient.SetServerAddress("grpc.example.com:50051")
if err != nil {
fmt.Printf("设置gRPC服务器地址失败: %v\n", err)
return
}
// 加载proto文件
err = grpcClient.LoadProtoFile("user_service.proto")
if err != nil {
fmt.Printf("加载proto文件失败: %v\n", err)
return
}
// 调用gRPC方法
grpcResp, err := grpcClient.InvokeMethod("UserService.GetUser", `{"id": "123"}`)
if err != nil {
fmt.Printf("gRPC调用失败: %v\n", err)
return
}
fmt.Printf("gRPC响应: %s\n", grpcResp)
}
依赖项
如果要构建项目,需要安装以下依赖项: Chapar使用Gio库构建,因此需要安装以下依赖项来构建项目:
- 对于Linux,请遵循gio linux安装说明
- 对于macOS,请遵循gio macos安装说明
贡献
早期测试版发布后,我们欢迎社区贡献!如果您有想法、反馈或希望贡献,请提出问题或提交拉取请求。
支持
您可以通过给仓库加星、与朋友分享以及贡献项目来支持Chapar的开发。也可以通过捐赠来支持该项目。
更多关于golang支持HTTP和gRPC协议的API测试工具插件库Chapar的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang支持HTTP和gRPC协议的API测试工具插件库Chapar的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Chapar - Go语言HTTP/gRPC API测试工具库
Chapar是一个用于Go语言的HTTP和gRPC API测试工具库,它提供了简洁的API来构建和发送HTTP/gRPC请求,并验证响应结果。
安装
go get github.com/reddec/chapar
基本使用
HTTP测试示例
package main
import (
"context"
"fmt"
"net/http"
"testing"
"time"
"github.com/reddec/chapar"
"github.com/reddec/chapar/expect"
)
func TestHTTPAPI(t *testing.T) {
// 创建Chapar实例
client := chapar.New()
// 构建HTTP请求
req := chapar.Request{
Method: http.MethodGet,
URL: "https://jsonplaceholder.typicode.com/posts/1",
Headers: map[string]string{
"Accept": "application/json",
},
Timeout: 5 * time.Second,
}
// 发送请求并验证响应
resp, err := client.Do(context.Background(), req,
expect.StatusCode(http.StatusOK),
expect.JSONPathEqual("$.userId", float64(1)), // JSONPath匹配
expect.HeaderExists("Content-Type"),
)
if err != nil {
t.Fatalf("Request failed: %v", err)
}
fmt.Printf("Response: %+v\n", resp)
}
gRPC测试示例
package main
import (
"context"
"fmt"
"testing"
"time"
"github.com/reddec/chapar"
"github.com/reddec/chapar/expect"
"google.golang.org/grpc"
"google.golang.org/grpc/examples/helloworld/helloworld"
)
func TestGRPCAPI(t *testing.T) {
// 创建Chapar实例
client := chapar.New()
// 构建gRPC请求
req := chapar.GRPCRequest{
Address: "localhost:50051",
Service: "helloworld.Greeter",
Method: "SayHello",
Payload: map[string]interface{}{
"name": "World",
},
Timeout: 5 * time.Second,
Options: []grpc.DialOption{grpc.WithInsecure()},
}
// 发送请求并验证响应
resp, err := client.Call(context.Background(), req,
expect.GRPCPayloadFieldEqual("message", "Hello World"),
)
if err != nil {
t.Fatalf("gRPC call failed: %v", err)
}
fmt.Printf("gRPC Response: %+v\n", resp)
}
高级特性
自定义验证器
// 自定义响应验证器
func expectCustomValidator(expected string) chapar.Validator {
return func(resp *chapar.Response) error {
if resp.BodyString() != expected {
return fmt.Errorf("expected body %q, got %q", expected, resp.BodyString())
}
return nil
}
}
func TestCustomValidator(t *testing.T) {
client := chapar.New()
req := chapar.Request{
Method: http.MethodGet,
URL: "http://example.com",
}
_, err := client.Do(context.Background(), req, expectCustomValidator("expected content"))
if err != nil {
t.Fatal(err)
}
}
请求管道
func TestRequestPipeline(t *testing.T) {
client := chapar.New()
// 第一个请求获取token
loginResp, err := client.Do(context.Background(), chapar.Request{
Method: http.MethodPost,
URL: "https://api.example.com/login",
Body: []byte(`{"username":"test","password":"test"}`),
Headers: map[string]string{
"Content-Type": "application/json",
},
}, expect.StatusCode(http.StatusOK))
if err != nil {
t.Fatal(err)
}
// 从登录响应中提取token
token := loginResp.JSON().Get("token").String()
// 使用token进行授权请求
_, err = client.Do(context.Background(), chapar.Request{
Method: http.MethodGet,
URL: "https://api.example.com/protected",
Headers: map[string]string{
"Authorization": "Bearer " + token,
},
}, expect.StatusCode(http.StatusOK))
if err != nil {
t.Fatal(err)
}
}
内置验证器
Chapar提供了一些内置的验证器:
expect.StatusCode(code int)
- 验证HTTP状态码expect.HeaderExists(key string)
- 验证头是否存在expect.HeaderEqual(key, value string)
- 验证头值expect.JSONPathEqual(path string, expected interface{})
- 验证JSON路径值expect.BodyEqual(expected string)
- 验证响应体expect.GRPCPayloadFieldEqual(field string, expected interface{})
- 验证gRPC响应字段
总结
Chapar是一个功能强大且灵活的Go语言API测试库,支持HTTP和gRPC协议。它的主要特点包括:
- 简洁的API设计
- 内置常用验证器
- 支持自定义验证逻辑
- 支持请求管道和依赖关系
- 同时支持HTTP和gRPC测试
通过使用Chapar,开发者可以更轻松地编写API测试代码,提高测试覆盖率和代码质量。