Showing posts with label Selenium WebDriver. Show all posts
Showing posts with label Selenium WebDriver. Show all posts

Tuesday, 5 February 2013

Pruebas Automatizadas para aplicaciones DOJO con Selenium WebDriver (Español)

This information in English:
Uno de los principios de las Metodologías Ágiles de desarrollo software es el TDD -Test Driven Development o desarrollo guiado mediante pruebas-, que permite a los desarrolladores tener un mayor control sobre el comportamiento de su código.

La fase de pruebas de tu código ya no representa una pequeña parte de tu proyecto, sino que debe pasar a ser una manera rápida y eficiente de comprobar el código a través de los tests automatizados; al mismo tiempo que facilite el mantenimiento del código en futuras actualizaciones del proyecto. Por eso es necesario incluir el tiempo de pruebas en la planificación del alcance de tus proyectos.

Selenium es un projecto que sirve de gran ayuda a la hora de efectuar pruebas automatizadas de tus páginas o aplicaciones Web; consiste en un conjunto de herramientas software, proporcionando cada una una solución diferente para automatizar tus pruebas.

Selenium te puede ayudar a probar tus aplicaciones Web, del mismo modo que yo lo encontré muy útil para efectuar pruebas automatizadas de mis aplicaciones DOJO.

La versión más reciente de Selenium es Selenium WebDriver, que es el fruto de la unión de dos projectos, Selenium RC y WebDriver, con el fin de que ambas soluciones interactuaran mejor entre sí; todas las referencias a Selenium en este artículo se refieren a la versión Selenium WebDriver o Selenium 2.

Selenium IDE Interface

Primeros Pasos con Selenium

Lo primero que debes hacer para familiarizarte con Selenium es probar la herramienta Selenium IDE, que viene implementado como una extensión de Firefox y permite crear scripts para Selenium. Con Selenium IDE puedes grabar tus interacciones con el explorador, para luego editar y depurar estas pruebas.

La interfaz de Selenium IDE es intuitiva y muy fácil de utilizar nada más instalas el plugin en tu explorador Firefox. Conforme navegas en tu página o aplicación Web, Selenium IDE graba todos los pasos que ejecutas, de modo que puedes guardar tus casos de pruebas (test cases) y agruparlas (suite of tests) para luego reproducir los mismos procesos tantas veces como desees.

Las pruebas creadas con Selenium IDE se pueden reutilizar durante las pruebas de integración de la aplicación Web en el momento de compilar y empaquetar la aplicación los archivos. Hay múltiples opciones, pero en este artículo nos centraremos en usar Selenium WebDriver para ejecutar los test procedentes del IDE de dos formas diferentes:

  • Scripts HTML creados directamente en Selenium IDE como suites de pruebas
  • Pruebas JUnit exportadas por Selenium IDE como clases Java

Selenium WebDriver

Otro módulo de la familia Selenium, a parte del IDE, es Selenium WebDriver, que se puede utilizar para incluir la ejecución automática de pruebas para páginas y aplicaciones Web como parte del proceso de compilado de la propia aplicación.

El ejemplo en el que se basa este artículo es una aplicación DOJO construida con Maven; por lo que se hará uso de las dependencias Maven disponibles para Selenium y los diferentes exploradores que se quieren cubrir como parte de nuestras pruebas.

> Añadir las dependencias para Selenium WebDriver

El siguiente fragmento de código muestra las dependencias Maven necesarias en el fichero pom.xml. Se van a probar los tres exploradores indicados, esto es Firefox, Internet Explorer y Google Chrome.

La versión más actual de Selenium en el momento de escribir este artículo es la 2.26.0.

> Usar las suites de pruebas en HTML de Selenium IDE

El código HTML para ejecutar las suites de prueba se puede obtener de Selenium IDE haciendo: File > Save Test Suite. Una suite de prueba es un conjunto de uno o más casos de pruebas; cuando guardes la suite tendrás que indicar nombres para los diferentes casos de pruebas y para la suite; asegúrate de que el nombre del fichero que representa la suite tiene una extensión de HTML, ya que si no la tiene fallará la ejecución de estas pruebas.

Los fragmentos que se muestran a continuación muestran un ejemplo muy simple de una suite de pruebas con un solo caso de prueba que abre una página de registro de usuario y rellena el formulario.

> Fragmento del fichero que representa la suite:

> Fragmento del caso de prueba:

Los archivos que se generen con Selenium IDE para tus pruebas deberían ser similares a los que se muestran sobre estas líneas.

