In 2.0.2 it is even simpler:
from gluon.contrib.webclient import WebClient
client = WebClient('http://127.0.0.1:8000/welcome/default/')
client.get('user/register')
data = dict(first_name = 'Homer',
last_name = 'Simpson',
email = '[email protected]',
password = 'test',
password_two = 'test',
_formname = 'register') # (*)
client.post('user/register',data = data)
data = dict(email='[email protected]',
password='test',
_formname = 'login')
client.post('user/login',data = data)
client.get('index')
# check registration and login were successful
assert 'Welcome Homer' in client.text
Checks automatically for persistant sessions and raises exception if sessions
break or if a web ticket is issued.
You can also do
client.get('index')
print client.headers
print client.cookies # parsed as a dict
print client.forms # dict of formname:formvalue
print client.sessions # dict of appname:session_cookie_key
print client.status
print client.text
On Wednesday, 29 August 2012 23:37:07 UTC-5, Dave wrote:
>
> Very cool!
>
> On Wednesday, August 29, 2012 6:49:14 PM UTC-4, Massimo Di Pierro wrote:
>>
>> I think you are going to like this:
>> https://github.com/web2py/web2py/blob/master/gluon/contrib/webclient.py
>>
>> start web2py on port 8000. Then in a normal python shell:
>>
>> from gluon.contrib.webclient import WebClient
>> session = WebClient('http://127.0.0.1:8000/welcome/default/')
>> session.get('user/register')
>> session_id_welcome = session.cookies['session_id_welcome']
>> print session.forms # tells you which forms are in page (*)
>> data = dict(first_name = 'Homer',
>> last_name = 'Simpson',
>> email = '[email protected]',
>> password = 'test',
>> password_two = 'test',
>> _formname = 'register') # (*)
>> session.post('user/register',data = data)
>>
>> session.get('user/login')
>> data = dict(email='[email protected]',
>> password='test',
>> _formname = 'login')
>> session.post('user/login',data = data)
>>
>> session.get('index')
>>
>> # check registration and login were successful
>> assert 'Welcome Homer' in session.text
>>
>> # check we are always in the same session
>> assert session_id_welcome == session.cookies['session_id_welcome']
>>
>>
>> It understand sessions (not just web2py session)
>> It understands basic auth (not used in the example)
>> It understands web2py forms (*) and fills in the _formkeys.
>>
>> Suggestions for improvement?
>>
>> Massimo
>>
>>
--