[MJ 46] - Qualidade Através de Testes Funcionais com Selenium, JBehave, Maven e CI

Bom dia pessoal

Estou abrindo este tópico para discussão do artigo Qualidade Através de Testes Funcionais com Selenium, JBehave, Maven e Integração contínua.

Qualquer dúvida, comentário ou feedback é bem vindo.

abraços

Oi,

Já tenho a revista, porém não consegui ler esse artigo ainda.

Tenho uma pergunta, o Selenium é especialmente e exclusivamente utilizado para testes de aplicações Web ?

Tchauzin!

Olá,

Sim o Selenium é exclusivamente para teste de aplicações web…

Atualmente estou trabalhando em um projeto swing e estou utilizando o FEST para testes funcionais… se interessar segue a URL: http://docs.codehaus.org/display/FEST/Getting+Started

[]s

Eu tenho a revista mas ainda não li o artigo com a devida atenção.

De qualquer forma, senti falta da explicação sobre o Cargo.

Está lá e eu não vi?

Desculpe pela demora para responder…

Não colocamos no artigo o código da configuração do cargo para não poluir o artigo com muita configuração, apenas explicamos o que ele é capaz de fazer…
De qualquer forma, é possível verificar a configuração completa fazendo o download do código fonte do projeto de exemplo no site da mundoJ

http://www.mundoj.com.br/codigos.shtml

[]s

[quote=Ferryman]Desculpe pela demora para responder…

Não colocamos no artigo o código da configuração do cargo para não poluir o artigo com muita configuração, apenas explicamos o que ele é capaz de fazer…
De qualquer forma, é possível verificar a configuração completa fazendo o download do código fonte do projeto de exemplo no site da mundoJ

http://www.mundoj.com.br/codigos.shtml

[]s

[/quote]

Prezado Rafael,
Li o artigo e gostei muito! Porém, o código disponibilizado está incompleto (Ex: TesteFuncional.java não existe).
Você poderia disponibilizar o código completo?
att.,
Leonardo

Olá Leonardo, que bom que você gostou.

Acabei de baixar o código fonte do site para ver se tinha algo errado. A classe teste funcional está lá, dentro da pasta
[raiz do zip]/testes-funcionais/src/test/java/br/com/mundoj/exemplo/teste/

Para facilitar, faça o unzip em um diretório do seu pc, e nessa pasta execute o comando “mvn eclipse:clean eclipse:eclipse”. Este comando irá gerar o projeto do eclipse (é necessário ter o maven instalado). Depois disso é só importar o projeto no eclipse.

Abraços

Rafael

Olá Ferryman,

Devido a tanta correria somente agora pude ler as minhas revistas antigas e acabei encontrando este artigo que é de grande interesse meu.
Porém tive vários problemas pra conseguir fazê-lo funcionar. Parte dos problemas eram devido a mudança dos repositórios da JBoss.

No arquivo pom.xml que fica na raiz do zip eu removi as linhas:

<repository>
			<id>repository.jboss.org</id>
			<name>JBoss Maven Repository</name>
			<url>http://repository.jboss.org/maven2</url>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
			<releases>
				<enabled>true</enabled>
</releases>
		</repository>

E acrescentei as seguintes:

<repository>
            <id>repository.jboss.org</id>
            <name>JBoss Maven Repository</name>
            <url>http://repository.jboss.org/nexus/content/groups/public-jboss/</url>            
        </repository>
        
        <repository>
            <id>thirdparty-releases</id>
            <name>JBoss Thirdparty Releases</name>
            <url>https://repository.jboss.org/nexus/content/repositories/thirdparty-releases</url>
        </repository>

