FrameworkDemoiselle.gov.brCommunity Documentation
Neste capítulo será apresentada a funcionalidade que permite a comparação de layout entre navegadores diferentes a partir de histórias desenvolvidas em projetos do dbehave.
Esta funcionalidade está disponível a partir da versão 1.5.0 do dbehave.
A ideia principal da funcionalidade é permitir a equipe do projeto ter uma visibilidade, por meio de imagens e números, das diferenças de design entre os diversos navegadores que são, ou serão, suportados pelo sistema.
O processo de navegação no sistema deve ser feito por meio das histórias do dbehave, que em alguns casos já existem, e a partir de imagens capturadas durante o processo seja gerado um relatório ao final do teste, comparando os navegadores selecionados com um que deve ser o navegador de referência.
Para que o teste de regressão de layout funcione corretamente são necessárias algumas tecnologias durante o processo, seguem elas.
É necessário ter o Java (JDK) instalado para que o processo funcione, normalmente as máquinas que já rodam o dbehave já possuem a versão necessária. Para verificar se a JDK está instalada corretamente rode o seguinte comando:
java -version
A saída do console deverá ser parecida com esta:
java version "1.6.0_35" OpenJDK Runtime Environment (IcedTea6 1.13.7) (6b35-1.13.7-1ubuntu0.12.04.2) OpenJDK Server VM (build 23.25-b01, mixed mode)
Para que o processo de comparação dos layouts funcione corretamente é necessário que a biclioteca Image Magick (http://www.imagemagick.org) seja instalada. A instalação desta biblioteca em muitas distribuições Linux, como a Ubuntu 12.04, pode ser feita através do seguinte comando:
sudo apt-get install imagemagick
Após a instalação acesse o Promp/Terminar do computador que irá rodar os testes e rode o seguinte comando:
compare --version
E o resultado deverá ser algo como o seguinte texto:
Version: ImageMagick 6.9.0-0 Q16 i686 2014-11-24 http://www.imagemagick.org Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC Features: DPC OpenMP Delegates (built-in): png x zlib
O teste de regressão tem como pré requisito inicial um projeto dbehave já criado, caso ainda não tenha criado um basta seguir o Roteiro Rápido do manual do dbehave.
Para que o teste rode corretamente é necessário que a máquina tenha instalado o Maven, para saber se ele esta funcionando corretamente rode o seguinte comando no prompt/terminal:
mvn --version
A saída do console deverá ser algo parecido com o seguinte:
Apache Maven 2.2.1 (rdebian-8) Java version: 1.6.0_33 Java home: /usr/lib/jvm/java-6-serpro-1.6.0.33/jre Default locale: pt_BR, platform encoding: UTF-8 OS name: "linux" version: "3.2.0-58-generic-pae" arch: "i386" Family: "unix"
Esta sessão descreve como o projeto dbehave deve ser configurado para que o teste de regressão rode.
Esta funcionalidade possui basicamente 2 inclusões no pom.xml:
Para adicionar os passos personalizados basta adicionar uma nova dependência ao pom.xml na tag dependencies como segue abaixo:
<dependency> <groupId>br.gov.frameworkdemoiselle.component.behave</groupId> <artifactId>demoiselle-behave-regression-step</artifactId> <scope>test</scope> </dependency>
E a outra configuração é a inclusão do plugin maven dentro da tag build/plugins como abaixo:
<build> <plugins> <plugin> <groupId>br.gov.frameworkdemoiselle.component.behave</groupId> <artifactId>demoiselle-behave-regression-report</artifactId> <version>1.5.0</version> <executions> <execution> <phase>test</phase> <goals> <goal>regression</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
Para que as capturas de tela e relatório seja gerado são necessárias algumas configurações no behave.properties
Propriedade que ativa a funcionalidade de regressão no dbehave.
behave.regression.enabled=true
Propriedade utilizada pelo método RegressionConfig.getTypes() para fazer o laço de repetição da execução dos testes e geração do relatório. São os navegadores que serão utilizados.
behave.regression.types=linux1204_Firefox30,linux1204_Chrome33,windows7_IE9,windows7_Chrome35
Propriedade que define o navegador que será utilizado como referência para as comparações:
behave.regression.defaultType=linux1204_Firefox
Para cada navegador listado na propriedade behave.regression.types deverá existir um conjunto de propriedades que são definidas com o seguinte padrão:
behave.regression.NOME_DO_NAVEGADOR.runner.PROPRIEDADE
Utilize um nome legível e que determine o Sistema Operacional e Navegador e suas respectivas versões no NOME_DO_NAVEGADOR das propriedades, pois é este nome que será utilizado nos relatórios de comparação.
Abaixo estão as possíveis propriedades a serem usadas na configuração de cada navegador:
Exemplo de configuração de navegadores:
// Navegador Firefox na própria máquina behave.regression.linux1204_Firefox30.runner.screen.type=MozillaFirefox behave.regression.linux1204_Firefox30.runner.window.maximize.enabled=true // Navegador Chrome na própria máquina behave.regression.linux1204_Chrome33.runner.screen.type=GoogleChrome behave.regression.linux1204_Chrome33.runner.window.maximize.enabled=true behave.regression.linux1204_Chrome33.runner.screen.driverPath=//path//do//driver//chromedriver // Navegador Internet Explorer 9 em uma máquina remota behave.regression.windows7_IE9.runner.screen.type=RemoteWeb behave.regression.windows7_IE9.runner.window.maximize.enabled=true behave.regression.windows7_IE9.runner.screen.remote.name=internetExplorer behave.regression.windows7_IE9.runner.screen.remote.url=http://X.X.X.X:4444/wd/hub // Navegador Chrome em uma máquina remota behave.regression.windows7_Chrome35.runner.screen.type=RemoteWeb behave.regression.windows7_Chrome35.runner.window.maximize.enabled=true behave.regression.windows7_Chrome35.runner.screen.remote.name=chrome behave.regression.windows7_Chrome35.runner.screen.remote.url=http://X.X.X.X:4444/wd/hub
Para que as novas frases de captura funcionem é necessário adicionar os passos ao dbehave por meio do seguinte comando:
BehaveContext.getInstance().addSteps(new RegressionSteps());
Para que as telas sejam capturadas basta utilizar uma das seguinte frases:
Quando tiro um print screen Quando tiro um print screen com o nome "NOME DA CAPTURA QUE APARECERÁ NO RELATÓRIO"
Mostrar o comando maven e a saída do console e o relatório. O resultado final será criado na pasta /target/dbehave do seu projeto dbehave. É recomendado que sejam criados novos métodos JUnit com o seguinte código:
@Test // Anotação JUnit public void testRegressaoLayout() throws Throwable { // Laço de repetição para testar com todos os navagedores for (String browser : RegressionConfig.getTypes()) { RegressionConfig.setCurrentType(browser); // Seleciona o navegador atual eng.addStoriesReuse("/stories/XXXX.story"); // Histórias de reuso eng.addStories("/stories/XXXXX.story"); // Histórias que irão rodar eng.addSteps(new MySteps()); // Passos customizados eng.addSteps(new RegressionSteps()); // Passos de captura // Roda o teste para o navegador atual selecionado no setCurrentType eng.run(); } }
O relatório só será gerado se os testes funcionais passarem e quando for executado via maven (mvn package), pois o relatório é gerado por meio de um plugin.
O relatório final será criado na pasta /target/dbehave do seu projeto dbehave e possuirá as seguintes características.
Exemplo de Relatório de Teste de Regressão de Layout