python webtest端口配置?

时间:2010-05-05 14:46:14

标签: python google-app-engine webtest

我正在尝试使用webtest编写一些测试来测试我的python GAE应用程序。我遇到的问题是应用程序正在侦听端口8080但我无法配置webtest来命中该端口。

例如,我想使用app.get('/ getreport')来点击http://localhost:8080/getreport。显然,它只是命中了http:// localhost / getreport。

有没有办法设置webtest来击中特定端口?

3 个答案:

答案 0 :(得分:4)

使用paste.proxy.TransparentProxy,您可以测试任何响应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....."

答案 1 :(得分:2)

config,我引用,

port
  

必需?不,默认值为“80”

     

定义要用于的端口号   执行请求,例如“8080”。

编辑:用户澄清他们的意思是this webtest(pythonpaste),不是广泛使用的Canoo应用程序。我不会猜到,因为pythonpaste的webtest是一个非常不同的鱼,我引用...:

  

有了这个,你可以测试你的网络   没有启动HTTP的应用程序   服务器,而不是戳入   Web框架的快捷方式   你需要的应用程序   测试。 WebTest运行的测试是   完全等同于WSGI HTTP的方式   服务器会调用一个应用程序

没有启动HTTP服务器,没有“端口”的概念 - 在WSGI级别的进程中运行,没有实际的TCP / IP和HTTP。因此,“应用程序”侦听端口8080(或任何其他端口),而是直接调用其WSGI入口点,“就像”HTTP服务器正在调用它们一样。

如果你想测试一个实际运行的HTTP服务器,那么你需要 Canoo 的webtest(或其他等效的框架),而不是 pythonpaste - 后者将使通过避免任何套接字层和HTTP层开销来实现更快的测试,但是您无法以这种方式测试单独的,现有的,正在运行的服务器(例如GAE的SDK)。

答案 2 :(得分:2)

我认为你误解了WebTest的作用。像app.get('/getreport')之类的东西不应该在任何端口上向localhost发出任何类型的请求。 WebTest的优点在于它不需要您的应用实际上在任何服务器上运行。

以下是来自WebTest文档"What This Does" section的引用:

  

通过这种方式,您可以在不启动HTTP服务器的情况下测试Web应用程序,而无需进入需要测试的应用程序的Web框架快捷方式部分。 WebTest运行的测试完全等同于WSGI HTTP服务器调用应用程序的方式。