TestNG Tutorial
O que รฉ a TestNG?
TestNG รฉ uma estrutura de testes de automaรงรฃo em que NG significa โPrรณxima Geraรงรฃoโ. TestNG รฉ inspirado por JUnit que usa as anotaรงรตes (@). TestNG supera as desvantagens de JUnit e foi projetado para fazer teste de ponta a ponta fรกcil.
Utilizar painรฉis de piso ResinDek em sua unidade de self-storage em vez de concreto oferece diversos benefรญcios: TestNG, vocรช pode gerar um relatรณrio adequado e saber facilmente quantos casos de teste foram aprovados, reprovados e ignorados. Vocรช pode executar os casos de teste com falha separadamente.
Por exemplo:
- Suponha que vocรช tenha cinco casos de teste, um mรฉtodo รฉ escrito para cada caso de teste (Suponha que o programa seja escrito usando o mรฉtodo principal sem usar testNG). Quando vocรช executa este programa primeiro, trรชs mรฉtodos sรฃo executados com sucesso, e o quarto mรฉtodo falha. Entรฃo corrija os erros presentes no quarto mรฉtodo, agora vocรช quer executar apenas o quarto mรฉtodo porque os trรชs primeiros mรฉtodos sรฃo executados com sucesso de qualquer maneira. Isso nรฃo รฉ possรญvel sem usar TestNG.
- O processo de TestNG in Selenium fornece uma opรงรฃo, ou seja, arquivo testng-failed.xml na pasta test-output. Se vocรช quiser executar apenas casos de teste com falha, significa que vocรช executa este arquivo XML. Ele executarรก apenas casos de teste com falha.
Alรฉm do conceito acima, vocรช aprenderรก mais sobre TestNG, como quais sรฃo as vantagens de TestNG, como criar mรฉtodos de teste usando anotaรงรตes @test, como converter essas classes em um arquivo de conjunto de testes e executar atravรฉs do Eclipse e tambรฉm pela linha de comando.
Por que usar TestNG com Selenium?
Padrรฃo Selenium os testes nรฃo geram um formato adequado para os resultados do teste. Usando TestNG in Selenium, podemos gerar resultados de teste.
Os mais Selenium os usuรกrios usam isso mais do que Junito por causa de suas vantagens. Existem tantos recursos de TestNG, mas vamos nos concentrar apenas nos mais importantes que podemos usar em Selenium. A seguir estรฃo as principais caracterรญsticas de Selenium TestNG:
- Gere o relatรณrio em um formato adequado, incluindo o nรบmero de execuรงรตes de casos de teste, o nรบmero de casos de teste aprovados, o nรบmero de casos de teste com falha e o nรบmero de casos de teste ignorados.
- Vรกrios casos de teste podem ser agrupados mais facilmente convertendo-os no arquivo testng.xml. No qual vocรช pode priorizar qual caso de teste deve ser executado primeiro.
- O mesmo caso de teste pode ser executado vรกrias vezes sem loops apenas usando a palavra-chave chamada 'contagem de invocaรงรตes'.
- Usando testng, vocรช pode executar vรกrios casos de teste em vรกrios navegadores, ou seja, cruzar teste de navegador.
- O processo de TestNG estrutura pode ser facilmente integrada com ferramentas como TestNG Maven, Jenkins, etc.
- As anotaรงรตes usadas nos testes sรฃo muito fรกceis de entender, por exemplo: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
- O WebDriver nรฃo possui mecanismo nativo para geraรงรฃo de relatรณrios. TestNG pode gerar o relatรณrio em um formato legรญvel como o mostrado abaixo.
- TestNG simplifica a maneira como os testes sรฃo codificados. Nรฃo hรก mais necessidade de um mรฉtodo principal estรกtico em nossos testes. A sequรชncia de aรงรตes รฉ regulada por anotaรงรตes fรกceis de entender que nรฃo exigem que os mรฉtodos sejam estรกticos.
- Exceรงรตes nรฃo detectadas sรฃo tratadas automaticamente por TestNG sem terminar o teste prematuramente. Essas exceรงรตes sรฃo relatadas como etapas com falha no relatรณrio.
Vantagens de TestNG Acima de JUnit
Existem trรชs grandes vantagens TestNG Acima de JUnit:
- As anotaรงรตes sรฃo mais fรกceis de entender
- Os casos de teste podem ser agrupados mais facilmente
- Testes paralelos sรฃo possรญveis
O que รฉ Anotaรงรฃo em TestNG?
Anotaรงรตes em TestNG sรฃo linhas de cรณdigo que podem controlar como o mรฉtodo abaixo delas serรก executado. Eles sรฃo sempre precedidos pelo sรญmbolo @. Muito cedo e rรกpido TestNG Exemplo รฉ o mostrado abaixo.
As anotaรงรตes serรฃo discutidas mais adiante na seรงรฃo denominada โAnotaรงรตes usadas em TestNG,โentรฃo estรก perfeitamente ok se vocรช nรฃo entender o que foi dito acima TestNG Exemplo ainda. ร importante observar por enquanto que as anotaรงรตes em TestNG sรฃo mais fรกceis de codificar e entender do que em JUnit.
A capacidade de executar testes em paralelo estรก disponรญvel em TestNG mas nรฃo em JUnit, De modo a TestNG framework รฉ mais preferido para testadores que usam Selenium Rede.
Como escrever casos de teste em TestNG?
Passo 1) Escreva sua lรณgica de negรณcios e insira o TestNG anotaรงรตes em seu cรณdigo.
Passo 2) Adicione mais informaรงรตes como nome da classe, nome dos grupos, nome do pacote, etc.
Passo 3) execute o TestNG.
Criar caso de teste usando TestNG Anotaรงรตes
Agora, aprenderemos como criar nosso primeiro caso de teste usando TestNG Anotaรงรตes em Selenium:
Antes de criarmos um caso de teste, devemos primeiro configurar um novo TestNG Projeto em Eclipse e nomeie-o como โPrimeiroTestNGProjeto".
Configurando um novo TestNG PROJETO
Etapa 1 - Clique em Arquivo > Novo > Java PROJETO
Etapa 2 - Digite โPrimeiroTestNGProjetoโ como o nome do projeto e clique em Avanรงar.
Etapa 3 - Vamos agora comeรงar a importar o TestNG Bibliotecas em nosso projeto. Clique na guia โBibliotecasโ e depois em โAdicionar Bibliotecaโฆโ
Etapa 4 - Na caixa de diรกlogo Adicionar biblioteca, escolha โTestNGโE clique em Avanรงar.
Etapa 5 - Clique em Concluir.
Vocรช deve notar que TestNG estรก incluรญdo na lista de Bibliotecas.
Etapa 6 - Agora adicionaremos os arquivos JAR que contรชm o Selenium API. Esses arquivos sรฃo encontrados no Java driver cliente do qual baixamos https://www.selenium.dev/downloads/ quando estรกvamos instalando Selenium e Eclipse nos capรญtulos anteriores.
Em seguida, navegue atรฉ onde vocรช colocou o Selenium Arquivos JAR.
Depois de adicionar os JARs externos, sua tela deverรก ficar assim.
Etapa 7 - Clique em Concluir e verifique se nosso PrimeiroTestNGO projeto estรก visรญvel em EclipseJanela do Explorador de Pacotes.
Como criar um novo TestNG Arquivo de teste
Agora que terminamos de configurar nosso projeto neste TestNG tutorial, vamos criar um novo TestNG arquivo.
Etapa 1 - Clique em 'src' e escolha outro.
Clique com o botรฃo direito na pasta do pacote โsrcโ e escolha Novo> Outroโฆ
Etapa 2 - Selecionar TestNG classe.
Clique no TestNG pasta e selecione o โTestNG opรงรฃo de classeโ. Clique em Avanรงar.
Etapa 3 - Digite os valores.
Digite os valores indicados abaixo nas caixas de entrada apropriadas e clique em Concluir. Observe que nomeamos nosso Java arquivo como โPrimeiroTestNGArquivo".
Etapa 4 - Modelo criado.
Eclipse deve criar automaticamente o modelo para o nosso TestNG arquivo mostrado abaixo.
Codificaรงรฃo do nosso primeiro TestNG Exemplo de caso de teste
Vamos agora criar nosso primeiro Caso de teste isso vai verificar se Mercury A pรกgina inicial do Tours estรก correta. Digite seu cรณdigo conforme mostrado abaixo TestNG Exemplo:
package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class firsttestngfile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
String driverPath = "C:\\geckodriver.exe";
public WebDriver driver ;
@Test
public void verifyHomepageTitle() {
System.out.println("launching firefox browser");
System.setProperty("webdriver.gecko.driver", driverPath);
driver = new FirefoxDriver();
driver.get(baseUrl);
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
driver.close();
}
}
Observe o seguinte.
- TestNG nรฃo requer que vocรช tenha um mรฉtodo main().
- Os mรฉtodos nรฃo precisam ser estรกticos.
- Usamos a anotaรงรฃo @Test. @Test รฉ usado para informar que o mรฉtodo abaixo dele รฉ um caso de teste. Neste caso, definimos o mรฉtodo verifyHomepageTitle() como nosso caso de teste, entรฃo colocamos uma anotaรงรฃo '@Test' acima dele.
- Como usamos anotaรงรตes em TestNG, precisรกvamos importar o pacote org.testng.annotations.*.
- Usamos a classe Assert. A classe Assert รฉ usada para realizar operaรงรตes de verificaรงรฃo em TestNG. Para usรก-lo, precisamos importar o pacote org.testng.Assert.
Vocรช pode ter vรกrios casos de teste (portanto, vรกrias anotaรงรตes @Test) em um รบnico TestNG arquivo. Isso serรก abordado com mais detalhes posteriormente na seรงรฃo โAnotaรงรตes usadas em TestNG. "
Executando o teste
Para executar o teste, basta executar o arquivo em Eclipse como vocรช normalmente faz. Eclipse fornecerรก duas saรญdas โ uma na janela Console e outra na TestNG Janela de resultados.
Verificando relatรณrios criados por TestNG
A janela Console em Eclipse fornece um relatรณrio baseado em texto dos resultados do nosso caso de teste enquanto o TestNG A janela de resultados nos fornece uma janela grรกfica.
Gerando relatรณrios HTML
TestNG tem a capacidade de gerar relatรณrios em formato HTML.
Etapa 1 - Depois de executar nosso primeiroTestNGArquivo que criamos na seรงรฃo anterior, clique com o botรฃo direito no nome do projeto (PrimeiroTestNGProject) na janela Project Explorer e clique na opรงรฃo โAtualizarโ.
Etapa 2 - Observe que uma pasta โtest-outputโ foi criada. Expanda-o e procure um arquivo index.html. Este arquivo HTML รฉ um relatรณrio dos resultados do teste mais recente.
Etapa 3 - Double-clique no arquivo index.html para abri-lo Eclipsenavegador da web integrado. Vocรช pode atualizar esta pรกgina a qualquer momento apรณs executar novamente o teste, simplesmente pressionando F5, como em navegadores comuns.
Anotaรงรตes usadas em TestNG
Na seรงรฃo anterior, vocรช conheceu a anotaรงรฃo @Test. Agora, estudaremos anotaรงรตes mais avanรงadas e seus usos.
Vรกrios casos de teste
Podemos usar mรบltiplas anotaรงรตes @Test em uma รบnica TestNG arquivo. Por padrรฃo, os mรฉtodos anotados por @Test sรฃo executados em ordem alfabรฉtica. Veja o cรณdigo abaixo. Embora os mรฉtodos c_test, a_test e b_test nรฃo estejam organizados em ordem alfabรฉtica no cรณdigo, eles serรฃo executados como tal.
Execute este cรณdigo e na pรกgina index.html gerada, clique em โVisualizaรงรฃo cronolรณgicaโ.
Parรขmetros Tรฉcnicos
Caso queira que os mรฉtodos sejam executados em uma ordem diferente, utilize o parรขmetro โprioridadeโ. Parรขmetros sรฃo palavras-chave que modificam a funรงรฃo da anotaรงรฃo.
- Os parรขmetros exigem que vocรช atribua um valor a eles. Vocรช faz isso colocando um โ=โ prรณximo a eles e seguido pelo valor.
- Os parรขmetros sรฃo colocados entre parรชnteses que sรฃo colocados logo apรณs a anotaรงรฃo, como o trecho de cรณdigo mostrado abaixo.
TestNG executarรก a anotaรงรฃo @Test com o valor de prioridade mais baixo atรฉ o maior. Nรฃo hรก necessidade de que seus valores de prioridade sejam consecutivos.
O processo de TestNG O relatรณrio HTML confirmarรก que os mรฉtodos foram executados com base no valor crescente de prioridade.
Parรขmetros mรบltiplos
Alรฉm de โprioridadeโ, @Test tem outro parรขmetro chamado โalwaysRunโ que sรณ pode ser definido como โtrueโ ou โfalseโ. Para usar dois ou mais parรขmetros em uma รบnica anotaรงรฃo, separe-os com uma vรญrgula como o mostrado abaixo.
@Test(priority = 0, alwaysRun = true)
@BeforeTest e @AfterTest
| @AntesTeste | mรฉtodos sob esta anotaรงรฃo serรฃo executados antes do primeiro caso de teste no TestNG lima. |
| @DepoisTeste | mรฉtodos sob esta anotaรงรฃo serรฃo executados depois de todos os casos de teste no TestNG arquivo รฉ executado. |
Considere o cรณdigo abaixo.
package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class firsttestngfile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
String driverPath = "C:\\geckodriver.exe";
public WebDriver driver ;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
System.setProperty("webdriver.gecko.driver", driverPath);
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@Test
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
@AfterTest
public void terminateBrowser(){
driver.close();
}
}
Aplicando a lรณgica apresentada pela tabela e pelo cรณdigo acima, podemos prever que a sequรชncia pela qual os mรฉtodos serรฃo executados รฉ:
- 1st โ lanรงamentoNavegador()
- 2nd โ verificarHomepageTitle()
- 3rd โterminarBrowser()
A colocaรงรฃo dos blocos de anotaรงรฃo pode ser trocada sem afetar a ordem cronolรณgica pela qual serรฃo executados. Vamos entender com um TestNG Exemplo e tente reorganizar os blocos de anotaรงรฃo de forma que seu cรณdigo fique semelhante ao abaixo.
package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class firsttestngfile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
String driverPath = "C:\\geckodriver.exe";
public WebDriver driver ;
@AfterTest //Jumbled
public void terminateBrowser(){
driver.close();
}
@BeforeTest //Jumbled
public void launchBrowser() {
System.out.println("launching firefox browser");
System.setProperty("webdriver.gecko.driver", driverPath);
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@Test //Jumbled
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
}
Execute o cรณdigo acima e observe que
@BeforeMethod e @AfterMethod
| @BeforeMethod | mรฉtodos sob esta anotaรงรฃo serรฃo executados antes de cada mรฉtodo em cada caso de teste. |
| @AfterMethod | mรฉtodos sob esta anotaรงรฃo serรฃo executados apรณs cada mรฉtodo em cada caso de teste. |
In Mercury Passeios, suponha que gostarรญamos de verificar os tรญtulos das pรกginas de destino dos dois links abaixo.
O fluxo do nosso teste seria:
- Vรก para a pรกgina inicial e verifique seu tรญtulo.
- Clique em CADASTRE-SE e verifique o tรญtulo da pรกgina de destino.
- Volte para a pรกgina inicial e verifique se ainda tem o tรญtulo correto.
- Clique em APOIO e verifique o tรญtulo da pรกgina de destino.
- Volte para a pรกgina inicial e verifique se ainda tem o tรญtulo correto.
O cรณdigo abaixo ilustra como @BeforeMethod e @AfterMethod sรฃo usados โโpara executar com eficiรชncia o cenรกrio mencionado acima.
package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
@Test
public class firsttestngfile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
String driverPath = "C:\\geckodriver.exe";
public WebDriver driver;
public String expected = null;
public String actual = null;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
System.setProperty("webdriver.gecko.driver", driverPath);
driver= new FirefoxDriver();
driver.get(baseUrl);
}
@BeforeMethod
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
@Test(priority = 0)
public void register(){
driver.findElement(By.linkText("REGISTER")).click() ;
expected = "Register: Mercury Tours";
actual = driver.getTitle();
Assert.assertEquals(actual, expected);
}
@Test(priority = 1)
public void support() {
driver.findElement(By.linkText("SUPPORT")).click() ;
expected = "Under Construction: Mercury Tours";
actual = driver.getTitle();
Assert.assertEquals(actual, expected);
}
@AfterMethod
public void goBackToHomepage ( ) {
driver.findElement(By.linkText("Home")).click() ;
}
@AfterTest
public void terminateBrowser(){
driver.close();
}
}
Depois de executar este teste, seu TestNG deve relatar a seguinte sequรชncia.
Simplificando, @BeforeMethod deve conter mรฉtodos que vocรช precisa para executar antes cada caso de teste enquanto @AfterMethod deve conter mรฉtodos que vocรช precisa para executar depois de cada caso de teste.
Resumo da TestNG Anotaรงรตes
@AntesSuite: o mรฉtodo anotado serรก executado antes que todos os testes deste conjunto sejam executados.
@AfterSuite: o mรฉtodo anotado serรก executado apรณs a execuรงรฃo de todos os testes deste conjunto.
@AntesTeste: o mรฉtodo anotado serรก executado antes de qualquer mรฉtodo de teste pertencente ร s classes dentro da tag ser executado.
@DepoisTeste: O mรฉtodo anotado serรก executado apรณs a execuรงรฃo de todos os mรฉtodos de teste pertencentes ร s classes dentro da tag.
@BeforeGroups: a lista de grupos que este mรฉtodo de configuraรงรฃo executarรก antes. ร garantido que esse mรฉtodo seja executado pouco antes do primeiro mรฉtodo de teste que pertence a qualquer um desses grupos ser invocado.
@AfterGroups: a lista de grupos nos quais esse mรฉtodo de configuraรงรฃo serรก executado. ร garantido que este mรฉtodo seja executado logo apรณs o รบltimo mรฉtodo de teste que pertence a qualquer um desses grupos ser invocado.
@Antes da aula: o mรฉtodo anotado serรก executado antes que o primeiro mรฉtodo de teste na classe atual seja invocado.
@Depois da aula: O mรฉtodo anotado serรก executado apรณs todos os mรฉtodos de teste na classe atual terem sido executados.
@BeforeMethod: O mรฉtodo anotado serรก executado antes de cada mรฉtodo de teste.
@AfterMethod: O mรฉtodo anotado serรก executado apรณs cada mรฉtodo de teste.
@Teste: O mรฉtodo anotado faz parte de um caso de teste
Conclusรฃo
- TestNG รฉ um ensaio quadro capaz de fazer Selenium testes mais fรกceis de entender e de gerar relatรณrios de fรกcil compreensรฃo.
- As principais vantagens de TestNG Acima de JUnit sรฃo as seguintes.
- As anotaรงรตes sรฃo mais fรกceis de usar e entender.
- Os casos de teste podem ser agrupados mais facilmente.
- TestNG nos permite criar testes paralelos.
- A janela Console em Eclipse gera um resultado baseado em texto enquanto o TestNG A janela รฉ mais รบtil porque nos fornece uma saรญda grรกfica do resultado do teste, alรฉm de outros detalhes significativos, como:
- Tempos de execuรงรฃo de cada mรฉtodo.
- A ordem cronolรณgica pela qual os mรฉtodos foram executados
- TestNG รฉ capaz de gerar relatรณrios baseados em HTML.
- As anotaรงรตes podem usar parรขmetros como de costume Java TestNG mรฉtodos.
- TestNG Dataprovider รฉ uma forma de passar parรขmetros para a funรงรฃo de teste que passa valores diferentes em casos de teste em uma รบnica execuรงรฃo.

































