golang支持HTTP和gRPC协议的API测试工具插件库Chapar的使用

Golang支持HTTP和gRPC协议的API测试工具插件库Chapar的使用

Chapar简介

Chapar是一个用Go语言构建的本地API测试工具,旨在简化并加速开发者的测试过程。目前仍处于早期测试阶段,Chapar旨在提供用户友好的体验,支持HTTP和gRPC协议。

Chapar Logo

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

1 回复

更多关于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协议。它的主要特点包括:

  1. 简洁的API设计
  2. 内置常用验证器
  3. 支持自定义验证逻辑
  4. 支持请求管道和依赖关系
  5. 同时支持HTTP和gRPC测试

通过使用Chapar,开发者可以更轻松地编写API测试代码,提高测试覆盖率和代码质量。

回到顶部