Integración Selenium / Maven 2 / Surefire / Cargo / Tomcat 6.
0. Índice de contenidos.
- 1. Introducción.
- 2. Entorno.
- 3. ¿Qué es Maven?.
- 4. ¿Qué es Selenium?.
- 5. ¿Qué es Surefire?.
- 6. ¿Qué es Cargo?.
- 7. ¿Qué es Tomcat?.
- 8. Configuración.
- 9. Utilización.
- 10. Ejemplo.
- 11. Conclusiones.
1. Introducción
Con este tutorial se pretende integrar en nuestro proyecto : Maven, Selenium, Surefire, Cargo y Tomcat 6 con el objetivo
de incluir y ejecutar las pruebas de integración dentro del ciclo de vida de Maven.
Seguro que os preguntáis sobre el motivo de semejante integración, pues es muy sencillo, vamos a tratar de ejecutar las
pruebas de integración (mediante test realizados con Selenium) sobre un contenedor Tomcat 6 (que sería el contenedor final de la nueva
versión),para que justo cuando se genere una versión nueva del proyecto se realicen las pruebas directamente sobre la nueva versión
y así comprobar que no se ha producido ninguna regresión en nuestro código.
Recordar que las pruebas de regresión tratan de identificar que no se haya producido ningún nuevo defecto o bien efectos
colaterales en nuestro código.Cada vez que realizamos cualquier modificación en nuestro código sería conveniente probar todo lo
anterior para ver que todo sigue funcionando correctamente y que no hemos realizado una regresión en nuestra calidad. Muchas veces
cuando incluimos alguna modificación o añadimos algo se puede incorporar problemas «sin darse cuenta», así que teneis que estar
muy pendiente de estas cosas.
Por otro lado, destacar que las pruebas se ejecutarán automáticamente lo que supone que no tendremos que dedicar nuestro tiempo
una y otra vez a probar la aplicación en cada versión que se realice. Es cierto, que las primeras veces preparar todo esto presentará
un coste añadido bastante elevado y que requiere cierto aprendizaje, pero mirar a largo plazo y verlo como una inversión,
en los siguientes ciclos de ejecución os dareis cuante de todo lo que habeis ganado y de aquí en adelante todo serán beneficios.
2. Entorno.
El tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil Asus G50Vseries (Core Duo P8600 2.4GHz, 4GB RAM, 320 GB HD).
- Sistema operativo: Windows Vista Ultimate.
- Internet Explorer 7.0.6001.1800
- Mozilla Firefox 3.0.6
- Opera 9.63
- Safari 3.2.1
3. ¿Qué es Maven?.
Maven es una herramienta que permite realizar la administración de un proyecto.
En sus inicios fue un proyecto interno de Turbine (que es un framework web que pertenece a Jakarta), sus primera funcionalidades eran
la de facilitar la realización de las pruebas unitarias o bien generar la documentación del proyecto. Poco a poco se fue haciendo un
hueco hasta que se convirtió en un proyecto independiente de Turbine debido al potencial que presentaba.
Características:
- Generar proyectos de forma muy sencilla.
- Establece un modo de generar proyectos de forma uniforme.
- Utilización de la información del proyecto (Informes, etc.).
- Genera la documentación de un proyecto.
- Generación de elementos de «despliegue» de un proyecto de forma sencilla (WAR, EAR o JAR).
- Facilita la publicación y distribución de un proyecto.
- Gestión de dependencias.
Se basa en dos conceptos:
– POM (Project Object Model)
Es un fichero XML en el que se describe proyecto, así como sus dependencias externas con otros módulos y el uso de componentes externos.
Además permite la ejecución de procesos, para ello tiene definidas una serie de tareas como son la compilación, empaquetado, despliegue, etc…
(ver ciclo de vida de Maven)
Ejemplo de Esqueleto del fichero POM:
4.0.0 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
– Repositorio
Es el lugar donde se localizarán las dependencias de nuestro proyecto (vendrían a ser los ficheros JAR de los elementos que necesitamos para que nuestro proyecto
funcione). Hay que pensar que incluso varios de nuestros proyectos pueden compartir dichas dependencias.
La ubicación por defecto del repositorio local es la siguiente:
- Windows : C:\Documents and Settings\usuario\.m2
- Linux / Unix : $HOME/.m2
Existen varias páginas que son repositorios de Maven (Oficiales y no oficiales), en ellas se pueden encontrar todos los jar de libre distribución que pueda
necesitar nuestro proyecto. Por ejemplo : http://www.ibiblio.org/maven2/
De hecho, Maven se encargará de descargarlos automáticamente en el momento que los necesite.
Instalación:
Paso 1 : Descargar la versión en formato zip desde su página web http://maven.apache.org/download.html
Paso 2 : Descomprimir el archivo en nuestro sistema. Por ejemplo : C:\maven-X.X.X
Paso 3 : Incluir en la variable de entorno PATH la siguiente instrucción : C:\maven-X.X.X\bin
Paso 4 : Comprobar que se ha instalado correctamente para ello arrancar una consola y ejecutar la siguiente instrucción : mvn –version
Si la instalación se ha realizado correctamente nos devolverá la versión utilizada de Maven.
Ciclo de vida:
Es interesante tener una noción básica del ciclo de vida de Maven, ya que habrá que establecer las diferentes ejecuciones de los plugin (Selenium , Cargo, etc.)
en algunas fases específicas de su ciclo de vida.
Nota :Ejecutando estas fases mediante su ejecución por línea de comandos se conseguirá realizar la acción especificada.
Ciclo de vida de limpieza : se encarga de «limpiar» el proyecto, es decir, lo prepara para iniciar las diferentes fases partiendo desde cero.
Objetivo | Descripción |
pre-clean | Ejecuta los procesos necesarios antes de realizar la fase de limpiado del proyecto. |
clean | Quita todos los ficheros generados en la anterior construcción de la aplicación. |
post-clean | Ejecuta los procesos necesarios después de realizar la fase de limpiado del proyecto. |
Ciclo de vida por defecto
Objetivo | Descripción |
validate | Valida que el proyecto sea correcto y que toda la información necesaria este disponible. |
compile | Compila el código fuente del proyecto. |
test | Ejecuta los test previamente compilados usando el framework adecuado.Estas pruebas no deben requerir que el código este empaquetado y ni desplegado. |
package | Coge el código compilado y lo empaqueta en su formato a distribuir (JAR, WAR, etc.). |
pre-integration-test | Ejecuta las acciones necesarias antes de ejecutar las pruebas de integración. Por ejemplo la configuración del entorno necesario. |
integration-test | Procesa y depliega el paquete. Si es necesario lo realiza en el entorno donde se van a ejecutar las pruebas de integración. |
post-integration-test | Ejecuta las acciones necesarios, después de que las pruebas de integración se hayan realizado. Por ejemplo la limpieza del entorno. |
verify | Ejecuta los chequeos necesarios para verificar que el paquete cumple los criterios de calidad. |
install | Instala el paquete en el repositorio local, para su uso como dependencias de otros proyectos locales. |
deploy | Libera el entorno o hace una integración.Copia el paquete final al repositorio remoto. |
Para ver el ciclo de vida completo de Maven visitar su página.
Para más información sobre Maven consultar el siguiente tutorial Maven.
4. ¿Qué es Selenium?.
Selenium es un conjunto de herramientas que permite automatizar las pruebas sobre aplicaciones web a través de diferentes plataformas.
Sus principales características son las siguientes:
- Funciona en diferentes navegadores y con diferentes sistemas operativos.
- Puede ser controlado por muchos lenguajes de programación y framework de prueba.
- Permite crear pruebas de regresión.
Para entender un poco mejor la funcionalidad de Selenium sería interesante echar un vistazo al tutorial de Selenium Remote Control.Ya que vamos a utilizar
muchos de los conceptos que en él se explican como : servidor Selenium, su integración con JUnit, etc.
Para poder utilizar Selenium en nuestro proyecto vamos a integrarlo con Maven, para ello haremos uso de:
– Selenium-maven-plugin
Selenium-maven-plugin es un plugin para integrar Selenium con Maven 2.
Su principal uso es el de permitir arrancar el servidor Selenium (viene proporcionado por Selenium Remote Control) que nos va a permitir
realizar las pruebas sobre la aplicación web.
Con este plugin se trata de dar soporte a la utilización del driver del cliente Java Selenium cuando ejecuta algún test mediante Surefire.
Instalación (Maven 2)
No requiere instalación,simplemente bastará con indicar su uso en el fichero POM del proyecto.
Habría que incluir en el POM la indicación de su uso:
. . .. . . org.codehaus.mojo selenium-maven-plugin INCLUIR VERSION
Objetivos (Maven 2)
Nota :Ejecutando estos objetivos mediante su ejecución por línea de comandos se conseguirá realizar la acción especificada.
Objetivo | Descripción |
selenium:start-server | Arranca el servidor Selenium. |
selenium:stop-server | Parar el servidor Selenium. |
selenium:selenese | Ejecuta una suite de test HTML. |
selenium:xvfb | Arranca una instancia Xvfb. |
Para más información consultar el siguiente tutorial Selenium Remote Control.
5. ¿Qué es Surefire?.
Surefire es un plugin que se integra durante la fase de test de Maven para ejecutar los
test de una aplicación.
Permite generar informes de los resultados de las pruebas en dos formatos de fichero:
- Fichero de texto plano.
- Fichero XML
- Fichero HTML (Habría que indicarlo)
Dichos ficheros se suelen generar por defecto en la siguiente carpeta : ${basedir}/target/surefire-reports.
Instalación (Maven 2)
No requiere instalación,simplemente bastará con indicar su uso en el fichero POM del proyecto.
Habría que incluir en el POM el uso de este plugin:
. . .. . . org.apache.maven.plugins maven-surefire-plugin ULTIMA VERSION .....
Por otro lado habría que establecer el framework de prueba que permitirá ejecutar las pruebas unitarias.Por ejemplo: JUnit o Testng.
Para ello se incorporarían en el fichero POM las dependencias requeridas.
Objetivos (Maven 2)
Nota :Ejecutando este objetivo mediante su ejecución por línea de comandos se conseguirá realizar la acción especificada.
Objetivo | Descripción |
surefire:test | Ejecuta los test unitarios de la aplicación. |
Para más información consultar el siguiente tutorial Surefire.
6. ¿Qué es Cargo?
Cargo es un framework que proporciona una API de Java desde la cual se van a poder arrancar,parar y configurar
una gran variedad de contenedores de Java de una forma muy sencilla.
Su principal uso es el de permitir arrancar el contenedor necesario para realizar las pruebas funcionales y de integración.Pero también tiene otros
como arrancar contenedores para aplicaciones que requieren el tenerlo arrancado para su ejecución.
Cargo proporciona los siguientes API:
- API Java para arrancar,detener y contenedores Java (incluso desplegar modulos en ellos).
- API Java para analizar,crear y fusionar módulos J2EE.
Lo mejor de todo es que para relizar estas operaciones permite el uso de tareas Ant,Maven 1,plugin Maven 2,Intellij IDEA y plugin Netbeans.
Contenedores utilizados:
- Geronimo 1.x
- JBoss 3.x / 4.x / 4.2.x
- Jetty 4.x / 5.x / 6.x
- Jo 1.x
- JOnAS 4.x / 5.x
- Oc4J 9.x / 10.x
- Orion 1.x / 2.x
- Resin 2.x / 3.x
- Tomcat 3.x /4.x / 5.x / 6.x
- WebLogic 8.x / 9.x / 10.x / 10.3x
Hay diferentes formas de utilizar cargo : utilizando sus propias librerías, integrado con Maven o Ant o como plugin de Eclipse, etc.
Ejemplo del uso de librerías del core de Cargo:
Deployable war = new WAR("path/to/simple.war"); LocalConfiguration configuration = new Resin3xStandaloneLocalConfiguration("target/myresin3x"); configuration.addDeployable(war); InstalledLocalContainer container = new Resin3xInstalledLocalContainer(configuration); container.setHome("c:/apps/resin-3.0.18"); container.start(); // Here you are assured the container is started. container.stop(); // Here you are assured the container is stopped.
En este ejemplo se configura Resin 3.0.15 para arrancar en target/myresin3x y desplegar un WAR localizado.
Nota: en la página de cargo podemos encontrar más ejemplos de esta parte.
Pero de todas las opciones que tenemos para utilizarlo nos vamos a centrar a su uso con Maven.
Instalación Maven 2
No requiere instalación,simplemente bastará con indicar su uso en el fichero POM del proyecto.
Todos los artefactos que utilizan Cargo se encuentra en el repositorio de ibiblio.
OJO : Cuidado con las versiones de los artefactos ya que muchos de las versiones son antiguas y pueden no funcionar.
Nota : Cargo dispone de un repositorio asociado al proyecto, si se quiere incorporar al proyecto incluir el siguiente
texto en el POM.
codehaus snapshot repository http://snapshots.repository.codehaus.org/ true
Habría que incluir en el POM su uso como plugin :
. . .org.codehaus.cargo cargo-maven2-plugin INCLUIR VERSION . . .
Objetivos (Maven 2)
Nota :Ejecutando estos objetivos mediante su ejecución por línea de comandos se conseguirá realizar la acción especificada.
Objetivo | Descripción |
cargo:start | Arranca el contenedor y de forma opcional despliega la construcción básica WAR / EAR / Etc. |
cargo:stop | Para el contenedor |
cargo:deployer-deploy | (Alias de cargo:deploy) Despliega un elemento desplegable en un contenedor en ejecución. |
cargo:deployer-undeploy | (Alias de cargo:undeploy) Replegar el elemento desplado desde el contenedor en ejecución. |
cargo:deployer-start | Arranca un elemento despleado que se encuentre instalado en un contenedor en ejecución. |
cargo:deployer-stop | Parar un elemento deplegado sin replegarlo. |
cargo:deployer-redeploy | Repliega y despliega el emlemento desplegable. |
cargo:uberwar | Fusiona varios archivos WAR en un único WAR. |
cargo:install | Instala una distribución del contender el sistema de ficheros. |
Para más información consultar la página de Cargo.
7. ¿Qué es Tomcat?
Apache Tomcat es un servidor web con soporte de servlets y JSPs. Dejar claro en todo momento que no es un servidor
de aplicaciones como Jboss.
Una de sus principales características es que se ha realizado en Java, luego funcionará en cualquier sistema operativo que disponga máquina virtual Java (JVM).
Instalación
Paso 1 : Descargar de la página web la versión de Tomcat . Descargarla aquí
Paso 2 : Descomprimir el archivo en nuestro sistema. Por ejemplo : C:\apache-tomcat-6.0.18
Paso 3 : Incluir la anterior ruta como variable de entorno CATALINA_HOME
Paso 4 : Comprobar que tenemos instalada la variable JAVA_HOME (en caso de no encontrase intalar JAVA)
Paso 5 : En el directorio CATALINA_HOME/bin nos encontraremos los scrips de arranque y parada.
- Arrancar Tomcat : startup.sh
- Parar Tomcat : shutdown.sh
Para más información visitar su página.
6. Ejemplo.
En este punto se va a pasar a detallar la integración de todo lo anterior, para ello se trabajará sobre un fichero POM de un proyecto.
Nota : Para poder comprobar su correcto funcionamiento es necesario realizar previamente los test. En este tutorial no se va a
enseñar a realizarlos, es por ello que se aconseja visualizar los siguientes tutoriales antes de continuar donde se explica como hacerlo
de forma detallada:
- Selenium IDE : Grabación y reproducción de los test.
- Selenium Remote Control : Reproducción de test realizados en Java y adaptados a su uso con JUnit.
En este ejemplo de integración, trataré de explicar en detalle lo que hace cada parte del fichero POM, pero recordad que tendréis que adaptarlo a vuestro proyecto y a vuestras
necesidades.
4.0.0 com.autentia.jsf icefacesLibrary war 1.0-SNAPSHOT icefacesLibrary http://maven.apache.org . . .
En esta parte del código se detallan los datos del proyecto:
- modelVersion : Indica la versión del modelo de POM utilizado (actualmente 4.0.0).
- groupId : Indica el identificador común que van a tener los proyectos desarrollados por mi empresa o por mi mismo.
- artifactId : Indica el identificador del proyecto dentro de los proyectos que pertenecen al mismo groupId.
- packaging : Indica el sistema de empaquetado del proyecto.
- version : Indica la versión del proyecto (por defecto 1.0-SNAPSHOT).
- name : Nombre utilizado por el proyecto (por defecto es igual que el groupId).
- url : Indica la URL en la que se encuentra la información asociada al proyecto.
. . .. . . 1.0-SNAPSHOT 4444 true
En este apartado se muestran las propiedades comunes al proyecto y en las cuales se indican
las características de configuración de Selenium:
- selenium-version : Versión de Selenium que se va a utilizar.
- selenium.port : Puerto por el que escuchará Selenium.
- selenium.background : Establece si Selenium se va a ejecutar en modo background.
. . .icefacesLibrary . . . org.apache.maven.plugins maven-compiler-plugin 1.5
Con el plugin maven-compiler-plugin vamos a poder compilar nuestro proyecto indicándole la versión de Java con la que
se realizará.
. . .. . . org.codehaus.mojo selenium-maven-plugin pre-integration-test start-server ${selenium.background}
En este apartado incluiremos Selenium, para ello indicar que se usará el plugin selenium-maven-plugin.
Declaramos una ejecución, la cual consiste en que durante la fase de Maven de «pre-integration-test» se arracará el servidor Selenium
para realizar las pruebas.Recordar que en esta fase se realiza la reserva de los recursos necesarios para la realización de las pruebas
de integración.
Nota :En cuanto a parar el servidor, decir que este se parará automáticamente al terminar las pruebas.
. . .. . . org.apache.maven.plugins maven-surefire-plugin false it-test integration-test test **/*It.class
En este apartado incluiremos Surefire, para ello indicar que se usará el plugin maven-surefire-plugin.
Declaramos una ejecución «especial» denominada it-test,esta ejecución se encargará de realizar en la fase de
Maven de integration-test la ejecución de todos los test cuyo nombre terminen por «It».Esto se debe al
siguiente problema :
Maven no es capaz de diferenciar las pruebas unitarias de las de integración, por lo que al final termina utilizando
la misma carpeta para utilizarlas (Se cree que esto estará solucionado a partir de las versiones de Maven 2.1),
de esta forma conseguirmos hacer esta distinción y asi ejecutar las pruebas que nos interesan.
. . .. . . org.codehaus.cargo cargo-maven2-plugin 1.0-beta-2 start-container pre-integration-test start stop-container post-integration-test stop ${selenium.background} false tomcat6x C:/apache-tomcat-6.0.18 standalone
En este apartado incluiremos Cargo, para ello indicar que se usará el plugin cargo-maven2-plugin.
Declaramos dos ejecuciones:
– Start-container : que se ejecutará en la fase de pre-integration-test y que arracará el contenedor especificado (en nuestro caso Tomcat 6).
– Stop-container : que se ejecutará en la fase de post-integration-test y que parará el contenedor especificado (en nuestro caso Tomcat 6).
Por otro lado, declaremos los datos asociados a la configuración del contenedor. Como puntos fuertes indicar que en este ejemplo lo ejecutemos
en local porque lo estamos integrando con Maven y nos interesa que se realicen las pruebas antes de realizar la release, pero que sepáis que también
existe la posibilidad de ejecutarlo en modo remoto.
Para mayor información sobre este punto mirar la página de Cargo.
OJO : Es muy importante tener la condición de wait a false para que NO se quede esperando el contendor al arrancar.
. . .. . . codehaus snapshot repository http://snapshots.repository.codehaus.org/ true
En este apartado incluimos el repositorio asociado a «codehaus» para que descarga en caso de ser necesario cualquier cosa asociada
a sus proyectos.
. . .. . . jboss-repository JBoss Repository http://repository.jboss.com/maven2 openqa http://maven.openqa.org
En este apartado se indican los repositorios que usará el proyecto.
. . .. INCLUIR RESTO DE DEPENDECIAS PROYECTO . . . .junit junit 4.5 test org.openqa.selenium.client-drivers selenium-java-client-driver ${selenium-version} test . INCLUIR RESTO DE DEPENDECIAS PROYECTO . org.openqa.selenium.server selenium-server ${selenium-version}
Es este apartado se establecen las dependencias que tendrá el proyecto. Como se puede observar deberemos de incluir a las que ya tenemos 3:
junit :Framework de prueba que se utilizará para la ejecución de las pruebas unitarias y de integración.
selenium-java-client-driver :Cliente Java utilizado.
selenium-server :Servidor Selenium sobre el que se ejecutarán las pruebas.
Resultados de la ejecución del ejemplo
Para la ejecución del ejemplo , se ejecutará sobre la línea de comandos la orden mvn install sobre un proyecto que tiene una prueba unitaria y una prueba de integración.
En el siguiente área de texto podeis ver toda la traza desde que se realiza «mvn install» y podréis identificar de forma directa cada uno de los puntos que os he ido
indicando en los apartados anteriores.
C:\workspaceCurso\icefacesLibrary>mvn install [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building icefacesLibrary [INFO] task-segment: [install] [INFO] ------------------------------------------------------------------------ [INFO] artifact org.codehaus.mojo:selenium-maven-plugin: checking for updates from codehaus snapshot repository [INFO] snapshot org.codehaus.mojo:selenium-maven-plugin:1.0-rc-2-SNAPSHOT: checking for updates from codehaus snapshot repository [INFO] [resources:resources] [INFO] Using default encoding to copy filtered resources. [WARNING] While downloading jstl:jstl:1.1.2 This artifact has been relocated to javax.servlet:jstl:1.1.2. [INFO] snapshot org.openqa.selenium.client-drivers:selenium-java-client-driver:1.0-SNAPSHOT: checking for updates from autentia-repository [INFO] snapshot org.openqa.selenium.client-drivers:selenium-java-client-driver:1.0-SNAPSHOT: checking for updates from jboss-repository [INFO] snapshot org.openqa.selenium.client-drivers:selenium-java-client-driver:1.0-SNAPSHOT: checking for updates from openqa [INFO] snapshot org.openqa.selenium.client-drivers:selenium-client-drivers:1.0-SNAPSHOT: checking for updates from autentia-repository [INFO] snapshot org.openqa.selenium.client-drivers:selenium-client-drivers:1.0-SNAPSHOT: checking for updates from jboss-repository [INFO] snapshot org.openqa.selenium.client-drivers:selenium-client-drivers:1.0-SNAPSHOT: checking for updates from openqa [INFO] snapshot org.openqa.selenium:selenium-rc:1.0-SNAPSHOT: checking for updates from autentia-repository [INFO] snapshot org.openqa.selenium:selenium-rc:1.0-SNAPSHOT: checking for updates from jboss-repository [INFO] snapshot org.openqa.selenium:selenium-rc:1.0-SNAPSHOT: checking for updates from openqa [INFO] snapshot org.openqa.selenium.core:selenium-core:1.0-SNAPSHOT: checking for updates from autentia-repository [INFO] snapshot org.openqa.selenium.core:selenium-core:1.0-SNAPSHOT: checking for updates from jboss-repository [INFO] snapshot org.openqa.selenium.core:selenium-core:1.0-SNAPSHOT: checking for updates from openqa [INFO] snapshot org.openqa.selenium.server:selenium-server-coreless:1.0-SNAPSHOT: checking for updates from autentia-repository [INFO] snapshot org.openqa.selenium.server:selenium-server-coreless:1.0-SNAPSHOT: checking for updates from jboss-repository [INFO] snapshot org.openqa.selenium.server:selenium-server-coreless:1.0-SNAPSHOT: checking for updates from openqa [INFO] snapshot org.openqa.selenium.server:selenium-server:1.0-SNAPSHOT: checking for updates from autentia-repository [INFO] snapshot org.openqa.selenium.server:selenium-server:1.0-SNAPSHOT: checking for updates from jboss-repository [INFO] snapshot org.openqa.selenium.server:selenium-server:1.0-SNAPSHOT: checking for updates from openqa Downloading: https://autentia.no-ip.org/maven-repository//org/openqa/selenium/server/selenium-server/1.0-SNAPSHOT/selenium-server-1.0-SNAPSHOT.pom Downloading: http://repository.jboss.com/maven2/org/openqa/selenium/server/selenium-server/1.0-SNAPSHOT/selenium-server-1.0-SNAPSHOT.pom Downloading: http://maven.openqa.org/org/openqa/selenium/server/selenium-server/1.0-SNAPSHOT/selenium-server-1.0-SNAPSHOT.pom [INFO] [compiler:compile] [INFO] Nothing to compile - all classes are up to date [INFO] [resources:testResources] [INFO] Using default encoding to copy filtered resources. [INFO] [compiler:testCompile] [INFO] Nothing to compile - all classes are up to date [INFO] [surefire:test] [INFO] Surefire report directory: C:\workspaceCurso\icefacesLibrary\target\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running EjemploTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.039 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [war:war] [INFO] Packaging webapp [INFO] Assembling webapp[icefacesLibrary] in [C:\workspaceCurso\icefacesLibrary\target\icefacesLibrary] [INFO] Processing war project [INFO] Webapp assembled in[887 msecs] [INFO] Building war: C:\workspaceCurso\icefacesLibrary\target\icefacesLibrary.war [WARNING] Attempting to build MavenProject instance for Artifact (org.codehaus.mojo:selenium-maven-plugin:1.0-rc-2-20090119.131135-1) of type: maven-plugin; constructing POM artifact instead. [INFO] [selenium:start-server {execution: default}] Launching Selenium Server Waiting for Selenium Server... [INFO] User extensions: C:\workspaceCurso\icefacesLibrary\target\selenium\user-extensions.js 16:39:54,592 INFO [org.openqa.selenium.server.SeleniumServer] Java: Sun Microsystems Inc. 1.5.0_15-b04 16:39:54,592 INFO [org.openqa.selenium.server.SeleniumServer] OS: Windows Vista 6.0 x86 16:39:54,608 INFO [org.openqa.selenium.server.SeleniumServer] v1.0-beta-2 [2571], with Core v1.0-beta-2 [2330] 16:39:54,705 INFO [org.mortbay.http.HttpServer] Version Jetty/5.1.x 16:39:54,705 INFO [org.mortbay.util.Container] Started HttpContext[/,/] 16:39:54,707 INFO [org.mortbay.util.Container] Started HttpContext[/selenium-server,/selenium-server] 16:39:54,707 INFO [org.mortbay.util.Container] Started HttpContext[/selenium-server/driver,/selenium-server/driver] 16:39:54,731 INFO [org.mortbay.http.SocketListener] Started SocketListener on 0.0.0.0:4444 16:39:54,731 INFO [org.mortbay.util.Container] Started org.mortbay.jetty.Server@14d3343 16:39:55,230 INFO [org.mortbay.util.Credential] Checking Resource aliases Selenium Server started [INFO] [cargo:start {execution: start-container}] [INFO] [stalledLocalDeployer] Deploying [C:\workspaceCurso\icefacesLibrary\target\icefacesLibrary.war] to [C:\Users\Victor\AppData\Local\Temp\cargo\conf/webapps]... [INFO] [talledLocalContainer] Tomcat 6.x starting... [WARNING] [talledLocalContainer] 25-feb-2009 16:40:03 org.apache.tomcat.util.digester.SetPropertiesRule begin [WARNING] [talledLocalContainer] ADVERTENCIA: [SetPropertiesRule]{Server} Setting property 'debug' to '2' did not find a matching property. [WARNING] [talledLocalContainer] 25-feb-2009 16:40:04 org.apache.tomcat.util.digester.SetPropertiesRule begin [WARNING] [talledLocalContainer] ADVERTENCIA: [SetPropertiesRule]{Server/Service} Setting property 'debug' to '2' did not find a matching property. [WARNING] [talledLocalContainer] 25-feb-2009 16:40:04 org.apache.tomcat.util.digester.SetPropertiesRule begin [WARNING] [talledLocalContainer] ADVERTENCIA: [SetPropertiesRule]{Server/Service/Engine} Setting property 'debug' to '2' did not find a matching property. [WARNING] [talledLocalContainer] 25-feb-2009 16:40:04 org.apache.tomcat.util.digester.SetPropertiesRule begin [WARNING] [talledLocalContainer] ADVERTENCIA: [SetPropertiesRule]{Server/Service/Engine/Host} Setting property 'debug' to '2' did not find a matching property. [WARNING] [talledLocalContainer] 25-feb-2009 16:40:04 org.apache.tomcat.util.digester.SetPropertiesRule begin [WARNING] [talledLocalContainer] ADVERTENCIA: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'debug' to '2' did not find a matching property. [WARNING] [talledLocalContainer] 25-feb-2009 16:40:04 org.apache.catalina.core.AprLifecycleListener init [WARNING] [talledLocalContainer] INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.5.0_15\jre\bin;.;C:\Windows\system32;C:\Windows;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\apache-ant-1.7.1\bin;C:\Program Files\Java\jdk1.5.0_15\bin;C:\Program Files\MySQL\MySQL Server 5.0\bin;C:\apache-maven-2.0.9\bin;C:\Program Files\QuickTime\QTSystem\ [WARNING] [talledLocalContainer] 25-feb-2009 16:40:04 org.apache.coyote.http11.Http11Protocol init [WARNING] [talledLocalContainer] INFO: Inicializando Coyote HTTP/1.1 en puerto http-8080 [WARNING] [talledLocalContainer] 25-feb-2009 16:40:04 org.apache.catalina.startup.Catalina load [WARNING] [talledLocalContainer] INFO: Initialization processed in 661 ms [WARNING] [talledLocalContainer] 25-feb-2009 16:40:04 org.apache.catalina.core.StandardService start [WARNING] [talledLocalContainer] INFO: Arrancando servicio Catalina [WARNING] [talledLocalContainer] 25-feb-2009 16:40:04 org.apache.catalina.core.StandardEngine start [WARNING] [talledLocalContainer] INFO: Starting Servlet Engine: Apache Tomcat/6.0.18 [WARNING] [talledLocalContainer] 25-feb-2009 16:40:05 org.apache.catalina.loader.WebappClassLoader validateJarFile [WARNING] [talledLocalContainer] INFO: validateJarFile(C:\Users\Victor\AppData\Local\Temp\cargo\conf\webapps\icefacesLibrary\WEB-INF\lib\selenium-server-1.0-SNAPSHOT.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class [WARNING] [talledLocalContainer] 25-feb-2009 16:40:05 org.apache.catalina.loader.WebappClassLoader validateJarFile [WARNING] [talledLocalContainer] INFO: validateJarFile(C:\Users\Victor\AppData\Local\Temp\cargo\conf\webapps\icefacesLibrary\WEB-INF\lib\servlet-api-2.5.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class [WARNING] [talledLocalContainer] 25-feb-2009 16:40:06 com.sun.faces.config.ConfigureListener contextInitialized [WARNING] [talledLocalContainer] INFO: Initializing Sun's JavaServer Faces implementation (1.2_07-b03-FCS) for context '/icefacesLibrary' [INFO] [talledLocalContainer] log4j:WARN No appenders could be found for logger (com.icesoft.faces.application.D2DViewHandler). [INFO] [talledLocalContainer] log4j:WARN Please initialize the log4j system properly. [WARNING] [talledLocalContainer] 25-feb-2009 16:40:07 org.apache.catalina.core.ApplicationContext log [WARNING] [talledLocalContainer] INFO: Initializing Spring root WebApplicationContext [WARNING] [talledLocalContainer] 25-feb-2009 16:40:09 org.apache.catalina.startup.HostConfig deployWAR [WARNING] [talledLocalContainer] INFO: Despliegue del archivo cargocpc.war de la aplicaci´+¢n web [WARNING] [talledLocalContainer] 25-feb-2009 16:40:09 org.apache.coyote.http11.Http11Protocol start [WARNING] [talledLocalContainer] INFO: Arrancando Coyote HTTP/1.1 en puerto http-8080 [WARNING] [talledLocalContainer] 25-feb-2009 16:40:09 org.apache.jk.common.ChannelSocket init [WARNING] [talledLocalContainer] INFO: JK: ajp13 listening on /0.0.0.0:8009 [WARNING] [talledLocalContainer] 25-feb-2009 16:40:09 org.apache.jk.server.JkMain start [WARNING] [talledLocalContainer] INFO: Jk running ID=0 time=0/110 config=null [WARNING] [talledLocalContainer] 25-feb-2009 16:40:09 org.apache.catalina.startup.Catalina start [WARNING] [talledLocalContainer] INFO: Server startup in 5548 ms [INFO] [talledLocalContainer] Tomcat 6.x started on port [8080] [INFO] [surefire:test {execution: it-test}] [INFO] Surefire report directory: C:\workspaceCurso\icefacesLibrary\target\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running ListaCategoriasTestIt 16:40:17,932 INFO [org.mortbay.util.Credential] Checking Resource aliases 16:40:17,938 INFO [org.openqa.selenium.server.SeleniumDriverResourceHandler] Command request: getNewBrowserSession[*firefox, http://localhost:8080/icefacesLibrary/pages/home.jsf, ] on session null 16:40:17,939 INFO [org.openqa.selenium.server.BrowserSessionFactory] creating new remote session 16:40:18,141 INFO [org.openqa.selenium.server.BrowserSessionFactory] Allocated session 8157ea93a4bb47f9bdabaab3e655e410 for http://localhost:8080/icefacesLibrary/pages/home.jsf, launching... 16:40:18,142 WARN [org.openqa.selenium.server.browserlaunchers.LauncherUtils] It looks like your baseUrl (http://localhost:8080/icefacesLibrary/pages/home.jsf) is pointing to a file, not a directory (it doesn't end with a /). We're going to have to strip off the last part of the pathname. 16:40:18,517 INFO [org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher] Preparing Firefox profile... 16:40:21,817 INFO [org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher] Launching Firefox... 16:40:26,768 INFO [org.openqa.selenium.server.SeleniumDriverResourceHandler] Got result: OK,8157ea93a4bb47f9bdabaab3e655e410 on session 8157ea93a4bb47f9bdabaab3e655e410 16:40:26,774 INFO [org.openqa.selenium.server.SeleniumDriverResourceHandler] Command request: open[http://localhost:8080/icefacesLibrary/pages/home.jsf, ] on session 8157ea93a4bb47f9bdabaab3e655e410 16:40:29,150 INFO [org.openqa.selenium.server.SeleniumDriverResourceHandler] Got result: OK on session 8157ea93a4bb47f9bdabaab3e655e410 16:40:29,157 INFO [org.openqa.selenium.server.SeleniumDriverResourceHandler] Command request: getTitle[, ] on session 8157ea93a4bb47f9bdabaab3e655e410 16:40:29,171 INFO [org.openqa.selenium.server.SeleniumDriverResourceHandler] Got result: OK,Biblioteca v.1.2 -Inicio on session 8157ea93a4bb47f9bdabaab3e655e410 16:40:29,174 INFO [org.openqa.selenium.server.SeleniumDriverResourceHandler] Command request: click[fmenu:j_id15:nav2:nav22:link, ] on session 8157ea93a4bb47f9bdabaab3e655e410 16:40:29,193 INFO [org.openqa.selenium.server.SeleniumDriverResourceHandler] Got result: OK on session 8157ea93a4bb47f9bdabaab3e655e410 16:40:29,199 INFO [org.openqa.selenium.server.SeleniumDriverResourceHandler] Command request: testComplete[, ] on session 8157ea93a4bb47f9bdabaab3e655e410 16:40:29,199 INFO [org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher] Killing Firefox... 16:40:29,446 INFO [org.openqa.selenium.server.SeleniumDriverResourceHandler] Got result: OK on session 8157ea93a4bb47f9bdabaab3e655e410 Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 11.607 sec Results : [INFO] [talledLocalContainer] Hibernate: select categoria0_.id as id1_, categoria0_.nombre as nombre1_ from Categoria categoria0_ order by categoria0_.id asc Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [cargo:stop {execution: stop-container}] [INFO] [talledLocalContainer] Tomcat 6.x is stopping... [INFO] [talledLocalContainer] Hibernate: select categoria0_.id as id1_, categoria0_.nombre as nombre1_ from Categoria categoria0_ order by categoria0_.id asc [INFO] [talledLocalContainer] Hibernate: select categoria0_.id as id1_, categoria0_.nombre as nombre1_ from Categoria categoria0_ order by categoria0_.id asc [INFO] [talledLocalContainer] Hibernate: select categoria0_.id as id1_, categoria0_.nombre as nombre1_ from Categoria categoria0_ order by categoria0_.id asc [INFO] [talledLocalContainer] Hibernate: select categoria0_.id as id1_, categoria0_.nombre as nombre1_ from Categoria categoria0_ order by categoria0_.id asc [INFO] [talledLocalContainer] Hibernate: select categoria0_.id as id1_, categoria0_.nombre as nombre1_ from Categoria categoria0_ order by categoria0_.id asc [INFO] [talledLocalContainer] Hibernate: select categoria0_.id as id1_, categoria0_.nombre as nombre1_ from Categoria categoria0_ order by categoria0_.id asc [INFO] [talledLocalContainer] Hibernate: select categoria0_.id as id1_, categoria0_.nombre as nombre1_ from Categoria categoria0_ order by categoria0_.id asc [INFO] [talledLocalContainer] Hibernate: select categoria0_.id as id1_, categoria0_.nombre as nombre1_ from Categoria categoria0_ order by categoria0_.id asc [INFO] [talledLocalContainer] Hibernate: select categoria0_.id as id1_, categoria0_.nombre as nombre1_ from Categoria categoria0_ order by categoria0_.id asc [INFO] [talledLocalContainer] Hibernate: select categoria0_.id as id1_, categoria0_.nombre as nombre1_ from Categoria categoria0_ order by categoria0_.id asc [INFO] [talledLocalContainer] Hibernate: select categoria0_.id as id1_, categoria0_.nombre as nombre1_ from Categoria categoria0_ order by categoria0_.id asc [INFO] [talledLocalContainer] Hibernate: select categoria0_.id as id1_, categoria0_.nombre as nombre1_ from Categoria categoria0_ order by categoria0_.id asc [WARNING] [talledLocalContainer] 25-feb-2009 16:40:29 org.apache.coyote.http11.Http11Protocol pause [WARNING] [talledLocalContainer] 25-feb-2009 16:40:29 org.apache.coyote.http11.Http11Protocol pause [WARNING] [talledLocalContainer] INFO: Pausing Coyote HTTP/1.1 on http-8080 [WARNING] [talledLocalContainer] INFO: Pausing Coyote HTTP/1.1 on http-8080 [WARNING] [talledLocalContainer] 25-feb-2009 16:40:30 org.apache.catalina.core.StandardService stop [WARNING] [talledLocalContainer] 25-feb-2009 16:40:30 org.apache.catalina.core.StandardService stop [WARNING] [talledLocalContainer] INFO: Parando servicio Catalina [WARNING] [talledLocalContainer] INFO: Parando servicio Catalina [WARNING] [talledLocalContainer] 25-feb-2009 16:40:30 org.apache.catalina.core.ApplicationContext log [WARNING] [talledLocalContainer] 25-feb-2009 16:40:30 org.apache.catalina.core.ApplicationContext log [WARNING] [talledLocalContainer] INFO: Closing Spring root WebApplicationContext [WARNING] [talledLocalContainer] INFO: Closing Spring root WebApplicationContext [WARNING] [talledLocalContainer] 25-feb-2009 16:40:31 org.apache.coyote.http11.Http11Protocol destroy [WARNING] [talledLocalContainer] 25-feb-2009 16:40:31 org.apache.coyote.http11.Http11Protocol destroy [WARNING] [talledLocalContainer] INFO: Stopping Coyote HTTP/1.1 on http-8080 [WARNING] [talledLocalContainer] INFO: Stopping Coyote HTTP/1.1 on http-8080 [INFO] [talledLocalContainer] Tomcat 6.x is stopped [INFO] [install:install] [INFO] Installing C:\workspaceCurso\icefacesLibrary\target\icefacesLibrary.war to C:\Users\Victor\.m2\repository\com\autentia\jsf\icefacesLibrary\1.0-SNAPSHOT\icefacesLibrary-1.0-SNAPSHOT.war [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1 minute 25 seconds [INFO] Finished at: Wed Feb 25 16:40:35 CET 2009 [INFO] Final Memory: 19M/34M [INFO] ------------------------------------------------------------------------ C:\workspaceCurso\icefacesLibrary>
7. Conclusiones.
Como habéis podido comprobar, toda esta integración parece muy complicada si uno desconoce cada uno de los elementos que lo forman,pero no es tanto
si uno sabe lo que hace cada elemento.Espero haberos podido aclarar muchas de las dudas que os pudieran surgir.
Al final, el objetivo de toda esta integración es evitar regresiones en el software con el que estamos trabajando, tratando de automatizar al máximo
para no volver a perder tiempo en realizar todas y cada una de las pruebas (manuales) necesarias para comprobar que no se ha producido ningún defecto,
lo que nos permite comprobar y asegurar nuestra calidad.
¿Qué mas se puede pedir? 😉
Un saludo.
Víctor