Fazendo essas alterações o Maven finalmente baixou todas as dependências, porém quando entrei no diretório TestesFuncionais e digitei o comando mvn clean install -Dtestes-funcionais o terminal pára nas seguintes instruções:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running br.com.mundoj.exemplo.usuario.CadastroDeUsuariosTesteFuncional
11:18:48,198 INFO  [org.openqa.jetty.util.Credential] Checking Resource aliases
11:18:48,203 INFO  [org.openqa.selenium.server.SeleniumDriverResourceHandler] Command request: getNewBrowserSession[*firefox, http://localhost:8080/web-1.0-SNAPSHOT/, ] on session null
11:18:48,287 INFO  [org.openqa.selenium.server.BrowserSessionFactory] creating new remote session
11:18:48,399 INFO  [org.openqa.selenium.server.BrowserSessionFactory] Allocated session de2f5be42165434387864195a1d702c4 for http://localhost:8080/web-1.0-SNAPSHOT/, launching...
11:18:48,449 INFO  [org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher] Preparing Firefox profile...
11:18:51,416 INFO  [org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher] Launching Firefox...

O firefox abre automaticamente, mas a página permanece em branco. Não aparece nenhum endereço na url.
Eu abri uma outra aba do firefox e acessei http://localhost:8080/web-1.0-SNAPSHOT/ e o sistema funciona. Cadastrei um usuário e etc, tudo funciona direito.
Mas a página aberta automaticamente permanece em branco e os testes não são executados.

O que está acontecendo? Desde já agradeço quem puder me ajudar.

Olá Sandro

Eu acabei de baixar o código do site da mundoJ e executei o target mvn clean install -Dtestes-funcionais e rodou com sucesso…

Você seguiu as instruções do arquivo LEIA-ME.txt?

Para te ajudar preciso de mais detalhes… Manda a stacktrace completa do processo maven e verique também se ocorreu alguma excessão nos logs do jboss que está sendo utilizado pelo cargo.

Abraço

Ferryman,

Segue a stacktrace completa:

sandro@PCN01:~/Downloads/TestesFuncionais$ mvn clean install -Dtestes-funcionais
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] MundoJ - Exemplo
[INFO] WEB
[INFO] Testes Funcionais Automatizados
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building MundoJ - Exemplo 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ exemplo-parent ---
[INFO] 
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ exemplo-parent ---
[INFO] Installing /home/sandro/Downloads/TestesFuncionais/pom.xml to /home/sandro/.m2/repository/br/com/mundoj/exemplo/exemplo-parent/1.0-SNAPSHOT/exemplo-parent-1.0-SNAPSHOT.pom
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building WEB 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ web ---
[INFO] 
[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ web ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ web ---
[INFO] Compiling 4 source files to /home/sandro/Downloads/TestesFuncionais/web/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.4.3:testResources (default-testResources) @ web ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/sandro/Downloads/TestesFuncionais/web/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ web ---
[INFO] No sources to compile
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default) @ web ---
[INFO] No sources to compile
[INFO] 
[INFO] --- maven-surefire-plugin:2.4.3:test (default-test) @ web ---
[INFO] No tests to run.
[INFO] 
[INFO] --- maven-war-plugin:2.1.1:war (default-war) @ web ---
[INFO] Packaging webapp
[INFO] Assembling webapp [web] in [/home/sandro/Downloads/TestesFuncionais/web/target/web-1.0-SNAPSHOT]
[INFO] Processing war project
[INFO] Copying webapp webResources [/home/sandro/Downloads/TestesFuncionais/web/src/main/webapp] to [/home/sandro/Downloads/TestesFuncionais/web/target/web-1.0-SNAPSHOT]
[INFO] Copying webapp resources [/home/sandro/Downloads/TestesFuncionais/web/src/main/webapp]
[INFO] Webapp assembled in [390 msecs]
[INFO] Building war: /home/sandro/Downloads/TestesFuncionais/web/target/web-1.0-SNAPSHOT.war
[INFO] WEB-INF/web.xml already added, skipping
[INFO] 
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ web ---
[INFO] Installing /home/sandro/Downloads/TestesFuncionais/web/target/web-1.0-SNAPSHOT.war to /home/sandro/.m2/repository/br/com/mundoj/exemplo/web/1.0-SNAPSHOT/web-1.0-SNAPSHOT.war
[INFO] Installing /home/sandro/Downloads/TestesFuncionais/web/pom.xml to /home/sandro/.m2/repository/br/com/mundoj/exemplo/web/1.0-SNAPSHOT/web-1.0-SNAPSHOT.pom
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Testes Funcionais Automatizados 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ testes-funcionais ---
[INFO] Deleting /home/sandro/Downloads/TestesFuncionais/testes-funcionais/target
[INFO] 
[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ testes-funcionais ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ testes-funcionais ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.4.3:testResources (default-testResources) @ testes-funcionais ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ testes-funcionais ---
[INFO] Compiling 8 source files to /home/sandro/Downloads/TestesFuncionais/testes-funcionais/target/test-classes
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default) @ testes-funcionais ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.4.3:test (default-test) @ testes-funcionais ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ testes-funcionais ---
[INFO] Building jar: /home/sandro/Downloads/TestesFuncionais/testes-funcionais/target/testes-funcionais-1.0-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-jar-plugin:2.3.1:test-jar (default) @ testes-funcionais ---
[INFO] Building jar: /home/sandro/Downloads/TestesFuncionais/testes-funcionais/target/testes-funcionais-1.0-SNAPSHOT-tests.jar
[INFO] 
[INFO] --- selenium-maven-plugin:1.0.1:start-server (start-selenium) @ testes-funcionais ---
Created dir: /home/sandro/Downloads/TestesFuncionais/testes-funcionais/target/selenium
Launching Selenium Server
Waiting for Selenium Server...
[INFO] User extensions: /home/sandro/Downloads/TestesFuncionais/testes-funcionais/target/selenium/user-extensions.js
13:38:00,384 INFO  [org.openqa.selenium.server.SeleniumServer] Java: Sun Microsystems Inc. 20.1-b02
13:38:00,384 INFO  [org.openqa.selenium.server.SeleniumServer] OS: Linux 2.6.38-12-generic-pae i386
13:38:00,452 INFO  [org.openqa.selenium.server.SeleniumServer] v2.0 [a2], with Core v2.0 [a2]
13:38:00,617 INFO  [org.openqa.selenium.server.SeleniumServer] RemoteWebDriver instances should connect to: http://192.168.0.102:8888/wd/hub
13:38:00,618 INFO  [org.openqa.jetty.http.HttpServer] Version Jetty/5.1.x
13:38:00,618 INFO  [org.openqa.jetty.util.Container] Started HttpContext[/selenium-server/driver,/selenium-server/driver]
13:38:00,619 INFO  [org.openqa.jetty.util.Container] Started HttpContext[/selenium-server,/selenium-server]
13:38:00,619 INFO  [org.openqa.jetty.util.Container] Started HttpContext[/,/]
13:38:00,634 INFO  [org.openqa.jetty.util.Container] Started org.openqa.jetty.jetty.servlet.ServletHandler@2ba11b
13:38:00,634 INFO  [org.openqa.jetty.util.Container] Started HttpContext[/wd,/wd]
13:38:00,637 INFO  [org.openqa.jetty.http.SocketListener] Started SocketListener on 0.0.0.0:8888
13:38:00,637 INFO  [org.openqa.jetty.util.Container] Started org.openqa.jetty.jetty.Server@ef5502
13:38:01,719 INFO  [org.openqa.jetty.util.Credential] Checking Resource aliases
Selenium Server started
[INFO] 
[INFO] --- cargo-maven2-plugin:1.0.3:start (start-container) @ testes-funcionais ---
[INFO] 
[INFO] --- cargo-maven2-plugin:1.0.3:deploy (deploy-ear) @ testes-funcionais ---
[INFO] 
[INFO] --- maven-surefire-plugin:2.4.3:test (default) @ testes-funcionais ---
[INFO] Surefire report directory: /home/sandro/Downloads/TestesFuncionais/testes-funcionais/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running br.com.mundoj.exemplo.usuario.CadastroDeUsuariosTesteFuncional
13:38:36,584 INFO  [org.openqa.jetty.util.Credential] Checking Resource aliases
13:38:36,590 INFO  [org.openqa.selenium.server.SeleniumDriverResourceHandler] Command request: getNewBrowserSession[*firefox, http://localhost:8080/web-1.0-SNAPSHOT/, ] on session null
13:38:36,604 INFO  [org.openqa.selenium.server.BrowserSessionFactory] creating new remote session
13:38:36,782 INFO  [org.openqa.selenium.server.BrowserSessionFactory] Allocated session 492a504c8a2a4097aa318a5f70dc91a9 for http://localhost:8080/web-1.0-SNAPSHOT/, launching...
13:38:36,832 INFO  [org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher] Preparing Firefox profile...
13:38:40,774 INFO  [org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher] Launching Firefox...
14:08:42,344 ERROR [org.openqa.selenium.server.BrowserSessionFactory] Failed to start new browser session, shutdown browser and clear all session data
org.openqa.selenium.server.RemoteCommandException: timed out waiting for window 'null' to appear
	at org.openqa.selenium.server.FrameGroupCommandQueueSet.waitForLoad(FrameGroupCommandQueueSet.java:569)
	at org.openqa.selenium.server.FrameGroupCommandQueueSet.waitForLoad(FrameGroupCommandQueueSet.java:526)
	at org.openqa.selenium.server.BrowserSessionFactory.createNewRemoteSession(BrowserSessionFactory.java:373)
	at org.openqa.selenium.server.BrowserSessionFactory.getNewBrowserSession(BrowserSessionFactory.java:124)
	at org.openqa.selenium.server.BrowserSessionFactory.getNewBrowserSession(BrowserSessionFactory.java:86)
	at org.openqa.selenium.server.SeleniumDriverResourceHandler.getNewBrowserSession(SeleniumDriverResourceHandler.java:733)
	at org.openqa.selenium.server.SeleniumDriverResourceHandler.doCommand(SeleniumDriverResourceHandler.java:399)
	at org.openqa.selenium.server.SeleniumDriverResourceHandler.handleCommandRequest(SeleniumDriverResourceHandler.java:370)
	at org.openqa.selenium.server.SeleniumDriverResourceHandler.handle(SeleniumDriverResourceHandler.java:129)
	at org.openqa.jetty.http.HttpContext.handle(HttpContext.java:1530)
	at org.openqa.jetty.http.HttpContext.handle(HttpContext.java:1482)
	at org.openqa.jetty.http.HttpServer.service(HttpServer.java:909)
	at org.openqa.jetty.http.HttpConnection.service(HttpConnection.java:820)
	at org.openqa.jetty.http.HttpConnection.handleNext(HttpConnection.java:986)
	at org.openqa.jetty.http.HttpConnection.handle(HttpConnection.java:837)
	at org.openqa.jetty.http.SocketListener.handleConnection(SocketListener.java:245)
	at org.openqa.jetty.util.ThreadedServer.handle(ThreadedServer.java:357)
	at org.openqa.jetty.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
14:08:42,347 INFO  [org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher] Killing Firefox...
14:08:42,394 INFO  [org.openqa.selenium.server.SeleniumDriverResourceHandler] Got result: Failed to start new browser session: Error while launching browser on session null
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 1,805.911 sec <<< FAILURE!

Results :

Tests in error: 
  run(br.com.mundoj.exemplo.usuario.CadastroDeUsuariosTesteFuncional)

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] MundoJ - Exemplo .................................. SUCCESS [1.463s]
[INFO] WEB ............................................... SUCCESS [6.210s]
[INFO] Testes Funcionais Automatizados ................... FAILURE [30:49.077s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 30:57.116s
[INFO] Finished at: Thu Nov 10 14:08:42 BRT 2011
[INFO] Final Memory: 16M/68M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.4.3:test (default) on project testes-funcionais: There are test failures.
[ERROR] 
[ERROR] Please refer to /home/sandro/Downloads/TestesFuncionais/testes-funcionais/target/surefire-reports for the individual test results.
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :testes-funcionais
sandro@PCN01:~/Downloads/TestesFuncionais$ 

Eu segui todas as intruções do LEIA-ME.txt. O JBoss está instalado em /home/sandro/jboss-5.1.0.GA.
A única diferença é que uso o Maven 3.0.3, e não o 2.2.X. Talvez seja por isso que precisei fazer as mudanças no pom.xml que fica na raiz do zip.
Também esqueci de falar que tive que acrescentar a versão (2.1.1) para o plugin maven-war-plugin no arquivo pom.xml do diretório web.
Ficando o código assim:

<plugin>

				<groupId>org.apache.maven.plugins</groupId>

				<artifactId>maven-war-plugin</artifactId>

				<version>2.1.1</version>



				<configuration>

					<webResources>

						<resource>

							<!-- this is relative to the pom.xml directory -->

							<directory>src/main/webapp</directory>



							<filtering>true</filtering>



							<includes>

								<include>**/components.xml</include>

								<include>**/web.xml</include>

							</includes>

						</resource>

					</webResources>

				</configuration>

			</plugin>

Estou rodando o projeto no Ubuntu 11.04 e Firefox 7.0.1.
O Firefox estava fechado antes de executar o target.
Agradeço mais uma vez pela ajuda.

Parece que você está com problema pra fazer o selenium conseguir manipular o firefox… Eu já tive esse problema algumas vezes e é difícil identificar a causa…

Tente fazer o teste com o google chrome. Pra isso altere a classe TesteFuncional, modificando o seguinte codigo:

selenium = new DefaultSelenium(“localhost”, 8888, “*firefox”,
http://localhost:8080/web-1.0-SNAPSHOT/”);

Substitua o “*firefox” por “*googlechrome”.

[]s

Substituindo por “*googlechrome” funcionou !!!

Thank you very much!!!

P.S.: Sem querer encher muito o saco, o que pode estar havendo com o Firefox ?! :oops:

O problema do firefox pode ser a versão… acho que o selenium rc funciona só com a versão 2 do firefox.

[]s