TestNG Tutorial
โก Resumo Inteligente
TestNG รฉ uma geraรงรฃo seguinte Java estrutura de testes que se combina com Selenium Para automaรงรฃo estruturada, relatรณrios detalhados e execuรงรฃo paralela. Este tutorial aborda as anotaรงรตes principais e a configuraรงรฃo do projeto em Eclipse, escrever o primeiro caso de teste, relatรณrios HTML e uso avanรงado de parรขmetros.
O que รฉ a TestNG?
TestNG รฉ uma estrutura de testes automatizados onde โNGโ significa โNext Generationโ (Prรณxima Geraรงรฃo). TestNG รฉ inspirado por JUnit e usa Java anotaรงรตes (@) para controlar o fluxo de testes. Isso supera JUnitsuas limitaรงรตes anteriores e foi projetado para fazer teste de ponta a ponta mais fรกcil.
Com TestNG Vocรช pode gerar um relatรณrio completo e ver imediatamente quantos testes foram aprovados, reprovados ou ignorados. Vocรช tambรฉm pode executar novamente apenas os casos em que houve reprovaรงรฃo.
Por exemplo:
- Suponha que vocรช tenha cinco casos de teste, cada um em seu prรณprio mรฉtodo, escritos sem TestNGTrรชs testes sรฃo bem-sucedidos; o quarto falha. Depois de corrigir o quarto teste, vocรช deseja executar novamente apenas esse teste, jรก que os trรชs primeiros jรก foram bem-sucedidos. Isso รฉ difรญcil de fazer com um cรณdigo simples do mรฉtodo main().
- TestNG fornece uma
testng-failed.xmlarquivo notest-outputpasta. Executar esse XML reexecuta apenas os casos que falharam.
Alรฉm disso, vocรช aprenderรก as vantagens de TestNGComo escrever mรฉtodos de teste com anotaรงรตes @Test e como converter suas classes em um conjunto de testes que pode ser executado a partir de Eclipse ou a linha de comando.
Por que usar TestNG com as Selenium?
Por padrรฃo, o Selenium Os testes nรฃo produzem resultados bem formatados. TestNG Apรณs ser conectado, o executor de testes gera um relatรณrio estruturado que vocรช pode compartilhar com a equipe.
Os mais Selenium usuรกrios preferem TestNG Acima de JUnit devido ao seu conjunto de recursos mais amplo. Os principais recursos para Selenium como:
- Relatรณrios que incluem o nรบmero de casos de teste executados, aprovados, reprovados e ignorados.
- Grupo fรกcilping de casos de teste por meio de um
testng.xmlarquivo, com prioridades de execuรงรฃo. - Repita um teste vรกrias vezes sem usar loops.
invocationCount. - Execute vรกrios testes em vรกrios navegadores โ testes cruzadosteste de navegador .
- Integraรงรฃo perfeita com o Maven, Jenkinse outras ferramentas de CI.
- Readable anotaรงรตes โ por exemplo, @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest.
- Selenium O WebDriver nรฃo possui recursos nativos de geraรงรฃo de relatรณrios; TestNG Preenche essa lacuna com um relatรณrio HTML limpo como o abaixo.
- TestNG Simplifica o cรณdigo de teste. Vocรช nรฃo precisa mais de um mรฉtodo main estรกtico; as anotaรงรตes decidem o que รฉ executado e quando.
- Exceรงรตes nรฃo tratadas sรฃo gerenciadas de forma adequada por TestNGSรฃo relatadas como etapas com falha, sem que a execuรงรฃo seja encerrada por completo.
Vantagens de TestNG Acima de JUnit
TestNG oferece trรชs grandes vantagens em relaรงรฃo a JUnit:
- As anotaรงรตes sรฃo mais fรกceis de entender e usar.
- Os casos de teste podem ser agrupados e priorizados com menos esforรงo.
- A execuรงรฃo paralela de testes รฉ suportada nativamente.
O que รฉ uma anotaรงรฃo em TestNG?
Anotaรงรตes em TestNG Sรฃo linhas de cรณdigo colocadas acima de um mรฉtodo para controlar como ele รฉ executado. Eles sempre comeรงam com o sรญmbolo @. Um exemplo simples รฉ mostrado abaixo.
As anotaรงรตes sรฃo abordadas em detalhes na seรงรฃo โAnotaรงรตes usadas em TestNG" Mais adiante neste tutorial, portanto, o exemplo acima serve apenas para alinhar as expectativas. TestNG As anotaรงรตes sรฃo mais fรกceis de codificar e ler do que os JUnit equivalentes, e sรฃo essenciais ao executar testes em Selenium Grade onde a execuรงรฃo paralela รฉ importante.
Como escrever casos de teste em TestNG
Escrevendo um TestNG O caso de teste envolve trรชs etapas:
- Escreva a lรณgica do seu negรณcio e coloque-a no lugar certo. TestNG Anotaรงรตes acima de cada mรฉtodo.
- Adicione metadados como nome da classe, nome do grupo e nome do pacote.
- execute o TestNG classe a partir do seu IDE ou da linha de comando.
Criar um caso de teste usando TestNG Anotaรงรตes
Agora vamos criar nosso primeiro caso de teste usando TestNG anotaรงรตes em SeleniumAntes de escrever o teste, configure um novo TestNG projeto em Eclipse e chame isso Primeiro nomeTestNGPROJETO.
Configurando um novo TestNG PROJETO
Passo 1) Clique Arquivo > Novo > Java PROJETO.
Passo 2) Entrar Primeiro nomeTestNGPROJETO como o nome do projeto e clique Seguinte.
Passo 3) Importe o TestNG bibliotecas. Clique no bibliotecas guia e, em seguida Adicionar Bibliotecaโฆ.
Passo 4) De acordo com o relatรณrio Adicionar biblioteca diรกlogo, escolha TestNG e clique Seguinte.
Passo 5) Clique Acabamento.
TestNG deverรก agora aparecer na lista de Bibliotecas.
Passo 6) Adicione os arquivos JAR que contรชm o Selenium API. Estes vรชm do Java driver do cliente baixado de selenium.dev/downloads.
Navegue atรฉ a pasta onde o Selenium Os arquivos JAR sรฃo armazenados.
Apรณs adicionar os arquivos JAR externos, a tela deverรก ficar assim.
Passo 7) Clique Acabamento. O novo Primeiro nomeTestNGPROJETO Aparece no Explorador de Pacotes.
Como criar um novo TestNG Arquivo de teste
Com o projeto pronto, crie um novo TestNG arquivo.
Passo 1) Clique com o botรฃo direito do mouse no src pasta e escolha Novo > Outrosโฆ.
Passo 2) Expandir o TestNG pasta, selecione TestNG classeE clique Seguinte.
Passo 3) Insira os valores mostrados abaixo e clique em Acabamento. O Java arquivo รฉ nomeado Primeiro nomeTestNGEnvie o.
Passo 4) Eclipse gera o TestNG Modelo mostrado abaixo.
Programando seu primeiro TestNG Caso de teste
Crie o primeiro caso de teste que verifica o tรญtulo do Mercury Pรกgina inicial de passeios.
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
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/";
public WebDriver driver;
@Test
public void verifyHomepageTitle() {
System.out.println("launching firefox browser");
// Selenium 4 ships Selenium Manager, so the driver path is no longer required.
driver = new FirefoxDriver();
driver.get(baseUrl);
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
driver.quit();
}
}
Coisas a observar:
- TestNG nรฃo precisa de um
main()mรฉtodo. - Os mรฉtodos nรฃo precisam ser estรกticos.
- O @Teste marcas de anotaรงรฃo
verifyHomepageTitle()como um caso de teste. - As anotaรงรตes ficam armazenadas no
org.testng.annotations.*pacote. - O Afirmar classe de
org.testng.Assertverificaรงรตes de unidades.
Vocรช pode ter vรกrias anotaรงรตes @Test em uma รบnica anotaรงรฃo. TestNG arquivo. Abordamos isso no โAnotaรงรตes usadas em TestNG" seรงรฃo.
Executando o teste
Clique com o botรฃo direito do mouse no arquivo e execute-o como um TestNG teste. Eclipse produz duas saรญdas โ um resultado em texto na janela do Console e um resultado grรกfico no TestNG Janela de resultados.
Verificando relatรณrios criados por TestNG
A janela do Console fornece um resumo baseado em texto, enquanto o TestNG A janela de resultados exibe uma visualizaรงรฃo grรกfica.
Gerando relatรณrios HTML
TestNG Tambรฉm pode gerar relatรณrios HTML completos.
Passo 1) Depois de correr Primeiro nomeTestNGEnvie o, clique com o botรฃo direito do mouse no projeto e escolha revisar.
Passo 2) A saรญda de teste A pasta aparecerรก. Expanda-a e localize index.html โ o relatรณrio HTML da execuรงรฃo mais recente.
Passo 3) Double-clique index.html para abri-lo por dentro Eclipsenavegador. Pressione F5 para atualizar apรณs execuรงรตes futuras.
Anotaรงรตes usadas em TestNG
Vocรช jรก viu a anotaรงรฃo @Test. O restante desta seรงรฃo aborda as anotaรงรตes avanรงadas mais รบteis.
Vรกrios casos de teste
Uma รบnica TestNG Um arquivo pode conter vรกrias anotaรงรตes `@Test`. Por padrรฃo, os mรฉtodos anotados com `@Test` sรฃo executados em ordem alfabรฉtica. No cรณdigo abaixo, os mรฉtodos c_test, a_test e b_test Executar em ordem alfabรฉtica, independentemente da ordem de origem.
Execute o cรณdigo e abra index.html. Clique Visรฃo cronolรณgica.
Parรขmetros Tรฉcnicos
Para substituir a ordem padrรฃo, use o priority parรขmetro. Os parรขmetros sรฃo palavras-chave que modificam o comportamento de uma anotaรงรฃo.
- Atribua um valor com
=. - Coloque os parรขmetros entre parรชnteses imediatamente apรณs a anotaรงรฃo, como mostrado abaixo.
TestNG Executa as anotaรงรตes @Test da prioridade mais baixa para a mais alta. Os nรบmeros de prioridade nรฃo precisam ser consecutivos.
O relatรณrio HTML confirma que os mรฉtodos foram executados em ordem crescente de prioridade.
Parรขmetros mรบltiplos
Alรฉm de priority, @Test aceita o alwaysRun parรขmetro (verdadeiro ou falso). Para usar dois ou mais parรขmetros em uma รบnica anotaรงรฃo, separe-os com uma vรญrgula:
@Test(priority = 0, alwaysRun = true)
@BeforeTest e @AfterTest
| @AntesTeste | Os mรฉtodos sob esta anotaรงรฃo sรฃo executados. antes do primeiro caso de teste no TestNG lima. |
| @DepoisTeste | Os mรฉtodos sob esta anotaรงรฃo sรฃo executados. depois de todos os casos de teste no TestNG arquivo finalizado. |
Considere o cรณdigo abaixo.
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
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/";
public WebDriver driver;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
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.quit();
}
}
A partir da tabela e do cรณdigo, podemos prever que a sequรชncia serรก:
- 1ยบ โ
launchBrowser() - 2ยบ โ
verifyHomepageTitle() - 3ยบ โ
terminateBrowser()
A posiรงรฃo dos blocos de anotaรงรฃo no arquivo fonte nรฃo afeta a ordem de execuรงรฃo. Tente reorganizar os mรฉtodos conforme mostrado abaixo.
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
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/";
public WebDriver driver;
@AfterTest // Jumbled
public void terminateBrowser() {
driver.quit();
}
@BeforeTest // Jumbled
public void launchBrowser() {
System.out.println("launching firefox browser");
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 e verifique o resultado.
@BeforeMethod e @AfterMethod
| @BeforeMethod | Os mรฉtodos sob esta anotaรงรฃo sรฃo executados. antes de cada mรฉtodo de teste. |
| @AfterMethod | Os mรฉtodos sob esta anotaรงรฃo sรฃo executados. apรณs cada mรฉtodo de teste. |
In Mercury Em "Tours", suponhamos que desejamos verificar os tรญtulos de duas pรกginas de destino acessadas a partir da pรกgina inicial.
O fluxo do teste รฉ o seguinte:
- Abra a pรกgina inicial e verifique o tรญtulo.
- Clique em CADASTRE-SE e verifique o tรญtulo da pรกgina de destino.
- Volte ร pรกgina inicial e verifique o tรญtulo.
- Clique em APOIO e verifique o tรญtulo da pรกgina de destino.
- Volte ร pรกgina inicial e verifique o tรญtulo novamente.
O cรณdigo abaixo mostra como @BeforeMethod e @AfterMethod lidam com as etapas repetidas.
package firsttestngpackage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
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/";
public WebDriver driver;
public String expected = null;
public String actual = null;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
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.quit();
}
}
Apรณs executar o teste, TestNG A sequรชncia apresentada รฉ a seguinte.
Resumindo: coloque as etapas de configuraรงรฃo dentro @BeforeMethod e limpeza ou reinicializaรงรฃo da navegaรงรฃo interna @AfterMethod Assim, cada caso de teste comeรงa e termina em um estado conhecido.
Resumo da TestNG Anotaรงรตes
- @BeforeSuite: ร executado antes de todos os testes do conjunto.
- @AfterSuite: ร executado apรณs todos os testes do conjunto.
- @AntesDoTeste: รฉ executado antes de qualquer mรฉtodo de teste pertencente ร s classes dentro de um marcaรงรฃo.
- @AfterTest: executa apรณs todos os mรฉtodos de teste pertencentes ร s classes dentro de um marcaรงรฃo.
- @BeforeGroups: ร executado logo antes do primeiro mรฉtodo de teste que pertence a qualquer grupo listado.
- @AfterGroups: ร executado logo apรณs o รบltimo mรฉtodo de teste que pertence a qualquer grupo listado.
- @AntesDaAula: ร executado antes do primeiro mรฉtodo de teste na classe atual.
- @AfterClass: ร executado apรณs todos os mรฉtodos de teste na classe atual.
- @BeforeMethod: Executa antes de cada mรฉtodo de teste.
- @AfterMethod: Executa apรณs cada mรฉtodo de teste.
- @Teste: marca o mรฉtodo como um caso de teste.


































