Selênio - TestNG

TestNG é uma estrutura de teste poderosa, uma versão aprimorada de JUnit que estava em uso por muito tempo antes de TestNG existir. NG significa 'Next Generation'.

A estrutura TestNG fornece os seguintes recursos -

  • As anotações nos ajudam a organizar os testes facilmente.
  • Configuração de teste flexível.
  • Os casos de teste podem ser agrupados mais facilmente.
  • A paralelização de testes pode ser alcançada usando TestNG.
  • Suporte para testes baseados em dados.
  • Relatórios embutidos.

Instalando TestNG para Eclipse

Step 1 - Inicie o Eclipse e selecione 'Instalar Novo Software'.

Step 2 - Insira o URL como 'http://beust.com/eclipse' e clique em 'Adicionar'.

Step 3- A caixa de diálogo 'Adicionar Repositório' é aberta. Digite o nome como 'TestNG' e clique em 'OK'

Step 4 - Clique em 'Selecionar tudo' e 'TestNG' será selecionado conforme mostrado na figura.

Step 5 - Clique em 'Avançar' para continuar.

Step 6 - Revise os itens selecionados e clique em 'Avançar'.

Step 7 - "Aceite o Contrato de Licença" e clique em 'Concluir'.

Step 8 - TestNG começa a instalar e o progresso seria mostrado a seguir.

Step 9- Um aviso de segurança é exibido porque a validade do software não pode ser estabelecida. Clique OK'.

Step 10- O Instalador solicita que reinicie o Eclipse para que as alterações tenham efeito. Clique em 'Sim'.

Anotações em TestNG

As anotações foram formalmente adicionadas à linguagem Java no JDK 5 e TestNG fez a escolha de usar anotações para anotar as classes de teste. A seguir estão alguns dos benefícios do uso de anotações. Mais sobre TestNG pode ser encontradohere

  • TestNG identifica os métodos nos quais está interessado, consultando as anotações. Conseqüentemente, os nomes dos métodos não estão restritos a nenhum padrão ou formato.

  • Podemos passar parâmetros adicionais para anotações.

  • As anotações são fortemente tipadas, então o compilador irá sinalizar quaisquer erros imediatamente.

  • As classes de teste não precisam mais estender nada (como TestCase, para JUnit 3).

Sr. Não. Anotação e descrição
1

@BeforeSuite

O método anotado será executado apenas uma vez antes de todos os testes deste conjunto serem executados.

2

@AfterSuite

O método anotado será executado apenas uma vez após a execução de todos os testes neste conjunto.

3

@BeforeClass

O método anotado será executado apenas uma vez antes que o primeiro método de teste na classe atual seja chamado.

4

@AfterClass

O método anotado será executado apenas uma vez depois que todos os métodos de teste na classe atual forem executados.

5

@BeforeTest

O método anotado será executado antes que qualquer método de teste pertencente às classes dentro da tag <test> seja executado.

6

@AfterTest

O método anotado será executado depois que todos os métodos de teste pertencentes às classes dentro da tag <test> forem executados.

7

@BeforeGroups

A lista de grupos que este método de configuração executará antes. A execução desse método é garantida logo antes que o primeiro método de teste pertencente a qualquer um desses grupos seja chamado.

8

@AfterGroups

A lista de grupos após os quais este método de configuração será executado. É garantido que este método seja executado logo após o último método de teste pertencente a qualquer um desses grupos ser chamado.

9

@BeforeMethod

O método anotado será executado antes de cada método de teste.

10

@AfterMethod

O método anotado será executado após cada método de teste.

11

@DataProvider

Marca um método como fornecedor de dados para um método de teste. O método anotado deve retornar um Object [] [] onde cada Object [] pode ser atribuído à lista de parâmetros do método de teste. O método @Test que deseja receber dados deste DataProvider precisa usar um nome dataProvider igual ao nome desta anotação.

12

@Factory

Marca um método como uma fábrica que retorna objetos que serão usados ​​pelo TestNG como classes de teste. O método deve retornar Object [].

13

@Listeners

Define ouvintes em uma classe de teste.

14

@Parameters

Descreve como passar parâmetros para um método @Test.

