この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
Apache JMeterでPATCHメソッドを使用する方法
■ 概要
Apache JMeterでPATCHメソッドを使用したときに、色々うまくいかなかったので、試したことを記録しておきます。
JMeterの基本的な使い方については割愛します。
【Version】
Apache JMeter Version 2.13
■ はじめに
JMeterでは、HTTPプロキシサーバを使用すると、ブラウザの操作を記録することができます。
その際、PATCHメソッドを使用している画面の操作で、エラーが発生しました。
記録されたJMeterのHTTPリクエストサンプラーを見てみると、メソッドがPATCHになっており、Parametersにリクエストで送るパラメータが表示されています。
■ 解析
一見問題なさそうですが、このHTTPリクエストを実行して、リスナー -> 結果をツリーで表示の「リクエスト」タブを見てみると、
PATCH data:
Content-Length: 0
となっており、リクエストボディが送信されていないようです。
ちなみに、メソッドをPOSTに変更して実行すると、リクエストで送るパラメータに設定した値が送信されていることが確認できます。
■ 解決方法
Parametersタブの隣にあるBody Dataタブを押すと、Warningメッセージが出ます。ここで、リクエストで送るパラメータをすべて削除するとBody Dataタブに切り替えることができます。
ここに、リクエストボディの値をそのまま貼り付けます。
(筆者はChromeの検証ツールからForm Dataをコピーしました。エンコードされた値を貼り付ける必要があるので、view sourceからコピー。)
■ 実行
再度実行してみます。
リスナー -> 結果をツリーで表示の「リクエスト」タブを見てみると、
PATCH data:
XXXXXXX%5AAAAAAAAAAAAAA%5D=true
Content-Length: 31
リクエストボディが正常に送信できました。
結果も正常終了になっています。
■ 余談
本題とは直接関係ありませんが、このとき動かしていたWebアプリはRailsアプリで、Ajaxでフォームの内容を送信していたので、「X-CSRF-Token」をリクエストヘッダーに設定する必要もありました。
以上です。
PUTメソッドも同様の動きをするようなので、同じ方法で解決できます。