Python 基于webtest的金字塔认证测试

Python 基于webtest的金字塔认证测试,python,authentication,pyramid,webtest,Python,Authentication,Pyramid,Webtest,我配置了我的金字塔应用程序,以便在请求经过验证后,将用户对象附加到请求。到现在为止,一直都还不错。。。但是,虽然它工作得很好,我可以使用浏览器对其进行测试,但我不明白为什么在webtest tests中,user没有附加到请求。 我以这种方式配置了测试类: from my_pyramid_app import main as make_app from webtest.app import TestApp from pyramid import testing class LoginTestC

我配置了我的金字塔应用程序,以便在
请求
经过验证后,将
用户
对象附加到
请求。到现在为止,一直都还不错。。。但是,虽然它工作得很好,我可以使用浏览器对其进行测试,但我不明白为什么在webtest tests中,
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()
它按预期工作,用户通过身份验证并重定向到“下一步”中指定的路径,但
重定向。请求
不包含
用户
。为什么?我该怎么办

附言:主席说:

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

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


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

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

webtest和测试应用程序之间共享的唯一不可变对象是environ dictionary


这意味着,如果您将用户存储在request.environ中,并使用类似“myapp.user”的键(点和小写字母很重要,请参见PEP333),则可以检索到该用户。

我对您的问题没有答案,但金字塔社区食谱不是“官方文档”。这是一个社区贡献的食谱集合。官方文档可以在什么样的机制中找到,它应该在不同的请求上维护用户?在普通的web服务器中,您通常通过会话、cookie等来执行此操作。