2010-05-05 14 views
4

J'essaie d'écrire des tests en utilisant webtest pour tester mon application GAE python. Le problème que je rencontre est que l'application écoute sur le port 8080 mais je ne peux pas configurer webtest pour frapper ce port.Configuration du port python webtest?

Par exemple, je souhaite utiliser app.get ('/ getreport') pour taper http://localhost:8080/getreport. Évidemment, il frappe juste les adresses http: // localhost/getreport.

Existe-t-il un moyen de configurer webtest pour frapper un port particulier?

Répondre

2

En config, et je cite,

port 

requis? Non, les valeurs par défaut sont "80"

Définit le numéro de port à utiliser pour les demandes d'exécution , par ex. "8080".

Modifier: l'utilisateur a précisé que leur signification this webtest (de pythonpaste), pas l'application Canoo largement utilisé. Je ne l'aurais pas deviné, parce que webtest de pythonpaste est une bouilloire très différente de poissons, et je cite ...:

Avec cela, vous pouvez tester vos applications web sans démarrer un serveur HTTP , et sans piquer dans le web framework raccourcis morceaux de votre application qui doit être testé. Les essais WebTest pistes sont entièrement équivalent à la façon dont un serveur WSGI HTTP appellerait une application

Aucun serveur HTTP en cours de démarrage, il n'y a pas de notion de « port » - les choses courir en cours, au niveau WSGI , sans TCP/IP et HTTP en cours. Ainsi, "l'application" est et non écoute sur le port 8080 (ou tout autre port), mais plutôt ses points d'entrée WSGI sont appelés directement, "comme si" un serveur HTTP les appelait.

Si vous voulez tester un serveur HTTP fonctionnement réel, alors vous avez besoin Canoo webtest de (ou d'autres cadres équivalents), ne est pas pythonpaste - ce dernier fera pour tester plus rapidement en évitant toute prise couche et le surcoût de la couche HTTP, mais vous ne pouvez pas tester un serveur existant, existant et existant (tel que les SDK de GAE) de cette manière.

+1

Désolé, aurait dû être plus clair. Ceci est la version python de webtest, nommé de manière confuse comme le webtest de Canoo. http://pythonpaste.org/webtest/ – MattM

+1

En fait, il est quelque peu possible en remettant à TestApp un TransparentProxy qui est une application wsgi qui ne fait que transférer les requêtes http où que ce soit à l'adresse et renvoie les réponses. –

2

Je pense que vous ne comprenez pas ce que WebTest fait. Quelque chose comme app.get('/getreport') ne devrait faire aucune sorte de demande à localhost sur n'importe quel port. La beauté de WebTest est qu'il ne nécessite pas que votre application fonctionne sur un serveur.

Voici une citation du "What This Does" section des WebTest docs:

Avec cela, vous pouvez tester vos applications Web sans démarrer un serveur HTTP, et sans piquer dans les pièces court-circuitant framework web de votre application qui doivent être testé. Les tests WebTest sont entièrement équivalents à la façon dont un serveur HTTP WSGI appelle une application.

4

Avec paste.proxy.TransparentProxy vous pouvez tester tout ce qui répond à une demande http ...

from webtest import TestApp 
from paste.proxy import TransparentProxy 
testapp = TestApp(TransparentProxy()) 
res = testapp.get("http://google.com") 
assert res.status=="200 OK","failure....." 
+0

cette réponse nous aide vraiment à tirer parti de webtest dans notre application web python. – Joseph

+0

heureux d'entendre que cela aide. c'est un joli truc –