Ian*_*ens 6 python pylons webtest nose nosetests
我在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
Run Code Online (Sandbox Code Playgroud)
这应该测试现有帐户的登录将用户转发到仪表板页面.相反,会发生的是用户被重定向回登录.第一个POST工作,在会话中设置用户并返回cookie.虽然这些cookie是在以下请求中发送的,但它们似乎没有被正确解析.
我首先在上面的方法的开头设置一个断点,看看登录响应返回的内容:
> nosetests --pdb --pdb-failure -s foo.tests.functional.test_account:TestMainController.test_good_login
Running setup_config() from foo.websetup
> /Users/istevens/dev/foo/foo/tests/functional/test_account.py(33)test_good_login()
-> r = self.app.post('/dologin', params={'login': self.user['username'], 'password': self.password})
(Pdb) n
> /Users/istevens/dev/foo/foo/tests/functional/test_account.py(34)test_good_login()
-> r = r.follow() # Should only be one redirect to root
(Pdb) p r.cookies_set
{'auth_tkt': '"4c898eb72f7ad38551eb11e1936303374bd871934bd871833d19ad8a79000000!"'}
(Pdb) p r.request.environ['REMOTE_USER']
'4bd871833d19ad8a79000000'
(Pdb) p r.headers['Location']
'http://localhost/?__logins=0'
Run Code Online (Sandbox Code Playgroud)
似乎已创建会话并发回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>
Run Code Online (Sandbox Code Playgroud)
这向我表明cookie是在请求中传递的,尽管有可疑的转义.environ似乎没有在先前请求中创建的会话.cookie已从标头复制到environ,但请求中的cookie似乎设置不正确.最后,用户被重定向到登录页面,表明用户未登录.
应用程序中的授权通过repoze.who和repoze.who.plugins.ldap与repoze.who_friendlyform执行挑战完成.我正在使用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)
Run Code Online (Sandbox Code Playgroud)
webtest.TestApp顺便说一句,这是一个.
cookie的编码在webtest.TestApp中使用Cookie完成:
>>> from Cookie import _quote
>>> _quote('"84533cf9f661f97239208fb844a09a6d4bd8552d4bd8550c3d19ad8339000000!"')
'"\\"84533cf9f661f97239208fb844a09a6d4bd8552d4bd8550c3d19ad8339000000!\\""'
Run Code Online (Sandbox Code Playgroud)
我相信这是正确的.
我的猜测是响应方面的某些内容错误地将cookie数据解析为cookies服务器端请求.但是什么?有任何想法吗?
| 归档时间: |
|
| 查看次数: |
1710 次 |
| 最近记录: |