从表单提交中获取 cookie 并将它们与网络测试一起使用
Getting cookies from a form submit and using them with a webtest
所以我想用 webtest 库做一些测试用例,问题是我的网站有访问控制,需要用户登录。看起来 post 的形式是成功的,但是结果没有任何cookie(至少我可以找到),并且登录后cookiejar是空的。
测试设置:
class TestMyViewSuccessCondition(unittest.TestCase):
def setUp(self):
self.config = testing.setUp()
from myapp import main
settings = {'sqlalchemy.url': postgresqlURL}
app = main({}, **settings)
from webtest import TestApp
self.testapp = TestApp(app, cookiejar=CookieJar())
测试:
page = self.testapp.get('/login', status=200)
self.assertIn('Please login', page)
form = page.forms['loginForm']
form['username'] = 'user'
form['password'] = 'userpw'
result = form.submit(status=200)
# self.testapp.cookies is empty dictionary at this point
# it fails here, login page is shown again
page = self.testapp.get('/home', status=200)
result returns 200 OK,表单提交后登录页面的 HTML 内容,但没有发生重定向,这是一个问题吗?还是按预期工作?在其他表单提交的任何访问控制之前工作得很好。每次用户单击 link 或重新加载页面时,cookie 都会更改。我正在使用会话 cookie。我试图为 cookies 设置一个不安全的标志。
和我的登录视图的最后一个 return:
if 'form.submitted' in request.POST:
# do stuff
return HTTPFound(location=request.route_url('home'))
我会使用普通的 unittest,但由于 unittest 模块在视图尝试进行重定向时会松动,因此有人建议使用 webtest 库。
问题是 form.submit()
实际上并没有模仿我的基本用例,即用户单击提交按钮。在正常情况下,浏览器会在 request.POST
旁边添加用户名、密码和 ('form.submitted', '')
。但是 form.submit()
只添加用户名和密码,而且只添加那些在表单中定义的,所以我无法定义自己的值来满足请求。 (至少我没有找到方法)
问题已在登录视图中解决。通过更改 if 'form.submitted' in request.POST:
-> if 'username' in request.POST and 'password' in request.POST:
Cookies 工作正常,如上所示,登录失败支持我的测试。
所以我想用 webtest 库做一些测试用例,问题是我的网站有访问控制,需要用户登录。看起来 post 的形式是成功的,但是结果没有任何cookie(至少我可以找到),并且登录后cookiejar是空的。
测试设置:
class TestMyViewSuccessCondition(unittest.TestCase):
def setUp(self):
self.config = testing.setUp()
from myapp import main
settings = {'sqlalchemy.url': postgresqlURL}
app = main({}, **settings)
from webtest import TestApp
self.testapp = TestApp(app, cookiejar=CookieJar())
测试:
page = self.testapp.get('/login', status=200)
self.assertIn('Please login', page)
form = page.forms['loginForm']
form['username'] = 'user'
form['password'] = 'userpw'
result = form.submit(status=200)
# self.testapp.cookies is empty dictionary at this point
# it fails here, login page is shown again
page = self.testapp.get('/home', status=200)
result returns 200 OK,表单提交后登录页面的 HTML 内容,但没有发生重定向,这是一个问题吗?还是按预期工作?在其他表单提交的任何访问控制之前工作得很好。每次用户单击 link 或重新加载页面时,cookie 都会更改。我正在使用会话 cookie。我试图为 cookies 设置一个不安全的标志。
和我的登录视图的最后一个 return:
if 'form.submitted' in request.POST:
# do stuff
return HTTPFound(location=request.route_url('home'))
我会使用普通的 unittest,但由于 unittest 模块在视图尝试进行重定向时会松动,因此有人建议使用 webtest 库。
问题是 form.submit()
实际上并没有模仿我的基本用例,即用户单击提交按钮。在正常情况下,浏览器会在 request.POST
旁边添加用户名、密码和 ('form.submitted', '')
。但是 form.submit()
只添加用户名和密码,而且只添加那些在表单中定义的,所以我无法定义自己的值来满足请求。 (至少我没有找到方法)
问题已在登录视图中解决。通过更改 if 'form.submitted' in request.POST:
-> if 'username' in request.POST and 'password' in request.POST:
Cookies 工作正常,如上所示,登录失败支持我的测试。