Post

1 Star2 Stars3 Stars4 Stars5 Stars
Loading ... Loading ...

Continuando o assunto do último post, vamos ver como implementar um recurso para tirar screenshots de testes que falharam no Selenium WebDriver com TestNG.

TestNG
O TestNG é um framework criado por Cédric Beust, em 2004. Cédric se inspirou no JUnit e no NUnit para criar o TestNG, mas o principal motivo se deu por conta das frustrações que ele mesmo teve com o uso do JUnit. Dentre os diferenciais do TestNG, podemos destacar:

Suites definidas via XML e altamente configuráveis

No JUnit, uma Suite é uma classe java anotada com @RunWith(Suite.class), e com pouca flexibilidade, em comparação ao TestNG.

Dependência entre métodos de teste

Esse recurso é importante quando estamos trabalhando com testes integrados. Porém, em se tratando de testes de unidade, não faz sentido termos dependências entre testes, já que o objetivo é justamente podermos isolar o comportamento de uma classe, por exemplo.
O JUnit não permite esse recurso. A única coisa que o JUnit permite é a ordenação dos testes em ordem alfabética, abordada pelo Elias Nogueira no post “Ordenando os Testes no Selenium com JUnit”.

Agrupamento de testes (groups)

Atualmente, o JUnit oferece o recurso de Categories, que, mesmo sendo útil, não oferece a flexibilidade do TestNG.

Possibilidade de rodar testes em paralelo

O TestNG permite que você rode seus testes (métodos, classes, etc.) em paralelo, com muita facilidade e flexibilidade de configuração. O JUnit não oferece esse recurso.
Para quem quiser aprender mais sobre o TestNG e suas funcionalidades, recomendo ler a sua documentação, que é simples e fácil de entender. Lembrando que, para usar o TestNG no Eclipse, é necessário instalar um plugin. Clique aqui para ver como instalá-lo.

A classe TestListenerAdapter
De forma análoga à classe TestWatcher, que vimos no post anterior, o TestNG provê a classe TestListenerAdapter para termos controle sobre a execução dos testes. Basicamente, essa classe é um listener que contém todas as informações sobre os testes que foram executados. Assim como fizemos com o JUnit, também podemos controlar o que fazer quando um teste passa ou falha. Enquanto no JUnit tivemos que criar uma Rule estendendo a classe TestWatcher, no TestNG vamos criar um Listener estendendo a classe TestListenerAdapter. Ficaria da seguinte forma:

public class ScreenshotListener extends TestListenerAdapter
{
@Override
public void onTestFailure(ITestResult testResult)
{
super.onTestFailure(testResult);

//O que colocarmos aqui será executado sempre que um teste falhar…
//É aqui que vamos colocar o método para tirar um screenshot!
}
}

Bem parecido, não?

Como associar o Listener aos seus testes?
Para associar o listener recém-criado aos seus testes, basta anotar sua classe de teste com @Listeners, passando como parâmetro o nome da classe do listener. Como vimos no post anterior, o ideal seria colocar essa anotação na sua classe base de teste. Um exemplo seria:

@Listeners(ScreenshotListener.class)
public class BaseTest
{
private static WebDriver driver;

@BeforeClass
public static void setUp()
{
//Criar instância do driver desejado
}

@AfterClass
public static void tearDown()
{
driver.quit();
}
}

Pronto! Com isso, o listener funcionará para toda classe de teste que estender a classe base.

E o problema com métodos @After?
Usando o TestNG, não há o problema com métodos @After, que descrevemos no post anterior. Com o uso de rules no JUnit, vimos que uma rule é executada sempre antes de um método com @Before (@BeforeMethod no TestNG) e depois de um método com @After (@AfterMethod no TestNG), o que nos atrapalhava para obter um screenshot do estado exato da tela na qual o teste falhou. Logo, não é necessário se preocupar com isso no TestNG!

Nos próximos dias, conforme tinha comentado anteriormente, vou postar no GitHub um projeto de exemplo mostrando a implementação com o JUnit e com o TestNG. Fiquem de olho nas atualizações!
Para complementar, dêem uma olhada nos links abaixo, na seção de Referências.
Até a próxima!

Referências
http://testng.org/doc/index.htmlhttp://testng.org/doc/download.htmlhttp://beust.com/weblog/2004/09/01/announcing-testng-1-0/http://beust.com/weblog/2004/08/25/testsetup-and-evil-static-methods/http://beust.com/weblog/2004/02/08/junit-pain/

Source: http://stefanteixeira.com.br/2014/05/28/tirando-screenshots-de-testes-que-falharam-no-testng/?utm_source=rss&utm_medium=rss&utm_campaign=tirando-screenshots-de-testes-que-falharam-no-testng

Category: Java, Selenium WebDriver, Testes Automatizados, TestNG

Você também pode querer ler

Comments are off for this post.