Lain and Sakura

Icono

”One byte to rule them all’ – dtmf – old school

Functional tests – Windmill impresionante!

Mission

Windmill is a web testing framework intended for complete automation of user interface testing, with strong test debugging capabilities.

The first goal of Windmill is to make test writing easier, portable and sustainable. Test writing and debugging is an interactive process and requires an architecture that allows for large amounts of flexibility and back-and-forth communication.

The second goal of Windmill is to keep the project open and transparent, encouraging as much outside contribution as possible. This goal is shared by every project started at OSAF and we have maintained a reputation of accomplishing transparency in Windmill.

Extraido de : http://www.getwindmill.com/about

Es un framework que nos permite realizar tests funcionales al estilo selenium de una forma muy sencilla. Tiene algunas particularidades a tener en cuenta, y aun no lo he visto con detalle, pero al menos quiero documentarlo aqui para no olvidarlo y para que quede a disposicion de quienes les pueda ser de utilidad.

Nota: Estoy trabajando sobre Ubuntu Intrepid a 64bits (aclaro por temas de paths, etc …).

Mi meta es utilizar WindmillBook para testear los proyectos en los que trabajo con plone y zope, utilizo buildouts asi que en mi buildout.cfg agrego lo siguiente :

[buildout]
parts =
plone
zope2
productdistros
instance
zopepy
windmill
python
pythonbin

En donde las secciones windmill, python y pythonbin son :

[windmill]
recipe=zc.recipe.egg
eggs =
simplejson <=2.0.0dev
windmill

[python]
recipe = zc.recipe.cmmi
url = http://www.python.org/ftp/python/2.5.2/Python-2.5.2.tgz
executable = ${buildout:directory}/parts/python/bin/python2.5
extra_options=
–enable-unicode=ucs4
–with-threads
–with-readline

[pythonbin]
recipe = plone.recipe.command
command = ln -s ${python:executable} ${buildout:bin-directory}/python

Corremos nuevamente nuestro buildout:

x-ip@x-ip-lain:~/workspace/gibeta$ ./bin/buildout -vN

Y estamos listos! Ahora detalle, como trabajo con zope y preciso python2.4, y windmill precisa una version particular de python2.5 (el por ello que utilizamos un recipe en nuestro buildout para tener un python2.5) lo ejecutamos de esta forma :

x-ip@x-ip-lain:~/workspace/gibeta$ ./bin/python
Python 2.5.2 (r252:60911, Nov 20 2008, 16:48:26)
[GCC 4.3.2] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>>
x-ip@x-ip-lain:~/workspace/gibeta$ ./bin/python ./bin/windmill
windmill web test automation system.
windmill [-cdelptmxs] action [option=value] [firefox|ie|safari] [http://www.example.com]

Available Actions:
shell         Enter the windmilll shell environment (modified python shell).
Uses ipython if installed. Exit using ^d
run_service   Run the windmill service in foreground. Kill using ^c.

Available Options:
browserdebug :: Enable browser debugging.
Python tests will all load in to the server at once. Defaults to False
-c, continueonfailure :: Keep the browser running tests after failure. Defaults to False
-d, debug :: Turn on debugging.
-e, exit :: Exit after all tests have run. Defaults to False
extensions= :: The directory containing any windmill javascript extensions.
firebug :: Install Full Firebug. Firefox only!
jsdir= :: JavaScript Test Framework :
Root directory of JavaScript tests.
jsfilter= :: JavaScript Test Framework :
Filter tests, example; ns:test_login,tests:test_user.
jsphase= :: JavaScript Test Framework :
Specify the phases the framework should run example; setup,test,teardown
-l, loadtest= :: Run the given test file/dir
loglevel= :: Log level command, sets the global logging level.
nocompress :: Do not compress windmill javascript files. Defaults to True
-p, pdb :: Enable pdb debugging when running python tests. Defaults to False
port= :: Set port for windmill to run. Default is 4444.
-t, test= :: Run the given test file/dir
-m, firefox :: Start the firefox browser. Defaults to False
-x, ie :: Start the internet explorer browser. Windows Only. Defaults to False
-s, safari :: Start the Safari browser. Mac Only. Defaults to False
usecode :: Use the code module rather than ipython. Defaults to False
x-ip@x-ip-lain:~/workspace/gibeta$

Si no lo hacemos, y se ejecuta con un python2.4 nos va a dar este error …

x-ip@x-ip-lain:~/workspace/gibeta$ ./bin/windmill shell google.com
google.com is not a windmill argument. Sticking in functest registry.
Traceback (most recent call last):
File “./bin/windmill”, line 19, in ?
windmill.bin.windmill_bin.main()
File “/home/x-ip/Trabajo/Rcom/Instancias/gibeta/trunk/eggs/windmill-0.9.1-py2.4.egg/windmill/bin/windmill_bin.py”, line 52, in main
admin_lib.command_line_startup()
File “/home/x-ip/Trabajo/Rcom/Instancias/gibeta/trunk/eggs/windmill-0.9.1-py2.4.egg/windmill/bin/admin_lib.py”, line 329, in command_line_startup
shell_objects = setup()
File “/home/x-ip/Trabajo/Rcom/Instancias/gibeta/trunk/eggs/windmill-0.9.1-py2.4.egg/windmill/bin/admin_lib.py”, line 134, in setup
httpd, httpd_thread, console_log_handler = run_threaded(windmill.settings[‘CONSOLE_LOG_LEVEL’])
File “/home/x-ip/Trabajo/Rcom/Instancias/gibeta/trunk/eggs/windmill-0.9.1-py2.4.egg/windmill/bin/admin_lib.py”, line 95, in run_threaded
httpd, console_handler = setup_servers(console_level)
File “/home/x-ip/Trabajo/Rcom/Instancias/gibeta/trunk/eggs/windmill-0.9.1-py2.4.egg/windmill/bin/admin_lib.py”, line 89, in setup_servers
httpd = windmill.server.wsgi.make_windmill_server()
File “/home/x-ip/Trabajo/Rcom/Instancias/gibeta/trunk/eggs/windmill-0.9.1-py2.4.egg/windmill/server/wsgi.py”, line 189, in make_windmill_server
windmill_xmlrpc_app = wsgi_xmlrpc.WSGIXMLRPCApplication(instance=xmlrpc_methods_instance)
File “/home/x-ip/.pyenv/lib/python2.4/site-packages/PIL/__init__.py”, line 25, in __init__

TypeError: __init__() got an unexpected keyword argument ‘allow_none’
x-ip@x-ip-lain:~/workspace/gibeta$

Estan avisados! 😉

Bueno, perfecto! lo tenemos trabajando. Algo con lo que me encontre fue que al seguir la documentacion para aprender este framework en: http://trac.getwindmill.com/wiki/WindmillBook al seguir este ejemplo:

x-ip@x-ip-lain: ./bin/python ./bin/windmill firefox http://www.example.com

Me daba un error por buscar en /usr/lib/firefox-$miversion/ esto ‘mozrunner-firefox‘ lo cual,
solucione con un enlace simbolico de esta forma:

x-ip@x-ip-lain:/usr/lib/firefox-3.0.4$ pwd
/usr/lib/firefox-3.0.4

x-ip@x-ip-lain:/usr/lib/firefox-3.0.4$ sudo su
[sudo] password for x-ip:

root@x-ip-lain: ln -ls /usr/lib/firefox-3.0.4/firefox /usr/lib/firefox-3.0.4/mozrunner-firefox

Solucionado esto pude correr satisfactoriamente:

x-ip@x-ip-lain: ./bin/python ./bin/windmill firefox http://www.google.com

Eso es todo, espero les halla sido de utilidad 🙂

Anuncios

Archivado en: Plone, Python

2 Responses

  1. ricky dice:

    ¿Porque este blog tiene ese titulo?

    • ekisip dice:

      Sakura es un personaje femenino de una serie de anime llamada ‘Naruto’. Ella destaca por su increible fuerza, y es el nombre que le puse a una de mis laptops puesto que sobrevivio al derrame de un litro de cerveza y a que la agarrara una intensa lluvia. Mas info en : http://www.youtube.com/watch?v=1BUVVcI2AN8
      Y Lain es otro personaje de una serie de anime llamada Serial Experiments Lain. Ella es timida en el mundo real y extrovertida en la red. Es el nombre de mi otra laptop, cual no ha tenido las experiencias de sakura, pero es un terminal con un poder de computo considerable y con la cual trabajo :).
      De alli viene el nombre de mi blog, son los nombres de mis dos computadoras, quienes me permiten hacer.
      Saludos!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: