Tags:

Testes Automatizados Utilizando TestNG

Introdução ao TestNG

Teste de software é um processo que determina se o produto cumpriu os requisitos solicitados pelos clientes. O objetivo é identificar as causas das falhas do produto e corrigi-los antes da entrega final, reduzindo assim futuras conseqüências negativas.

Como o objetivo dos testes é entregar um produto com qualidade existem ferramentas de teste que os desenvolvedores podem utilizar para automatizar os testes como, por exemplo, Junit, TestNG, Selenium e entre outros. O uso dessas ferramentas pode garantir que os componentes do sistema cumprem o propósito a que se destina.

TestNG é um framework de testes inspirado no Junit and NUnit, mas que adiciona novas funcionalidades tornando este framework mais eficiente e fácil de usar, tais como: suporte a anotações, verificar se seu código é seguro em um ambiente multithread, configurações flexíveis, suporte a parâmetros, dependência de métodos e grupos de métodos.

TestNG é projetada para categorias de teste como unitário (testar uma classe isolada dos demais) e de integração (garantir que um ou mais componentes funcionam de forma integrada).

Execução dos Testes

O primeiro passo para executar os testes é escrever a lógica de negócio do teste em classes java e acrescentar as anotações do TestNG, uma das principais é @Test que assinala uma classe ou um método como parte do teste.

O segundo passo é adicionar informações sobre o teste no arquivo testng.xml. O testng.xml é um arquivo onde são definidas as configurações de teste. Um arquivo que torna fácil descrever todos os suítes de teste e seus parâmetros, nesse arquivo o desenvolvedor pode especificar:

  • Quais classes de testes serão executadas, se preferir pode especificar quais métodos dessas classes poderão executar os testes.
  • Em quais pacotes do projeto os testes serão executados.
  • Quais grupos de testes devem ser executados ou excluídos.

Nas imagens abaixo temos um exemplo dos passos a serem executados, uma classe que irá testar dois métodos (bloco de código que pertence a uma classe e se destina a fazer uma tarefa): um deve retornar todos os usuários cadastrados no sistema e outro deve retornar o usuário com o login “jose” e a configuração do arquivo testng.xml.

Figura 1: Lógica de negócio do teste

A declaração “Assert.assertEquals” (ver imagem acima) recebe dois parâmetros o primeiro é o resultado esperado e o segundo é o valor real, Assert.assertEquals(“Jose”, list.get(0).getNome()) significa que estamos verificando se list.get(0).getNome() é igual a “Jose”, caso os valores não sejam iguais indica que o método buscarUsuarioPorLogin tem uma falha na implementação e precisa ser corrigido.

Figura 2: Configuração do arquivo testng.xml

Usando a IDE Ecplise para rodar os testes o resultado é mostrado na imagem abaixo; podemos ver que os dois métodos passaram no teste, em caso de falha no teste a causa é exibida na coluna “Failure Exception” e cabe ao desenvolvedor descobrir a causa da falha e corrigir.

Figura 3: Resultado dos testes.

Teste de integração com Selenium

Como já foi mencionado nesse artigo, teste de integração tem por objetivo garantir que um ou mais componentes funcionam juntos.

O Selenium é uma ferramenta de teste para aplicações Web. Provê um conjunto de comandos que permite simular as ações do usuário no sistema e verificar o resultado desse comportamento.

Na imagem abaixo simula um teste de uma página de pesquisa de usuários do sistema, em que o administrador do sistema clica no menu “Pesquisar”, informe o login “jose”, clica no botão Consultar e aguarda o resultado na tabela de “Lista de Usuários”.

Figura 4: Teste com selenium

A implementação da classe UsuarioSeleniumTest irá fazer as mesmas ações que o administrador do sistema faria conforme a imagem abaixo.

Figura 5: Tela de pesquisa de usuários

Como já foi mencionado umas das características do TestNG é criar grupos de testes que podem ser separados por funcionalidades e também podemos definir uma seqüência de testes. Nas classes UsuarioDaoTest e UsuarioSeleniumTest desse artigo foram definidos dois grupos “domain” e “selenium” (ver o atributo groups da anotaçao @Test nas imagens 1 e 4). O grupo “domain” é responsável pelos testes das classes de negócio e o grupo “selenium” é responsável por simular e verificar as ações dos usuários. Usando o TestNG Eclipse plug-in podemos definir que os testes dos grupos começam pelo grupo “domain” e depois “selenium”, ou seja, primeiro testa as regras de negócio e depois testa as ações dos usuários e os resultados podem ser verificados conforme a imagem abaixo.

Figura 6: Resultados dos testes de grupo

Conclusão

O objetivo desse artigo era de apresentar uma breve introdução do framework TestNG mencionando suas funcionalidades e passos para execução dos testes.

Para que o produto de software atenda às solicitações dos clientes, o TestNG mostrou ser uma ótima opção de ferramenta de teste para poder garantir que o sistema cumpre o propósito a que se destina. Observou-se que uma das principais funcionalidades deste framework é permitir criar grupos de testes que podem ser classificados de acordo com suas funcionalidades e também podem ser definidas as ordens de execução dos grupos. Foi possível verificar que este framework pode trabalhar com outras ferramentas de teste como o Selenium.

Referências

BEUST, Beust; SULEIMAN, Hani. Next Generation Java Testing: TestNG and Advanced Concepts. Addison-Wesley, 2007.

Introdução TestNG. www.testng.org.

TestNG makes Java unit testing a breeze. www.ibm.com/developerworks/java/library/j-testng.

Por RAFAEL CARMONA GIL

Postado em: 27 de novembro de 2012

Confira outros artigos do nosso blog

REST não é JSON

21 de agosto de 2017

Bruno Sofiato

[Webinar] Profile de aplicações Java com Oracle Mission Control e Flight Recorder

24 de julho de 2017

Danival Calegari

Criando Mocks de serviços REST com SoapUI

27 de junho de 2017

Monise Costa

JavaScript 6: diferença entre var, let e const

09 de maio de 2017

Otávio Felipe do Prado

Deixe seu comentário