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.

  • ๐Ÿงฑ Estrutura principal: TestNG se estende JUnit ideias com anotaรงรตes, grupopinge execuรงรฃo de testes em paralelo para Selenium suรญtes.
  • ๐Ÿท๏ธ As anotaรงรตes orientam o fluxo de trabalho: As sequรชncias @Test, @BeforeMethod, @AfterMethod, @BeforeTest e @AfterTest configuram, testam e finalizam o processo.
  • ๐Ÿ—‚๏ธ Eclipse Configuraรงรฃo: Construir um TestNG projeto, adicione o TestNG biblioteca e Selenium Em seguida, crie arquivos JAR e gere classes de teste a partir do assistente.
  • ๐Ÿ“Š Relatรณrio: TestNG Gera relatรณrios em texto, grรกficos e HTML na pasta test-output, incluindo visualizaรงรตes cronolรณgicas.
  • โš™๏ธ parรขmetros: Use priority, alwaysRun e dataProvider para controlar a ordem de execuรงรฃo e fornecer dados aos testes.
  • ๐Ÿค– Aumento de IA: Assistentes de codificaรงรฃo com IA aceleram TestNG Geraรงรฃo de classes, atualizaรงรตes de localizadores e estruturaรงรฃo do dataProvider.

TestNG Tutorial

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.xml arquivo no test-output pasta. 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.xml arquivo, 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 Exemplo de relatรณrio HTML para Selenium testes

  • 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.

Usual Java estrutura de classe de teste com mรฉtodo principal

TestNG estrutura de classe de teste usando anotaรงรตes

  • 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.

Exemplo TestNG anotaรงรฃo acima de um Java mรฉtodo

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:

  1. Escreva a lรณgica do seu negรณcio e coloque-a no lugar certo. TestNG Anotaรงรตes acima de cada mรฉtodo.
  2. Adicione metadados como nome da classe, nome do grupo e nome do pacote.
  3. 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.

Eclipse menu para criar um novo Java projeto

Passo 2) Entrar Primeiro nomeTestNGPROJETO como o nome do projeto e clique Seguinte.

New Java assistente de projeto com o nome PrimeiroTestNGPROJETO

Passo 3) Importe o TestNG bibliotecas. Clique no bibliotecas guia e, em seguida Adicionar Bibliotecaโ€ฆ.

Aba Bibliotecas com opรงรฃo Adicionar Biblioteca em Eclipse

Passo 4) De acordo com o relatรณrio Adicionar biblioteca diรกlogo, escolha TestNG e clique Seguinte.

Selecionando TestNG na caixa de diรกlogo Adicionar Biblioteca

Passo 5) Clique Acabamento.

Finalizando o assistente Adicionar Biblioteca

TestNG deverรก agora aparecer na lista de Bibliotecas.

TestNG visรญvel 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.

Caixa de diรกlogo Adicionar JARs externos em Eclipse

Navegue atรฉ a pasta onde o Selenium Os arquivos JAR sรฃo armazenados.

Selecionando Selenium Arquivos JAR para o caminho de construรงรฃo

Apรณs adicionar os arquivos JAR externos, a tela deverรก ficar assim.

Selenium Arquivos JAR adicionados ร  lista de Bibliotecas

Passo 7) Clique Acabamento. O novo Primeiro nomeTestNGPROJETO Aparece no Explorador de Pacotes.

Primeiro nomeTestNGProjeto visรญvel 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โ€ฆ.

Novo menu "Outros" da pasta src em Eclipse

Passo 2) Expandir o TestNG pasta, selecione TestNG classeE clique Seguinte.

TestNG opรงรฃo de classe no assistente Novo

Passo 3) Insira os valores mostrados abaixo e clique em Acabamento. O Java arquivo รฉ nomeado Primeiro nomeTestNGEnvie o.

TestNG mago de classe com PrimeiroTestNGValores do arquivo

Passo 4) Eclipse gera o TestNG Modelo mostrado abaixo.

Gerado TestNG modelo de classe em Eclipse editor

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.Assert verificaรงรต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.

TestNG Janela de resultados com o resultado do teste

Eclipse Janela de console com TestNG saรญda de texto

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.

Texto versus grรกfico TestNG comparaรงรฃo de resultados

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.

Opรงรฃo de atualizaรงรฃo para o TestNG projeto em Eclipse

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.

Pasta de saรญda de teste com o arquivo index.html destacado

Passo 3) Double-clique index.html para abri-lo por dentro Eclipsenavegador. Pressione F5 para atualizar apรณs execuรงรตes futuras.

TestNG Relatรณrio de รญndice HTML renderizado em Eclipse

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.

Vรกrios mรฉtodos @Test em um รบnico TestNG classe

Execute o cรณdigo e abra index.html. Clique Visรฃo cronolรณgica.

Visรฃo cronolรณgica de mรบltiplos TestNG mรฉtodos

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 anotaรงรฃo com sintaxe de parรขmetro e valor

TestNG Executa as anotaรงรตes @Test da prioridade mais baixa para a mais alta. Os nรบmeros de prioridade nรฃo precisam ser consecutivos.

Cรณdigo completo com parรขmetros de prioridade @Test

O relatรณrio HTML confirma que os mรฉtodos foram executados em ordem crescente de prioridade.

TestNG Relatรณrio mostrando os mรฉtodos 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)

Exemplo de mรบltiplos parรขmetros dentro de uma anotaรงรฃo @Test

@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.

TestNG Resultado confirmando a ordem apesar das anotaรงรตes confusas.

@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.

Trรชs links de Mercury Pรกgina inicial dos passeios

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.

TestNG sequรชncia de relatรณrios usando BeforeMethod e AfterMethod

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.

Perguntas Frequentes

JUnit 5 modernizados JUnit Com a API Jupiter e o modelo de extensรฃo. TestNG ainda lidera em execuรงรฃo paralela, agrupamento em nรญvel de suรญteping, dependeDe e ProvedorDeDados. Muitos Selenium equipes escolhem TestNG para suรญtes de ponta a ponta e JUnit 5 para testes unitรกrios.

Adicione parallel="methods" ou parallel="classes" mais um atributo thread-count ao tag dentro de testng.xml. TestNG Em seguida, distribui os mรฉtodos de teste entre threads, ideal para Selenium Execuรงรตes em grade ou nuvem compatรญveis com vรกrios navegadores.

O `@DataProvider` alimenta vรกrios conjuntos de dados em um รบnico mรฉtodo `@Test`. Cada linha no provedor representa uma execuรงรฃo. Este รฉ o padrรฃo para aprendizado de mรกquina orientado a dados. Selenium Testes em formulรกrios, caixas de pesquisa ou telas de login.

Sim. Travas deslizantes portรกteis AI assistentes de codificaรงรฃo geram TestNG Criar esqueletos, anotar mรฉtodos @Test, construir classes de Page Object e elaborar arrays DataProvider a partir de arquivos CSV de exemplo, reduzindo drasticamente o tempo de criaรงรฃo de scaffolding.

A IA generativa ingere o arquivo testng-results.xml e os logs do Surefire, agrupa falhas semelhantes, sugere possรญveis causas raiz e cria rascunhos de tickets no Jira. Isso agiliza a triagem de testes instรกveis โ€‹โ€‹e ajuda os lรญderes de QA a priorizar correรงรตes de CI.

Resuma esta postagem com: