You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量发送多份gRPC请求,测试服务器并发处理与一致性?

多gRPC并发请求测试方案

一、命令行工具

1. grpcurl

这是gRPC生态里常用的命令行工具,配合shell脚本就能快速实现并发请求:

  • 先准备好若干份参数不同的JSON请求文件,比如req1.json、req2.json...
  • 用shell后台执行命令批量触发,让请求近乎同时发出:
for i in {1..10}; do
  grpcurl -d @ -plaintext localhost:50051 your.package.YourService/YourMethod < req$i.json &
done
wait

&会把每个请求放到后台运行,wait用于等待所有请求执行完成,能保证10个请求几乎同时发送到服务器。

2. hey(支持gRPC扩展)

原本是HTTP压测工具,现在有gRPC适配版本,能直接指定并发数和总请求数:

hey -n 100 -c 10 -m POST -d '{"param":"value"}' grpc://localhost:50051/your.package.YourService/YourMethod

-n是总请求数,-c是并发数,执行后会输出响应时间、成功率等统计数据,方便后续分析。

二、代码实现(自定义请求更灵活)

如果需要每个请求的参数有细微差异,用代码实现会更灵活,以下是两种常用语言的示例:

1. Python

借助grpcio库和concurrent.futures实现并发请求:

import grpc
from concurrent import futures
import your_pb2
import your_pb2_grpc

def send_request(param):
    with grpc.insecure_channel('localhost:50051') as channel:
        stub = your_pb2_grpc.YourServiceStub(channel)
        response = stub.YourMethod(your_pb2.YourRequest(param=param))
        # 可添加响应校验或状态记录逻辑

# 生成10个带不同参数的请求
params = [f"test_{i}" for i in range(10)]

# 启用10个线程并发执行
with futures.ThreadPoolExecutor(max_workers=10) as executor:
    executor.map(send_request, params)

2. Go

利用Go原生goroutine的并发特性,代码简洁高效:

package main

import (
    "context"
    "fmt"
    "log"
    "sync"

    "google.golang.org/grpc"
    "your/package/pb"
)

func main() {
    conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure())
    if err != nil {
        log.Fatalf("连接失败: %v", err)
    }
    defer conn.Close()
    client := pb.NewYourServiceClient(conn)

    var wg sync.WaitGroup
    // 并发发送10个请求
    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func(idx int) {
            defer wg.Done()
            req := &pb.YourRequest{Param: fmt.Sprintf("test_%d", idx)}
            resp, err := client.YourMethod(context.Background(), req)
            if err != nil {
                log.Printf("请求 %d 失败: %v", idx, err)
            } else {
                log.Printf("请求 %d 响应: %v", idx, resp)
            }
        }(i)
    }
    wg.Wait()
}

三、GUI工具(替代BloomRPC)

1. Postman

Postman已支持gRPC请求,可通过集合运行器实现并发测试:

  • 创建gRPC请求并保存到集合
  • 打开集合运行器,设置迭代次数、并发数
  • 用预请求脚本生成不同参数,实现每份请求的细微差异

2. Insomnia

和Postman功能类似,支持gRPC集合测试,可配置并发请求,还能通过环境变量或脚本动态修改请求参数。

如果需要严格控制请求同时发送,可在代码中加入同步机制(比如Go的sync.WaitGroup等待所有goroutine准备就绪后再触发请求),能进一步提升并发测试的精准度。

内容的提问来源于stack exchange,提问作者Sahaaj Singh Chawla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:08:11