11

apache ベンチを使用して、Rails アプリケーションで作成アクションのロード テストを実行しようとしていますが、ab が POST データを送信していないように見えますが、GET 要求ではなく POST を正しく送信しています。

これは私が実行するコマンドです:

ab -n 1 -p post -v 4 "http://oz01.zappos.net/registrations"

これは投稿ファイルの内容です:

authenticity_token=M18KXwSOuIVbDPZOVQy5h8aSGoU159V9S5uV2lpsAI0

Rails のログには、POST リクエストが送信されていることが示されていますが、投稿されているパラメーターは表示されていません。

Started POST "/registrations" for 10.66.210.70 at Thu Sep 09 17:48:06 -0700 2010
  Processing by RegistrationsController#create as */*
Rendered registrations/new.html.erb within layouts/application (14.0ms)
Completed 200 OK in 24ms (Views: 14.6ms | ActiveRecord: 0.1ms)

一方、ブラウザーからの POST 要求は、次のログ エントリになります。

Started POST "/registrations" for 192.168.66.20 at Thu Sep 09 17:49:47 -0700 2010
  Processing by RegistrationsController#create as HTML
  Parameters: {"submit"=>"true", "authenticity_token"=>"AfNG0UoTbJXnxke2725efhYAoi3ogddMC7Uqu5mAui0=", "utf8"=>"\342\234\223", "registration"=>{"city"=>"", "address"=>"", "name"=>"", "zip"=>"", "optin"=>"0", "state"=>"", "email"=>""}}
Rendered registrations/new.html.erb within layouts/application (13.7ms)
Completed 200 OK in 24ms (Views: 14.3ms | ActiveRecord: 0.1ms)

そして最後に、これは ab がリクエストに対してログに記録するものです:

---
POST /registrations HTTP/1.0
User-Agent: ApacheBench/2.0.40-dev
Host: oz01.zappos.net
Accept: */*
Content-length: 63
Content-type: text/plain


---

投稿データを取得しないのはなぜですか?

「投稿」ファイルがそこにない場合、ファイルが見つからないというエラーメッセージが表示されるので、少なくともファイルを見つけていることはわかっています...

4

2 に答える 2

11

man ab:- に記載されている -T オプションが必要な場合があります。

ab -n 1 -p post -v 4 -T application/x-www-form-urlencoded "http://oz01.zappos.net/registrations"

私は Django でテストしましたが、Django はコンテンツ タイプ ヘッダーをあまり気にしていないようです (-T を使用したかどうかにかかわらず、POST されたコンテンツを表示しました) が、Rails はおそらくそれを望んでいます。

于 2011-01-24T08:02:34.433 に答える
7

古い質問ですが、SOを検索する他の人のために、これを機能させる方法を次に示します。

投稿ファイルが適切に URL エンコードされており、余分な印刷されない文字や末尾に何もないことを余分に確認してください。最もエラーのない方法は、コードで作成することです。私は私のものを作成するためにいくつかのpythonを使用しました:

>>> import urllib
>>> outfile = open('post.data', 'w')
>>> params = ({ 'auth_token': 'somelongstringthatendswithanequalssign=' })
>>> encoded = urllib.urlencode(params)
>>> outfile.write(encoded)
>>> outfile.close()

出力例:

auth_token=somelongstringthatendswithanequalssign%3D
于 2012-03-08T20:19:51.487 に答える