三種好用的 gRPC 測試工具

grpc flow proposal

最近在用 Go 語言實作微服務,溝通的接口採用 gRPC,除了可以透過 gRPC 支援的第三方語言來寫客戶端的測試之外,有沒有一些好用的工具來驗證檢查 gRPC 實現的接口。剛好今年看到 Postman 宣布開始支援 gRPC,相信大家對於 Postman 工具並不會太陌生,畢竟測試 Websocket 或 RESTful API 都是靠這工具呢。本篇除了介紹 Postman 之外,還有一套 CLI 工具 grpcurl 及一套 GUI 工具 grpcui 也是不錯用,後面這兩套都是由同一家公司 FullStory 開源出來的專案,底下就來一一介紹。

教學影片

其他線上課程請參考如下

gRPC 服務範本

用 Go 語言寫好一個測試範例版本,gRPC 定義的 proto 檔案可以從這邊查看

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
syntax = "proto3";

package gitea.v1;

message GiteaRequest {
  string name = 1;
}

message GiteaResponse {
  string giteaing = 1;
}

message IntroduceRequest {
  string name = 1;
}

message IntroduceResponse {
  string sentence = 1;
}

service GiteaService {
  rpc Gitea(GiteaRequest) returns (GiteaResponse) {}
  rpc Introduce(IntroduceRequest) returns (stream IntroduceResponse) {}
}

grpcurl

相信大家都有用過強大的 curl 工具,而 grpcurl 可以想像成 curl 的 gRPC 版本,安裝方式非常簡單,可以到 Relase 頁面找你要的 OS 版本,如果本身是 Go 開發者可以透過 go install 安裝

1
go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest

MacOS 環境可以透過 Homebrew 安裝

1
brew install grpcurl

或者透過 Docker 來執行也可以的

1
2
3
4
# Download image
docker pull fullstorydev/grpcurl:latest
# Run the tool
docker run fullstorydev/grpcurl api.grpc.me:443 list

先把測試環境搭建起來,就可以在本地端測試 8080 連接埠

1
2
3
4
$ grpcurl -plaintext localhost:8080 list
gitea.v1.GiteaService
grpc.health.v1.Health
ping.v1.PingService

由於本地端沒有 SSL 憑證,所以請加上 -plaintext 參數才可以使用,詳細參數可透過 -h 查看,接下來打第一個測試接口

1
2
3
4
5
grpcurl \
  -plaintext \
  -d '{"name": "foobar"}' \
  localhost:8080 \
  gitea.v1.GiteaService/Gitea

會拿到底下結果

1
2
3
{
  "giteaing": "Hello, foobar!"
}

如果服務有加上 Health Check 可以直接使用底下指令

1
2
3
4
5
grpcurl \
  -plaintext \
  -d '{"service": "gitea.v1.GiteaService"}' \
  localhost:8080 \
  grpc.health.v1.Health/Check

可以拿到底下結果

1
2
3
{
  "status": "SERVING"
}

服務如果有支援 Server Streaming RPC 也是同樣用法

1
2
3
4
5
grpcurl \
  -plaintext \
  -d '{"name": "foobar"}' \
  localhost:8080 \
  gitea.v1.GiteaService/Introduce

可以看到 Server 會回應兩個訊息

1
2
3
4
5
6
{
  "sentence": "foobar, How are you feeling today 01 ?"
}
{
  "sentence": "foobar, How are you feeling today 02 ?"
}

grpcui

除了上面 grpcurl 外,同一個團隊也推出 Web UI 的 gRPC 測試工具 grpcui,安裝方式跟 grpcurl 一樣,這邊就不多做說明了,grpcui 也支援全部 RPC 功能,包含 streaming 等。底下一行指令就可以啟動 GUI 畫面了

1
grpcui -plaintext localhost:8080

page

此頁面已經幫忙把 Service 及可以用的 Method 都準備完畢了,你也不用知道任何服務提供哪些 Method,相當方便,選擇不同的 Service 及 Method,畫面上的 Request Data 都會隨著變動

page

填寫完 Request Form 在切換到 Raw Request (JSON) 就可以看到 JSON Format 的資料

page

按下 invoke 後,可以看到結果

page

測試 Streaming 結果

page

Postman

相信大家最熟悉的還是 Postman,測試任何服務都離不開此工具,也很高興今年一月看到支援了 gRPC Beta 版本,打開軟體後,按下左上角 New 就可以看到底下畫面,選擇 gRPC Request

page

左邊 API 可以把所有服務的 proto 資料寫進去

page

接著就可以透過 New Request 來選擇了,並且執行 invoke

page

Stream Testing 如下

page

心得

grpcurl CLI 工具可以在基本沒有桌面的 Linux 環境中使用,所以這邊算蠻推薦的,但是 Postman 在使用前都需要手動將 Proto 的資料寫進去,才可以測試使用,所以我更強烈推薦使用 grpcui 可以直接動態讀取 proto 資訊,將資訊轉成 Request Form,減少查詢資料屬性的時間。


See also