Pylons应用程序中的单元测试授权失败;Cookie未正确设置或记录

2024-05-06 19:17:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我在运行Pylons应用程序的授权单元测试时遇到问题。似乎测试用例中设置的某些cookie可能无法正确写入或解析。用浏览器点击应用程序时,Cookie可以正常工作。在

下面是我在粘贴生成的TestController中的测试用例:

def test_good_login(self):
    r = self.app.post('/dologin', params={'login': self.user['username'], 'password': self.password})
    r = r.follow() # Should only be one redirect to root
    assert 'http://localhost/' == r.request.url
    assert 'Dashboard' in r

这是为了测试现有帐户的登录是否会将用户转发到仪表板页面。相反,所发生的是用户被重定向回登录。第一个POST起作用,在会话中设置用户并返回cookies。尽管这些cookies是在下面的请求中发送的,但它们似乎没有被正确地解析。在

我首先在上述方法的开头设置断点,然后查看登录响应返回的内容:

^{pr2}$

似乎创建了一个会话并发送了一个cookie。浏览器将重定向到根目录,而不是登录,这也表示登录成功。如果我跳过follow(),我得到:

> /Users/istevens/dev/foo/foo/tests/functional/test_account.py(35)test_good_login()
-> assert 'http://localhost/' == r.request.url
(Pdb) p r.request.headers
{'Host': 'localhost:80', 'Cookie': 'auth_tkt=""\\"4c898eb72f7ad38551eb11e1936303374bd871934bd871833d19ad8a79000000!\\"""; '}
(Pdb) p r.request.environ['REMOTE_USER']
*** KeyError: KeyError('REMOTE_USER',)
(Pdb) p r.request.environ['HTTP_COOKIE']
'auth_tkt=""\\"4c898eb72f7ad38551eb11e1936303374bd871934bd871833d19ad8a79000000!\\"""; '
(Pdb) p r.request.cookies
{'auth_tkt': ''}
(Pdb) p r
<302 Found text/html location: http://localhost/login?__logins=1&came_from=http%3A%2F%2Flocalhost%2F body='302 Found...y.  '/149>

这意味着cookie是在请求中传入的,尽管转义是可疑的。环境似乎没有根据先前的请求创建的会话。cookie已从标头复制到environ,但请求中的cookie似乎设置不正确。最后,用户被重定向到登录页面,表明用户没有登录。在

应用程序中的授权通过休息。谁以及休泽.谁.插件.ldap与休息。谁友好执行挑战。我使用的是paste创建的股票tests.TestController

class TestController(TestCase):

    def __init__(self, *args, **kwargs):
        if pylons.test.pylonsapp:
            wsgiapp = pylons.test.pylonsapp
        else:
            wsgiapp = loadapp('config:%s' % config['__file__'])
        self.app = TestApp(wsgiapp)
        url._push_object(URLGenerator(config['routes.map'], environ))
        TestCase.__init__(self, *args, **kwargs)

顺便说一下,这是一个webtest.TestApp。在

cookie的编码在中完成webtest.TestApp使用Cookie:

>>> from Cookie import _quote
>>> _quote('"84533cf9f661f97239208fb844a09a6d4bd8552d4bd8550c3d19ad8339000000!"')
'"\\"84533cf9f661f97239208fb844a09a6d4bd8552d4bd8550c3d19ad8339000000!\\""'

我相信这是对的。在

我的猜测是,响应端的某些东西错误地将cookie数据解析为服务器端请求中的cookies。但是什么?有什么想法吗?在


Tags: 用户testself应用程序localhosthttpcookierequest
2条回答

在将WebTest从1.2.1降级到1.2后,此问题消失了。在

不管WebTest的版本是什么,这个问题总是不断出现。然而,在进行了大量的修改之后,我发现当cookie第一次被设置时,它使用127.0.0.1作为REMOTE_ADDR值,但是在第二次请求时,它变为0.0.0.0。在

如果我执行get请求并将远程地址设置为127.0.0.1,一切都很好!在

response = response.goto(url('home'), extra_environ=dict(REMOTE_ADDR='127.0.0.1'))

相关问题 更多 >