使用网络测试进行金字塔身份验证测试



我配置了我的金字塔应用程序,以便在按照官方教程进行身份验证后将user对象附加到request。目前为止,一切都好。。。但是虽然它运行良好并且我可以使用浏览器对其进行测试,但我不明白为什么在 webtest 测试中user没有附加到请求中。我以这种方式配置了我的测试类:

from my_pyramid_app import main as make_app
from webtest.app import TestApp
from pyramid import testing
class LoginTestCase(TestCase):   
    def setUp(self):
        self.config = testing.setUp()
        self.app = TestApp(make_app({}))

在测试中:

# submit valid login data to /login and expect redirect to "next"
response = self.app.post('/login', data, status=302)
redirect = response.follow()

它按预期工作,用户经过身份验证并重定向到"next"中指定的路径,但redirect.request不包含user。为什么?我该怎么办?

webtest的文档说:

模拟身份验证的最佳方法是应用程序看起来 在 environ['REMOTE_USER'] 中查看某人是否经过身份验证。然后你 可以简单地设置该值,例如:

app.get('/secret', extra_environ=dict(REMOTE_USER='Bob'))

但老实说,这对我来说听起来很痴呆:/(我的意思是如果我手动定义一个变量,测试的意义是什么?!

webtest 和 pyramid 都使用 webob,但这并不意味着 pyramid 的请求与 webtest 的 response 是同一个对象。

WebTest 和测试应用程序之间共享的唯一不可变对象是 Environ 字典。

这意味着,如果您使用"myapp.user"之类的键将用户存储在request.environ中,则可以检索用户(点和小写很重要,请参阅PEP333)。

最新更新