Skip to content

Utilizando cucumber com selenium em seus projetos java

setembro 2, 2010

Algum tempo venho utilizando o cucumber para escrever meus testes de aceitação em projetos em ruby, especialmente em projetos rails. Acho que essa situação é um bom exemplo de mostrar que vocês devem mesmo aprender pelo menos uma linguagem pro ano. Em projetos java me sentir um pouco desconfortado em desenvolver meus testes apenas com o Selenium. Escrever as features e cenários diretamente em metodos e classes em java doia muito e textualmente me dava mais liberdade a criatividade e até mesmo melhor compreensão dos testes a serem executados. Então resolvi utilizar o projeto cuke4duke! Uma versão para rodar o cucumber em diversas linguagem em cima da JVM.

Em meus projetos utilizo o ant e junto com o Cucumber o Selenium. Basicamente irei explicar os passos básicos para rodar o cucumber + o selenium com uma build do ant em uma aplicação web.

Estrutura de arquivos do Projeto

Para executar o cucumber em nosso projetos vamos montar a estruutra de arquivos necessários para isso. Basicamente temos a seguinte estrutura:

temos o package main onde temos o codigo de produção, o package test com a parte onde irá conter as classes de teste. Temos também a pasta features onde ficará todos os testes de aceitação escritos , a pasta lib contendo bibliotecas necessárias para rodar o projeto, ex. ( jetty, jruby, cuke4duke, etc) . e o WebContent a parte dos recursos web da aplicação.

Criando as tasks do ANT

Abaixo mostrarei apenas as tasks referentes ao cucumber, o build completo pode ser encontrado no github.

<!-- instala as gems necessarias para rodar os testes de aceitacao pelo cucumber. -->
 <target name="-install-gems" depends="-define-paths" if="gems">
 <taskdef name="gem" classname="cuke4duke.ant.GemTask" classpathref="tests.classpath" />
 <gem args="install cuke4duke --version 0.3.2 --source http://gemcutter.org/" />
 </target>

<!-- executa os testes de aceitação  -->
<target name="acceptance-test" depends="compile,-install-gems, start-jettys" description="Run Cucumber">
<taskdef name="cucumber" classname="cuke4duke.ant.CucumberTask" classpathref="acceptance-test.classpath" />
<cucumber args="--require target/test-classes --color --format pretty -f junit --out target/junit-report features" objectFactory="spring">
<classpath>
<path refid="acceptance-test.classpath"/>
</classpath>
</cucumber>
</target>
a Task install-gems, instala as gems ( biblotecas em Ruby )  necessários para rodar o cucumber. Veja que ele só será executado se existir o argumento gems. Para isso, execute a task com argumentos: ant acceptance-test -Dgems=true.
Na target do acceptance-test em suas dependências temos o start-jettys. ele inicializa o container web levantando assim a aplicação web. necessária para que o selenium possa executar os passos dos testes.

@StepDefinitions

Em nosso projeto definimos que o cuke4duke deve procurar metódos em java que identificam o passos das features através do StepDefitnions:
Para isso criamos em src/test/resources o arquivo cucumber.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="com.couggi.integration">
<context:include-filter type="annotation" expression="cuke4duke.spring.StepDefinitions"/>
</context:component-scan>
</beans>
Definimos que ele deve procurar classes anotadas no diretório: com.couggi.integration.

Criando uma Feature Exemplo

Na task do ant definimos que todas as features devem está na pasta features/ do nosso projeto. Criaremos então um arquivo de nome: login.feature ( Ignore a dúvida se essa é uma boa feature/cenário )

Feature: Login

Scenario: Logando em meu site
Given Eu esteja na pagina de login da aplicacao
When eu tento logar com o login “verto” e senha “123”
Then devera apresentar a pagina incial como logado

Para gerar os metodos necessários para executar os passos acima execute a task do acceptance-test e o cucumber irá apresentar para você os metodos necessários para que o teste funcione.

Para o cuke4duke identificar os metódos que serão executados ele utiliza Anotações:

@StepDefinitions para anota as classes nos quais contém os metódos.
@Given @Then @When , identifica os metodos referente aos passos de suas features.

No exemplo acima, criei a classe: LoginSteps com o conteúdo: http://github.com/vertocardoso/java-cucumber/blob/master/src/test/integration/com/couggi/integration/LoginSteps.java

Através desse exemplo, conseguimos integrar os nossos projetos com testes de aceitação utilizando o cucumber, criando assim um documento no qual seja mais descritivo para todos e totalmente executável.  Para maiores informações acesse o site do projeto: http://cukes.info/ . O projeto explicado acima está no meu github: http://github.com/vertocardoso/java-cucumber

From → Java, Ruby

One Comment

Trackbacks & Pingbacks

  1. BDD – Behavior Driven Development | Jorge Kotick Audy

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s