負荷テストツール vegeta で multipart/form-data で画像を送る
想定読者
- 画像を送りつける負荷テストをしたい人
- vegeta でもっと遊びたい人
-
multipart/form-data
についてちょっと復習したい人
一言でいうと
- 下のような
targets.txt
,body.txt
を準備-
{その他必要なリクエストヘッダ}
や{画像のバイナリ}
は適宜いれてください
-
- 以下のコマンドを打つ!
// 3分間、1秒間に2リクエストの頻度でattack!する場合の例
vegeta attack -rate 2 -duration 3m -targets targets.txt |tee result
POST http://sample.example.com/images
{その他必要なリクエストヘッダ}
Content-Type: multipart/form-data; boundary=----BoundaryPKp7MX1veAsGyi0A
@body.txt
------BoundaryPKp7MX1veAsGyi0A
Content-Disposition: form-data; name="attachment"; filename="dummy"
Content-Type: image/jpeg
{画像のバイナリ}
------BoundaryPKp7MX1veAsGyi0A
Content-Disposition: form-data; name="other-key1"
other-value1
------BoundaryPKp7MX1veAsGyi0A
Content-Disposition: form-data; name="ohter-key2"
other-value2
------BoundaryPKp7MX1veAsGyi0A--
もう一言
-
body.txt
内のname=
に続く部分(attachment
など)も適宜変えてください - 画像だけなら
body.txt
の最初のブロックだけで良いです
まずは curl でやってみる
ググれば結構情報が多いです。以下のような感じでOKです。
{path/to/img.jpg}
は画像へのパスです。簡単!
curl -X POST http://sample.example.com/images \
-F other-key1=other-value1 \
-F other-key2=other-value2 \
-F "file=@{path/to/img.jpg};type=image/jpg"
vegeta ではこうする
上の curl
のサンプルを見るとこんな感じで良いかなと思ってしまいますが、全然ダメでした
POST http://sample.example.com/images
{その他必要なリクエストヘッダ}
Content-Type: multipart/form-data
Content-Disposition: form-data; name="attachment"; filename="path/to/img.jpg"
other-key1=other-value1
other-key2=other-value2
正しくは以下のように boundary
を使って書く必要があります。ファイルの分割は必須ではありませんが、そうした方がわかりやすいかと思います。
画像でない他の multipart/form-data
と同じような感じになりますが、画像の場合はボディに 画像のバイナリ を直接入れる必要があるのが特徴です。
POST http://sample.example.com/images
{その他必要なリクエストヘッダ}
Content-Type: multipart/form-data; boundary=----BoundaryPKp7MX1veAsGyi0A
@body.txt
------BoundaryPKp7MX1veAsGyi0A
Content-Disposition: form-data; name="attachment"; filename="dummy"
Content-Type: image/jpeg
{画像のバイナリ}
------BoundaryPKp7MX1veAsGyi0A
Content-Disposition: form-data; name="other-key1"
other-value1
------BoundaryPKp7MX1veAsGyi0A
Content-Disposition: form-data; name="ohter-key2"
other-value2
------BoundaryPKp7MX1veAsGyi0A--
注意点
- HTTP のリクエストでは 改行などが比較的細かく仕様で決まっている のでご注意ください
-
画像のバイナリ を 直接 入れ込む必要があります
- ファイル指定はできません(やり方わかりません)でした
-
cat body_before.txt img.jpg body_after.txt > body.txt
のようにしてバイナリを入れるとうまく行きました。
- 最後の
--
忘れずに
あとがき
vegeta
で multipart/form-data
に関する記事はちらほらありましたが、画像に特化して丁寧に書いたものがなかったので書いてみました。
参考文献
以下の記事など参考にして試行錯誤しました。
- HTTPリクエストの仕様
-
vegeta
でmultipart/form-data
Author And Source
この問題について(負荷テストツール vegeta で multipart/form-data で画像を送る), 我々は、より多くの情報をここで見つけました https://qiita.com/nrnrk/items/4e0dab2c8573e3fe7576著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .