Jmeterでgzip送信テスト
最近、仕事でしばらく更新できていなかったのですが、少しだけ余裕ができたので、更新。
今回は、JmeterでPOST送信するデータをgzip圧縮する時の手順です。PJで、クライアント側からの通信量を減らすため、gzip化されたデータを処理するサーバーサイドのAPの構築を行ったのですが、サーバー側の解凍処理をテストするために、Jmeterで設定をしました。
「サーバー側からの返却をgzip圧縮する。」、「クライアント側からmultipart/form-dataで送る」ケースは良く見かけたのですが、POSTデータのボディ部を単純にgzip圧縮するケースは少なかったので、メモとして残しておこうと思います。
(事前準備). Jmeterのインストール
Jmeterを利用するに当たり、各種インストールを実施する必要がありますが、すでに色々なサイトで説明されているので、Javaのインストールと合わせて下記のサイトを参考にしていただければと思います。
1. gzip圧縮の設定
作成したテスト計画がコチラ。単純なHTTPヘッダー、HTTPリクエスト、結果表示のテスト計画になりますが、gzip圧縮の設定として、「追加 > 前処理 > Beanshell PreProcessor 」を追加して、テスト計画の「gzip圧縮」を追加しています。
ここで、「Beanshell PreProcessor」のScriptsに対して、Javaにてgzip圧縮処理を下記のように記載することで、送信直前に圧縮処理が実行されて、サーバーにリクエストを投げるようになります。
gzip圧縮の設定
import org.apache.commons.io.IOUtils;
import java.util.zip.GZIPOutputStream;
String bodyString = sampler.getArguments().getArgument(0).getValue();
byte [] requestBody = bodyString.getBytes();
ByteArrayOutputStream out = new ByteArrayOutputStream(requestBody.length);
GZIPOutputStream gzip = new GZIPOutputStream(out);
gzip.write(requestBody);
gzip.close();
sampler.getArguments().getArgument(0).setValue(out.toString(0));
実際に送信した結果がコチラ。ちょっとわかりずらいですが、結果から文字列が圧縮されて文字化けしていることがわかるかと思います。さらにその下の画像で、サーバー側で解凍処理を行って、HTTPリクエストに設定した「test1=a&test2=b」の値が解凍されて、返却されていることが確認できました。
(Jmeter送信内容)
(レスポンス結果)
2. 感想
今回、Jmeterを利用して、HTTPリクエストをgzip圧縮することができました。Jmeterは事前に準備されている機能が豊富でそれだけでも色々できるのですが、それでもできないときは、最終的にBeanShell Pre/PostProcessorを利用すれば、Javaでほぼ何でもできそうですね。
今回作成したテスト計画ファイルのリンクを致しますので、Jmeterで処理をするときの参考になれば幸いです。