我正在尝试使用 webtest 编写一些测试来测试我的 python GAE 应用程序。我遇到的问题是应用程序正在侦听端口 8080,但我无法配置 webtest 以访问该端口。
例如,我想使用 app.get('/getreport') 来访问http://localhost:8080/getreport。显然,它只是点击 http://localhost/getreport。
有没有办法设置 webtest 以访问特定端口?
我正在尝试使用 webtest 编写一些测试来测试我的 python GAE 应用程序。我遇到的问题是应用程序正在侦听端口 8080,但我无法配置 webtest 以访问该端口。
例如,我想使用 app.get('/getreport') 来访问http://localhost:8080/getreport。显然,它只是点击 http://localhost/getreport。
有没有办法设置 webtest 以访问特定端口?
使用 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....."
在config中,我引用,
port
必需的?不,默认值为“80”
定义用于执行请求的端口号,例如“8080”。
编辑:用户澄清说他们的意思是这个webtest(pythonpaste),而不是广泛使用的 Canoo 应用程序。我不会猜到,因为 pythonpaste 的 webtest 是一个非常不同的鱼壶,我引用...:
有了这个,您可以在不启动 HTTP 服务器的情况下测试您的 Web 应用程序,并且无需插入 Web 框架来为您的应用程序的需要测试的部分添加快捷方式。WebTest 运行的测试完全等同于 WSGI HTTP 服务器调用应用程序的方式
没有启动 HTTP 服务器,没有“端口”的概念——事情在 WSGI 级别在进程内运行,没有实际的 TCP/IP 和 HTTP 在起作用。因此,“应用程序”没有监听端口 8080(或任何其他端口),而是直接调用其 WSGI 入口点,“就像”HTTP 服务器正在调用它们一样。
如果你想测试一个实际运行的 HTTP 服务器,那么你需要Canoo的 webtest(或其他等效框架),而不是pythonpaste 的——后者将通过避免任何套接字层和 HTTP 层开销来加快测试速度,但是你无法以这种方式测试单独的、现有的、正在运行的服务器(例如 GAE 的 SDK)。
我认为您误解了 WebTest 的功能。类似的东西app.get('/getreport')
不应该localhost
在任何端口上提出任何类型的请求。WebTest 的美妙之处在于它不需要您的应用程序实际运行在任何服务器上。
这是 WebTest 文档的“这是做什么”部分的引述:
有了这个,您可以在不启动 HTTP 服务器的情况下测试您的 Web 应用程序,并且无需插入 Web 框架来为您的应用程序的需要测试的部分添加快捷方式。WebTest 运行的测试完全等同于 WSGI HTTP 服务器调用应用程序的方式。