👊

openAPIのswaggerを解析して、vegetaで負荷試験するライブラリをGoで作った。

2023/09/24に公開

はじめに

openAPIを使用する機械って年々増えてると思うんですよね、スキーマファーストだとかコードファーストだとか思想の違うはあるにせよ、近年grpc、graphQL、openAPIなどAPIの仕様を自動生成できるライブラリも整ってきました。そこで、わざわざopenAPIでswaggerを作成するなら、それを使っていろんなことしたくないですか?
そこで今回作成したのは、swggerを解析してvegetaで負荷をかけるcliツールです。名前はbulma、もちろんベジータだからブルマです。

bulma

リポジトリはこれです。
https://github.com/seipan/bulma
使用方法はUsage,Installに乗っていますが、まずInstallは

go install github.com/seipan/bulma@latest

go install を使って行います。
使い方は、

bulma --path=testdata/health.yaml --base=http://localhost:8080

こんな感じで、pathに解析するswaggerファイルの置くところ、baseはそのswaggerのweb serviceのベースのURLです。-frequencyは何回負荷をかけるかで、durationはどれだけ負荷をかけるかです。
内部的にはvegetaを使って負荷をかけてます。
コマンドの仕様はこんなかんじです。

Usage:
  bluma [flags]

Flags:
  -b, --basepath string     BaseURL for stress test
  -d, --duration duration   stress test duration (default 1ns)
  -p, --filepath string     FilePath for Parsing OpenAPI
  -f, --frequency int       stress test frequency (default 1)
  -h, --help                help for bluma

実際の出力例は

--------------------------bulma attack start-------------------------------
--------------------------vegeta attack to http://localhost:8080/health--------------------------
vegeta attack to method: GET
path StatusCode: map[200:1]

max percentile: 333.6204ms
mean percentile: 333.6204ms
total percentile: 333.6204ms
99th percentile: 333.6204ms

 earliest: 2023-09-23 05:23:05.1839784 +0900 JST m=+1.029301501
 latest: 2023-09-23 05:23:05.1839784 +0900 JST m=+1.029301501
-----------------------------------------------------------------------
--------------------------bulma attack finish-------------------------------

こんな感じです。health apiのみたたいてます。

最後に

まだまだ発展途上でバグも多いですが、
https://github.com/seipan/bulma
starください。

Discussion