python webtest 端口配置?

4 投票
3 回答
1379 浏览
提问于 2025-04-15 22:23

我正在尝试使用webtest来测试我的Python GAE应用程序。遇到的问题是,应用程序在8080端口上监听,但我无法配置webtest去访问这个端口。

举个例子,我想用app.get('/getreport')来访问http://localhost:8080/getreport。很明显,它只会访问http://localhost/getreport。

有没有办法让webtest访问特定的端口呢?

3 个回答

2

我觉得你对WebTest的功能有些误解。像app.get('/getreport')这样的代码其实并不会向localhost的任何端口发送请求。WebTest的一个优点就是它不需要你的应用程序在任何服务器上实际运行。

下面是WebTest文档中“这有什么用”部分的一段话:

通过这个工具,你可以在不启动HTTP服务器的情况下测试你的网页应用,也不需要深入到你应用中需要测试的那些网络框架的快捷部分。WebTest运行的测试完全等同于一个WSGI HTTP服务器调用应用的方式。

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....."
2

配置中,我引用如下:

port

是否必需?不,默认值是“80”

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

编辑:用户澄清他们指的是这个 webtest(pythonpaste的),而不是广泛使用的Canoo应用程序。我本来不会猜到,因为pythonpaste的webtest和Canoo的完全不同,我引用如下…:

使用这个,你可以在不启动HTTP服务器的情况下测试你的网页应用,而且不需要深入到你应用中需要测试的那些框架的快捷部分。WebTest运行的测试完全等同于WSGI HTTP服务器调用应用的方式。

因为没有启动HTTP服务器,所以“端口”这个概念就不存在了——一切都是在进程内部运行的,处于WSGI层面,没有实际的TCP/IP和HTTP参与。因此,“应用”并没有在端口8080(或其他任何端口)上监听,而是它的WSGI入口点被直接调用,就像是HTTP服务器在调用它们一样。

如果你想测试一个实际运行的HTTP服务器,那么你需要使用Canoo的webtest(或其他类似的框架),而不是pythonpaste的——后者通过避免任何套接字层和HTTP层的开销,可以更快地进行测试,但你无法以这种方式测试一个独立的、已经在运行的服务器(比如GAE的SDK)。

撰写回答