2010-09-10 7 views
10

J'essaie d'utiliser le banc apache pour tester le test d'une action de création dans mon application rails, mais ab ne semble pas envoyer les données POST - bien qu'il soumette correctement un POST et non une requête GET .Données Apache et POST

est la commande je lance:

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

et c'est le contenu du fichier message:

authenticity_token=M18KXwSOuIVbDPZOVQy5h8aSGoU159V9S5uV2lpsAI0 

les rails journaux montrent une requête POST à ​​venir à travers mais ne montrent aucune paramètres en cours de publication:

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) 

alors qu'une requête POST provenant d'un navigateur entraîne cette entrée de journal :

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) 

et enfin, c'est ce que les journaux ab pour la demande:

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


--- 

pourquoi est-il pas ramasser les données de poste?

si le fichier « post » est pas là, je reçois un message d'erreur indiquant qu'il ne peut pas trouver le fichier donc je sais à tout le moins, il est de trouver le fichier ...

+0

J'ai un problème presque exact, sauf cette fois avec un fichier 150k qui ab apparaît que cracher 80k de celui-ci à mon script qui se trouve là bloquant attendre plus d'E/S en raison de la longueur du contenu. Avez-vous de la chance de votre côté? – Xailor

Répondre

10

Peut-être que vous avez besoin du - l'option T comme indiqué dans l'homme ab: -

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

J'ai testé avec Django et il semble que Django ne se soucient pas vraiment de l'en-tête de type de contenu (il affiche le contenu POSTé si je -T ou non), mais Rails le veut peut-être.

+1

J'ai un problème similaire avec 'ab' même avec l'option' -T', je ne pense pas que ce soit ça. – Xailor

+0

Même problème, et cela a fonctionné pour moi après avoir corrigé une faute de frappe dans le type de contenu. Correction de la réponse – Thilo

+0

Je fournissais l'en-tête de type de contenu à -T, qui était mon problème «Content-Type: application/json» au lieu de simplement «application/json» –

2

Old question, mais pour le bien de quelqu'un d'autre qui cherche SO pour cela, voici comment je l'ai eu à travailler. Assurez-vous EXTRA que votre fichier de courrier est correctement encodé en URL sans caractères supplémentaires non-impression ou quoi que ce soit à la fin. Le moyen le plus sans erreur est de le créer avec du code. J'ai utilisé python pour créer le mien:

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

sortie Exemple:

auth_token=somelongstringthatendswithanequalssign%3D 
+2

Vous manquez la partie de test de charge;) – Glaslos

+0

Vous avez raison. Vous devez toujours exécuter ab, en utilisant votre nouveau fichier post.data correctement codé, bien sûr. Le simple fait de générer le fichier post.data fait peu pour tester votre serveur web (ou quoi que ce soit ...) – Troy