Olá galera!
Vou começar a demonstrar neste post uma maneira de desenvolver um projeto de teste multimodulo utilizando a ferramenta de gerenciamento de projeto Maven. Normalmente observamos os projetos de desenvolvimento utilizarem módulos para dividirem as responsabilidades da aplicação, como: backend, frontend e aplicação em si, isto facilita muito a organização, manutenção e reaproveitamento de código entre outras vantagens. A ideia de utilizar uma estrutura similar para um projeto de teste não foge muito deste intuito, afinal ninguém quer ficar reinventando a roda a cada projeto novo.
O intuito de utilizar esta abordagem foi decorrente do seguinte problema:
Havia um projeto que desenvolvia várias aplicações, sendo que existe uma base ou (core) para o desenvolvimento de todas as outras aplicações, ou seja, havia uma reutilização para cada aplicação filha, variando apenas as necessidades específicas de cada app. Logo, teoricamente, deveria ser feito um projeto de teste para cada aplicação e todo o código implementado para automatizar a base ou (core) seria replicado em cada projeto de teste, então, eis que tive a ideia de modularizar o projeto de teste para cada aplicação.
Estrutura Projeto de Teste Multimodulo
Como já havia citado acima sobre a estrutura do projeto de desenvolvimento, as responsabilidades são separadas por módulo, para o projeto de teste ficou separado em 3 módulos, conforme a imagem abaixo. Para conferir o projeto implementado acesse https://github.com/Vanilton18/project-test-multimodule-maven.
A primeira observação que destaco são os 2 módulos clientes na imagem acima, caso houvesse a necessidade de inclusão de outro cliente bastaria inserir um novo módulo, nestes módulos estariam todas as implementações específicas de cada aplicação por cliente. Também é importante saber que estes módulos são dependentes do módulo core, pois neste, estará a implementação de tudo que é comum entre todos as aplicações de todos clientes.
Por fim, o projeto com nome project-test-multimodule-maven possuirá todas as dependências e suas versões e também quais são seus módulos filhos, abaixo o POM.xml deste projeto exemplo.
Para os módulos clientes e core existirá um POM.xml com as suas dependências, lembrando que não é necessário definir a versão, pois esta estará contida no projeto pai, abaixo podemos observar um pom de um módulo cliente.
Como já citado, existe uma dependência para o módulo core do tipo test-jar, é importante observar este tipo, pois todo o código do módulo core encontra-se no pacote de teste, e no projeto pai existe um plugin chamado maven-jar-plugin com o seguinte conteúdo:
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
isto irá gerar no build do maven a dependência que será utilizada pelos módulos clientes.
OBS: O Maven não gera nativamente a dependência do código no pacote de teste.
Após importar o projeto, basta selecionar o projeto pai e executar Maven install, como na figura abaixo por meio da IDE Eclipse.
OBS: Os testes estão sendo executados no Chrome, logo é necessário configurar o ChromeDriver no path do sistema operacional, para mais informações acesse o link.
Após a execução dos testes, será exibido o sumário do maven conforme imagem abaixo:
Então é isso galera, encerro aqui o post e espero que a estrutura do projeto multimodulo para testes seja útil para vocês, lembrando que pode ser feito outras coisas inclusive adicionar o projeto em uma ferramenta de Integração Contínua como o Jenkins, para quem tiver interesse em realizar isto existe um exemplo bem bacana feito pelo @Rafael que pode ser visto no link.
Até mais!