我正在尝试使用webtest编写一些测试来测试我的python GAE应用程序。我遇到的问题是应用程序正在侦听端口8080但我无法配置webtest来命中该端口。
例如,我想使用app.get('/ getreport')来点击http://localhost:8080/getreport。显然,它只是命中了http:// localhost / getreport。
有没有办法设置webtest来击中特定端口?
答案 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服务器调用应用程序的方式。