4

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

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

有没有办法设置 webtest 以访问特定端口?

4

3 回答 3

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....."
于 2010-05-06T01:57:02.943 回答
2

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)。

于 2010-05-05T14:49:08.510 回答
2

我认为您误解了 WebTest 的功能。类似的东西app.get('/getreport')不应该localhost在任何端口上提出任何类型的请求。WebTest 的美妙之处在于它不需要您的应用程序实际运行在任何服务器上。

这是 WebTest 文档的“这是做什么”部分的引述:

有了这个,您可以在不启动 HTTP 服务器的情况下测试您的 Web 应用程序,并且无需插入 Web 框架来为您的应用程序的需要测试的部分添加快捷方式。WebTest 运行的测试完全等同于 WSGI HTTP 服务器调用应用程序的方式。

于 2010-05-05T15:18:42.193 回答