JMeterでform_forとかのパラメータを送る
JMeterのプロキシでリクエストを記録していると、なんだかうまく動いてくれないところがある。
よく見てみると、こーゆーところ。
<% form_for 'topic', :url => { :controller => 'topic', :action => 'preview', :mode => 'post' }, :html => {:id => 'topic_post', :multipart => 'true'} do |f| -%> <div class="topic_post"> <div class="topic_post_form"> <div class="input_label"> <label for="title">*タイトル(100文字まで)</label> </div> <div class="input"> <%= f.text_field :title, :size => 50, :class => 'validate-space validate-title' %> </div>
form_forでモデルにひもづいたリクエストを送る。
controller側では、パラメータがHashのHashになって送られてくるかんじ。
def preview session_clear_all mode = params[:mode] title = params[:topic][:title] type_id = params[:topic][:type_id]
ログで見るとこんなかんじ。
Parameters: {"mode"=>"post", "topic"=>{"body"=>"test body2", "title"=>"test title2", "type_id"=>"5"}, "tag"=>{"tag_1"=>"ruby", "tag_2"=>"逕溽肇諤ァ", "tag_3"=>"", "tag_4"=>"", "tag_5"=>""}, "action"=>"preview", "controller"=>"topic"}
つまり、HTTPリクエストのPOSTパラメータに、HashのHashみたいのを設定してあげないといかんと!
で、JMeterのプロキシではそれができないために、必要なパラメータが送信できずにサーバ側で落ちてしまっていたようだ。
ふつうのPOSTパラメータはこんな感じ。パラメータ名とか値は文字列で指定する。
name value ----------------- name yamada age 25 → Parameters: {"name"=>"yamada", "age"=>"25"}
で、上記のHashみたいなやつはどうすればよいかというと、パラメータ名のところに[]中括弧で子要素を書いてあげればOK。
なんかググっても書いてあるところが無かったような。。 当然なことだからなんだろうか^^;
#言われてみると、inputタグのname要素とかの指定方法と同じなんですよね
name value ----------------------- people[name] yamada people[age] 25 → Parameters: {people=>{"name"=>"yamada", "age"=>"25"}}