Vegeta は Go 製の HTTP load testing ツールです。

API サーバのベンチマークで multipart/form-data のリクエストを送信する場合、 wrk だと lua を書かなくては送れなかったのですが、 Vegeta はコードを書かなくても簡単にリクエストを送信できたので、その方法を紹介します。

vegeta には attack, report, dump というサブコマンドがあり、attack で HTTP Request を送信します。
vegeta attack-targets オプションでリクエストヘッダとリクエストボディを書いたテキストを指定することで柔軟に HTTP リクエストの送信が可能になっています。

-targets に指定するファイルの例は以下のとおりです。

POST http://localhost:8080/api/path
Content-Type: multipart/form-data; boundary=vegetaboundary
@body.txt

@body.txt はリクエストボディを書いたファイルへのパスで、以下のように書きます。

--vegetaboundary
Content-Disposition: form-data; name="file"; filename="dummy"
Content-Type: application/octet-stream

12345
--vegetaboundary--

ファイルが用意できたら、vegeta attack を実行します。

$ vegeta attack -rate 10 -duration 60s -targets targets.txt

このようにリクエストボディとリクエストヘッダをテキストで書けば multipart/form-data を送信できます。
上記の例では省略しましたが、Vegeta は attack 時の結果をファイルに書いておいて vegeta report にデータを流すとレポートを出してくれるので、

$ vegeta attack ... > load_test.bin
$ cat load_test.bin | vegeta report

のようにすると良いと思います。

参考