Una vez creados los ficheros de tu suite de pruebas, pueden ser ejecutados como parte del proceso de compilación, para lo que hace falta incluir más dependencias en el archivo pom.xml para incluir el servidor Jetty y el plugin de Maven para efectuar la llamada a la suite de pruebas. Los siguientes fragmentos de código deben estar presentes en tu fichero pom dentro de la seción build.

> Hay que incluir la dependencia Jetty para que el servidor Jetty arranque la aplicación antes de la fase de pruebas de integración y la pare cuando terminen las pruebas:

> Hay que incluir la dependencia Maven para Selenium, con diferentes ejecuciones del "goal" selenese, una para cada uno de los exploradores que se deseen probar:

No olvides  situar los archivos de tu suite en el directorio correcto y que el fichero de la suite debe tener extensión HTML, si no, el explorador no se cerrará al finalizar las pruebas y el proceso de compilación nunca finalizará, ya que las pruebas no se consideran terminadas.

En este punto ya puedes compilar tu aplicación y ejecutar tu suite de pruebas como parte de las pruebas de integración; simplemente ejecuta el comando Maven: mvn clean install

La compilación de tu aplicación comenzará y verás cómo se ejecutan las pruebas, abriendo los diferentes exploradores para reproducir los casos de pruebas de tu suite de pruebas.

NOTA: Durante las pruebas ejecutadas antes de escribir este artículo, la versión 2.3 del plugin de Selenium para Maven es compatible con Firefox 12, pero no con las versiones posteriores, de manera que si quieres probar el "goal" selenese en Firefox, debes tener instalada la versión 12. Internet Explorer y Google Chrome funcionaban correctamente con sus respectivas últimas versiones.

> Usar las pruebas JUnit exportadas de Selenium IDE como clases Java

El código Java para los casos de prueba se puede obtener haciendo: File > Export Test Case As... > Java / JUnit 4 / WebDriver en Selenium IDE. Se generará una clase Java con anotaciones JUnit para cada uno de los casos de pruebas que exportes desde Selenium IDE. Este código es más una guía de lo que tus pruebas deberían ser, ya que muchas de las instrucciones exportadas no funcionarán como pruebas JUnit; aún así, el código generado es una plantilla muy útil y fácil de mejorar con tu propio código.

La dependencia necesaria para configurar estas pruebas es el plugin de Maven Surefire (a parte de JUnit), como se muestra a continuación:

De acuerdo con la configuración anterior, las clases de prueba para Selenium WebDriver deber estar ubicadas bajo el paquete *.selenium y deben llamarse *Test.java para poder ser ejecutadas como parte de las pruebas de integración JUnit.

Los siguientes fragmentos de código muestran la misma página de pruebas que antes, usando clases de pruebas JUnit para comprobar los tres exploradores: Firefox, Internet Explorer y Google Chrome:

> En este caso, las clases de pruebas para Firefox con compatibles con la última versión del explorador

> Para Internet Explorer, es necesario descargar un driver de Internet Explorer; eligiendo el adecuado a tu versión de Windows (32 o 64 bits), y además hay que expecificar en la clase de prueba que use ese driver

> Para Google Chrome, es necesario descargar el chromedriver adecuado para el sistema operativo en que trabajes, y además indicar en la clase de pruebas que use dicho driver

Ya puedes compilar tu aplicación y ejecutar las pruebas JUnit como parte de tus pruebas de integración; simplemente ejecuta el siguiente comando Maven: mvn clean install. Los resultados de las pruebas se pueden almacenar usando el plugin Maven Surefire Report.

Y hasta aquí mis reflexiones acerca de este tema. Muchas gracias por leer este artículo, espero que te haya sido de ayuda para Automatizar tus pruebas Web. Por favor, deja cualquier pregunta o comentario que tengas.

Wednesday, 5 December 2012

Selenium WebDriver for DOJO Automated Tests

Esta información en Español:
One of the Agile principles in software development is TDD -Test Driven Development-, which allows developers to better control the behaviour of their own code.

Testing your code is no longer a small part of your projects, and creating automated tests for your developments helps to check the code quickly and efficiently, as well as to maintain the code after later upgrade, so you should always consider it when you plan your estimates.

A really helpful system you can use in Web development to create automated tests for your pages and applications is Selenium, a set of different software tools each with a different approach to supporting automation. This will allow you to carry out tests on your web apps as it helped me with automating the tests on my DOJO apps.

The latest releases of Selenium are the Selenium WebDriver ones, which involves two old projects (Selenium RC and WebDriver) merged into one in order to make things work better. All the references to Selenium in this post are about the Selenium WebDriver version or Selenium 2.
Selenium IDE Interface

