{"id":161,"date":"2016-04-18T23:07:40","date_gmt":"2016-04-19T03:07:40","guid":{"rendered":"http:\/\/vanilton.net\/blog\/?p=161"},"modified":"2016-04-18T23:37:20","modified_gmt":"2016-04-19T03:37:20","slug":"criando-um-projeto-de-teste-multimodulo-com-maven-utilizando-testng-e-seleniumwebdriver","status":"publish","type":"post","link":"https:\/\/www.vanilton.net\/blog\/automacao\/2016\/04\/18\/criando-um-projeto-de-teste-multimodulo-com-maven-utilizando-testng-e-seleniumwebdriver\/","title":{"rendered":"Criando um Projeto de Teste Multimodulo com Maven utilizando TestNG e SeleniumWebDriver"},"content":{"rendered":"<p style=\"text-align: justify;\">Ol\u00e1 galera!<\/p>\n<p style=\"text-align: justify;\">Vou come\u00e7ar 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\u00f3dulos para dividirem as responsabilidades da aplica\u00e7\u00e3o, como:\u00a0<em>backend<\/em>, <em>frontend<\/em> e aplica\u00e7\u00e3o em si, isto facilita muito a organiza\u00e7\u00e3o, manuten\u00e7\u00e3o e reaproveitamento de c\u00f3digo entre outras\u00a0vantagens. A ideia de utilizar uma estrutura similar para um projeto de teste n\u00e3o foge muito deste intuito, afinal ningu\u00e9m quer ficar reinventando a roda a cada projeto novo.<\/p>\n<p style=\"text-align: justify;\">O intuito de utilizar esta abordagem foi decorrente do seguinte problema:<\/p>\n<p style=\"text-align: justify;\">Havia\u00a0um projeto que desenvolvia v\u00e1rias aplica\u00e7\u00f5es, sendo que existe uma base ou (<em>core<\/em>) para o desenvolvimento de todas as outras aplica\u00e7\u00f5es, ou seja, havia\u00a0uma reutiliza\u00e7\u00e3o para cada aplica\u00e7\u00e3o filha, variando apenas as necessidades espec\u00edficas de cada app. \u00a0Logo, teoricamente, deveria ser feito um projeto de teste \u00a0para cada aplica\u00e7\u00e3o e todo o c\u00f3digo implementado para automatizar a base ou (<em>core<\/em>) seria replicado em cada projeto de teste, ent\u00e3o, eis que tive a ideia de modularizar o projeto de teste para cada aplica\u00e7\u00e3o.<\/p>\n<h1 style=\"text-align: justify;\">Estrutura\u00a0Projeto de Teste Multimodulo<\/h1>\n<p style=\"text-align: justify;\">Como j\u00e1 havia citado acima\u00a0sobre a estrutura do projeto de desenvolvimento, as responsabilidades s\u00e3o separadas por m\u00f3dulo, para o projeto de teste ficou separado em 3 m\u00f3dulos, conforme a imagem abaixo. Para conferir o projeto implementado acesse\u00a0<a href=\"https:\/\/github.com\/Vanilton18\/project-test-multimodule-maven\" target=\"_blank\">https:\/\/github.com\/Vanilton18\/project-test-multimodule-maven<\/a>.<\/p>\n<figure id=\"attachment_182\" aria-describedby=\"caption-attachment-182\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"wp-image-182 size-large\" src=\"http:\/\/vanilton.net\/blog\/wp-content\/uploads\/2016\/03\/ArquiteturaProjetoDeTesteMultimodulo-e1459380531300-1024x571.png\" alt=\"Arquitetura Projeto De Teste Multimodulo\" width=\"1024\" height=\"571\" srcset=\"https:\/\/www.vanilton.net\/blog\/wp-content\/uploads\/2016\/03\/ArquiteturaProjetoDeTesteMultimodulo-e1459380531300-1024x571.png 1024w, https:\/\/www.vanilton.net\/blog\/wp-content\/uploads\/2016\/03\/ArquiteturaProjetoDeTesteMultimodulo-e1459380531300-300x167.png 300w, https:\/\/www.vanilton.net\/blog\/wp-content\/uploads\/2016\/03\/ArquiteturaProjetoDeTesteMultimodulo-e1459380531300-520x290.png 520w, https:\/\/www.vanilton.net\/blog\/wp-content\/uploads\/2016\/03\/ArquiteturaProjetoDeTesteMultimodulo-e1459380531300-740x413.png 740w, https:\/\/www.vanilton.net\/blog\/wp-content\/uploads\/2016\/03\/ArquiteturaProjetoDeTesteMultimodulo-e1459380531300.png 1267w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption id=\"caption-attachment-182\" class=\"wp-caption-text\">Estrutura\u00a0Projeto De Teste Multimodulo<\/figcaption><\/figure>\n<p>A primeira observa\u00e7\u00e3o que destaco s\u00e3o os 2 m\u00f3dulos clientes na imagem acima, caso houvesse a necessidade de inclus\u00e3o de outro cliente bastaria inserir um novo m\u00f3dulo, nestes m\u00f3dulos estariam todas as implementa\u00e7\u00f5es espec\u00edficas de cada aplica\u00e7\u00e3o por cliente. Tamb\u00e9m \u00e9 importante saber que estes m\u00f3dulos s\u00e3o dependentes do m\u00f3dulo <em>core<\/em>, pois neste, estar\u00e1\u00a0a implementa\u00e7\u00e3o de tudo que \u00e9 comum entre todos as aplica\u00e7\u00f5es de todos clientes.<\/p>\n<p>Por fim, o projeto com nome\u00a0<em>project-test-multimodule-maven\u00a0<\/em>possuir\u00e1 todas as depend\u00eancias e suas vers\u00f5es e tamb\u00e9m quais s\u00e3o seus m\u00f3dulos filhos, abaixo o POM.xml deste projeto exemplo.<\/p>\n<div class=\"oembed-gist\"><script src=\"https:\/\/gist.github.com\/Vanilton18\/756029e6fce11d6dd2f9e3f5c40e4c8c.js\"><\/script><noscript>View the code on <a href=\"https:\/\/gist.github.com\/Vanilton18\/756029e6fce11d6dd2f9e3f5c40e4c8c\">Gist<\/a>.<\/noscript><\/div>\n<p>Para os m\u00f3dulos clientes e <em>core<\/em>\u00a0existir\u00e1 um\u00a0POM.xml com as suas depend\u00eancias, lembrando que n\u00e3o \u00e9 necess\u00e1rio definir a vers\u00e3o, pois esta estar\u00e1 contida no projeto pai, abaixo podemos observar um pom de um m\u00f3dulo cliente.<\/p>\n<div class=\"oembed-gist\"><script src=\"https:\/\/gist.github.com\/Vanilton18\/942f970298873d2d16ee57ce6584ae6d.js\"><\/script><noscript>View the code on <a href=\"https:\/\/gist.github.com\/Vanilton18\/942f970298873d2d16ee57ce6584ae6d\">Gist<\/a>.<\/noscript><\/div>\n<p>Como j\u00e1 citado, existe uma depend\u00eancia para o m\u00f3dulo core do tipo test-jar, \u00e9 importante observar este tipo, pois todo o c\u00f3digo do m\u00f3dulo core encontra-se no pacote de teste, e no projeto pai existe um plugin chamado <em>maven-jar-plugin<\/em>\u00a0com o seguinte conte\u00fado:<\/p>\n<div class=\"p1\"><code><span class=\"s1\">&lt;<\/span>executions<span class=\"s1\">&gt;<\/span><\/code><\/div>\n<div class=\"p1\"><code><span class=\"s1\">\u00a0 \u00a0&lt;<\/span>execution<span class=\"s1\">&gt;<\/span><\/code><\/div>\n<div class=\"p2\"><code><span class=\"s1\">\u00a0 \u00a0 \u00a0 &lt;<\/span><span class=\"s3\">goals<\/span><span class=\"s1\">&gt;<\/span><\/code><\/div>\n<div class=\"p2\"><code><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0&lt;<\/span><span class=\"s3\">goal<\/span><span class=\"s1\">&gt;<\/span>test-jar<span class=\"s1\">&lt;\/<\/span><span class=\"s3\">goal<\/span><span class=\"s1\">&gt;<\/span><\/code><\/div>\n<div class=\"p2\"><code><span class=\"s1\">\u00a0 \u00a0 \u00a0 &lt;\/<\/span><span class=\"s3\">goals<\/span><span class=\"s1\">&gt;<\/span><\/code><\/div>\n<div class=\"p1\"><code><span class=\"s1\">\u00a0 \u00a0&lt;\/<\/span>execution<span class=\"s1\">&gt;<\/span><\/code><\/div>\n<div class=\"p1\"><code><span class=\"s1\">&lt;\/<\/span>executions<span class=\"s1\">&gt;<\/span><\/code><\/div>\n<p>isto ir\u00e1 gerar no build do maven a depend\u00eancia que ser\u00e1 utilizada pelos m\u00f3dulos\u00a0clientes.<\/p>\n<pre>OBS: O Maven n\u00e3o gera nativamente a depend\u00eancia do c\u00f3digo no pacote de teste.<\/pre>\n<p>Ap\u00f3s importar o projeto, basta selecionar o projeto pai e executar <em>Maven install,\u00a0<\/em>como na figura abaixo por meio da IDE Eclipse.<\/p>\n<p>OBS: Os testes est\u00e3o sendo executados no Chrome, logo \u00e9 necess\u00e1rio configurar o ChromeDriver no path do sistema operacional, para mais informa\u00e7\u00f5es acesse o <a href=\"https:\/\/sites.google.com\/a\/chromium.org\/chromedriver\/downloads\" target=\"_blank\">link<\/a>.<\/p>\n<figure id=\"attachment_192\" aria-describedby=\"caption-attachment-192\" style=\"width: 572px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-full wp-image-192\" src=\"http:\/\/vanilton.net\/blog\/wp-content\/uploads\/2016\/04\/maven_install.png\" alt=\"Maven Install\" width=\"572\" height=\"198\" srcset=\"https:\/\/www.vanilton.net\/blog\/wp-content\/uploads\/2016\/04\/maven_install.png 572w, https:\/\/www.vanilton.net\/blog\/wp-content\/uploads\/2016\/04\/maven_install-300x104.png 300w, https:\/\/www.vanilton.net\/blog\/wp-content\/uploads\/2016\/04\/maven_install-520x180.png 520w\" sizes=\"(max-width: 572px) 100vw, 572px\" \/><figcaption id=\"caption-attachment-192\" class=\"wp-caption-text\">Maven Install<\/figcaption><\/figure>\n<p>Ap\u00f3s a execu\u00e7\u00e3o dos testes,\u00a0ser\u00e1 exibido o sum\u00e1rio do maven conforme imagem abaixo:<\/p>\n<figure id=\"attachment_191\" aria-describedby=\"caption-attachment-191\" style=\"width: 569px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-full wp-image-191\" src=\"http:\/\/vanilton.net\/blog\/wp-content\/uploads\/2016\/04\/multimoduleexecute.png\" alt=\"Projeto Multimodulo Executado\" width=\"569\" height=\"210\" srcset=\"https:\/\/www.vanilton.net\/blog\/wp-content\/uploads\/2016\/04\/multimoduleexecute.png 569w, https:\/\/www.vanilton.net\/blog\/wp-content\/uploads\/2016\/04\/multimoduleexecute-300x111.png 300w, https:\/\/www.vanilton.net\/blog\/wp-content\/uploads\/2016\/04\/multimoduleexecute-520x192.png 520w\" sizes=\"(max-width: 569px) 100vw, 569px\" \/><figcaption id=\"caption-attachment-191\" class=\"wp-caption-text\">Projeto Multimodulo Executado<\/figcaption><\/figure>\n<p>Ent\u00e3o \u00e9 isso galera, encerro aqui o post e espero que a estrutura do <a href=\"https:\/\/github.com\/Vanilton18\/project-test-multimodule-maven\" target=\"_blank\">projeto multimodulo para testes<\/a> seja \u00fatil para voc\u00eas, lembrando que pode ser feito outras coisas inclusive adicionar o projeto em uma ferramenta de Integra\u00e7\u00e3o Cont\u00ednua como o Jenkins, para quem tiver interesse em realizar isto existe um exemplo bem bacana feito pelo <a href=\"https:\/\/twitter.com\/FaelChiavegatto\" target=\"_blank\">@Rafael<\/a> que pode ser visto no <a href=\"http:\/\/rafaelchiavegatto.com.br\/2016\/03\/19\/deixando-o-jenkins-fazer-o-trabalho-manual-parte-2\/\" target=\"_blank\">link<\/a>.<\/p>\n<p>At\u00e9 mais!<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ol\u00e1 galera! Vou come\u00e7ar 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\u00f3dulos para dividirem<a class=\"read-more\" href=\"https:\/\/www.vanilton.net\/blog\/automacao\/2016\/04\/18\/criando-um-projeto-de-teste-multimodulo-com-maven-utilizando-testng-e-seleniumwebdriver\/\">Continue reading<\/a><\/p>\n","protected":false},"author":1,"featured_media":196,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2,6,8,9,37,4,30,38,15,10],"tags":[19,26,40],"wppr_data":[],"_links":{"self":[{"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/posts\/161"}],"collection":[{"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/comments?post=161"}],"version-history":[{"count":9,"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/posts\/161\/revisions"}],"predecessor-version":[{"id":218,"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/posts\/161\/revisions\/218"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/media\/196"}],"wp:attachment":[{"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/media?parent=161"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/categories?post=161"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vanilton.net\/blog\/wp-json\/wp\/v2\/tags?post=161"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}