15

@Test

Marca uma classe ou método como parte do teste.

Configuração do TestNG-Eclipse

Step 1 - Inicie o Eclipse e crie um 'Novo Projeto Java' conforme mostrado abaixo.

Step 2 - Insira o nome do projeto e clique em 'Avançar'.

Step 3 - Navegue até a guia "Bibliotecas" e adicione o arquivo JAR do servidor de controle remoto Selenium clicando em "Adicionar JARs externos" conforme mostrado abaixo.

Step 4- O arquivo JAR adicionado é mostrado aqui. Clique em 'Adicionar biblioteca'.

Step 5- A caixa de diálogo 'Adicionar biblioteca' é aberta. Selecione 'TestNG' e clique em 'Avançar' na caixa de diálogo 'Adicionar biblioteca'.

Step 6 - A biblioteca 'TestNG' adicionada é adicionada e exibida conforme mostrado abaixo.

Step 7 - Ao criar o projeto, a estrutura do projeto seria conforme mostrado abaixo.

Step 8 - Clique com o botão direito na pasta 'src' e selecione Novo >> Outro.

Step 9 - Selecione 'TestNG' e clique em 'Avançar'.

Step 10 - Selecione o nome da 'Pasta de origem' e clique em 'Ok'.

Step 11 - Selecione o 'Nome do pacote', o 'nome da classe' e clique em 'Concluir'.

Step 12 - O Package explorer e a classe criada seriam exibidos.

Primeiro teste em TestNG

Agora vamos começar a criar scripts usando TestNG. Vamos criar um script para o mesmo exemplo que usamos para entender o WebDriver. Usaremos o aplicativo de demonstração, www.calculator.net , e realizaremos a calculadora de porcentagem.

No teste a seguir, você notará que NÃO existe nenhum método principal, pois o testNG conduzirá o fluxo de execução do programa. Após inicializar o driver, ele executará o método '@BeforeTest' seguido por '@Test' e então '@AfterTest'. Observe que pode haver qualquer número de anotações '@Test' em uma classe, mas '@BeforeTest' e '@AfterTest' podem aparecer apenas uma vez.

package TestNG;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;

import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class TestNGClass {
   WebDriver driver = new FirefoxDriver();
   
   @BeforeTest
   public void launchapp() {
      // Puts an Implicit wait, Will wait for 10 seconds before throwing exception
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      
      // Launch website
      driver.navigate().to("http://www.calculator.net");
      driver.manage().window().maximize();
   }
   
   @Test
   public void calculatepercent() {
      // Click on Math Calculators
      driver.findElement(By.xpath(".//*[@id='menu']/div[3]/a")).click();
      
      // Click on Percent Calculators
      driver.findElement(By.xpath(".//*[@id='menu']/div[4]/div[3]/a")).click();
      
      // Enter value 10 in the first number of the percent Calculator
      driver.findElement(By.id("cpar1")).sendKeys("10");
      
      // Enter value 50 in the second number of the percent Calculator
      driver.findElement(By.id("cpar2")).sendKeys("50");
      
      // Click Calculate Button
      driver.findElement(By.xpath(".//*[@id='content']/table/tbody/tr/td[2]/input")).click();
      
      // Get the Result Text based on its xpath
      String result =
         driver.findElement(By.xpath(".//*[@id='content']/p[2]/span/font/b")).getText();
      
      // Print a Log In message to the screen
      System.out.println(" The Result is " + result);
      
      if(result.equals("5")) {
         System.out.println(" The Result is Pass");
      } else {
         System.out.println(" The Result is Fail");
      }
   }
   
   @AfterTest
   public void terminatetest() {
      driver.close();
   }
}

Execução

Para executar, clique com o botão direito no XML criado e selecione "Executar como" >> "TestNG Suite"

Análise de Resultado

A saída é enviada para o console e aparecerá conforme mostrado abaixo. A saída do console também possui um resumo de execução.

O resultado do TestNG também pode ser visto em uma guia diferente. Clique no botão 'Visualização de relatório HTML' conforme mostrado abaixo.

O resultado HTML seria exibido conforme mostrado abaixo.