First Steps with Selenium

In order to get familiarised with Selenium, you should first try Selenium IDE, an integrated development environment for Selenium scripts. It is implemented as a Firefox extension, and allows you to record, edit, and debug tests. Selenium IDE includes the entire Selenium Core, allowing you to easily and quickly record and play back tests in the actual environment that they will run.

Selenium IDE has a very user friendly interface which you can start using as soon as you install the add-on to your Firefox. As you navigate through your page or web app, Selenium IDE will record all the steps you take; you can then save your test cases and suites of tests, so you can reproduce the same processes as many times as you wish.

The tests you create with Selenium IDE can be re-used as part of the integration tests of your web app when you build and package your files. There are several options, depending on the language you are using; but this post will focus using Selenium WebDriver to run the IDE tests in two ways:

  • HTML suites directly from Selenium IDE
  • Java JUnit classes created as exports from Selenium IDE

Selenium WebDriver

Selenium WebDriver is another module, part of the Selenium family, which you can use to run your automated tests as part of the build process of your web app.

The application example for this post is a DOJO app using a Maven build. We will therefore be using the Selenium Maven dependencies for Selenium Driver and the different browsers we want to cover as part of our tests.

> Adding the Selenium WebDriver dependencies

The following snippet shows the Maven dependencies you need to add to your pom.xml file. The three browsers included in the dependencies will be tested, that is Firefox, Internet Explorer and Google Chrome.

The latest Selenium version at the time of writing this post is 2.26.0.

> Using the HTML test suites from Selenium IDE

You can get the HTML code for your test suites by doing File > Save Test Suite on your Selenium IDE. A suite is a set of one or more test cases; you will be prompted for the name of the test cases and the name of the suite; please make sure that the file representing the suite has an extension of HTML.

The following snippets show a very simple example of a suite with a test case that will open a login page and will fill in the form.

> Snippet of the suite:

> Snippet of the test case:

The files you generate from your Selenium IDE tests should look similar to the ones shown above.

Once you have created your suite files, you can run them as part of your build process. More dependencies are required in your pom.xml to include the Jetty server and the Selenium Maven plugin to call the suite test. The following snippets should be added to your pom file within the build section.

> Including the Jetty dependency so that it starts the app on the Jetty server before the integration test phase and stops it after the tests are completed:

> Including the Selenium Maven plugin dependency, with the different executions of the selenese goal, one execution for each of the browsers to be tested:

You need to make sure that your suite files are in the right path and also remember that your suite file needs to have an extension of HTML, otherwise, the browser will remain open, the test will not finish and the build process will never complete.

Now you are ready to build your app and run your test suite as part of the integration tests; just type your Maven command: mvn clean install

Your build process will start and you will see your tests running and opening the browsers to perform the test cases within your test suite.

NOTE: As part of the test carried out before writing this post, version 2.3 of the Maven Selenium plugin is compatible with Firefox 12, but not with any of the later versions. So if you want to run the selenese goal on Firefox, you need to be running version 12. IE and Chrome worked smoothly on their latest versions.

> Using Java JUnit classes exported from Selenium IDE

You can get the Java code for your test cases by doing File > Export Test Case As... > Java / JUnit 4 / WebDriver on your Selenium IDE. A Java class with JUnit annotations will be generated for each of the test cases you export from Selenium IDE. This code is more a guideline of what the test should do than the actual valid test to be run as part of your JUnit tests, but it is a very good template to use and enhance with your own test code.

The dependency you need to set up for these tests to run is the Maven Surefire plugin (apart from JUnit), as shown next:

According to the previous configuration, your Selenium WebDriver test classes need to be under the *.selenium package and they need to be called *Test.java in order to be run as part of the JUnit integration tests.

The next snippets show the same login page test as before, using JUnit classes to test the three browsers: Firefox, Internet Explorer and Google Chrome:

> The Firefox test in this case is compatible with the latest Firefox version

> For Internet Explorer, you need to download the IE driver server that applies to your Windows OS (32 or 64 bits) and tell your test class to use that driver

> For Google Chrome, you need to download the chromedriver suitable for your platform and tell your test class to use that driver

You can now build your app and run your JUnit tests as part of the integration tests; just type your Maven command: mvn clean install. The results of your tests can be logged by using the Maven Surefire Report plugin.

Many thanks for taking the time to read this post, I hope you found it useful for Automating your web Tests. Please leave any comments or questions you have.