Grupos de teste – incluir e excluir (exemplo)

TestNG é uma estrutura de teste que cobre diferentes tipos de designs de teste, como testes unitários, funcionais, ponta a ponta, UI e testes de integração.

Você pode executar pacotes únicos ou múltiplos (pacote aqui significa encapsular um grupo de classes em um formato de diretor adequado) criando XML e executando-o através do maven.

Grupos TestNG com exemplo

Usamos grupos em Teste quando,

  • Não queremos definir métodos de teste separadamente em classes diferentes (dependendo da funcionalidade) e
  • Ao mesmo tempo, deseja ignorar (não executar) alguns casos de teste como se eles não existissem no código.
  • Então para fazer isso temos que agrupá-los. Isso é feito usando os mecanismos “incluir” e “excluir” suportados no testNG.

No exemplo abaixo, mostramos a sintaxe de como usar grupos no arquivo XML.

@Test (groups = { "bonding", "strong_ties" })

Aqui estamos usando 2 nomes de grupos, ou seja, “bonding” e “strong_ties” (estes são os nomes lógicos que podem ser alterados conforme seu desejo).

<groups> tag define o início dos grupos em XML.

Personalize seu XML para escolher o grupo mencionado nas classes de teste. Abaixo mencionada está a sintaxe de como declarar grupos em um arquivo XML, por exemplo

 <groups>		
   <run>		
    <include name="bonding" />		
   </run>		
  </groups>		

Então, vamos supor que existam 10 métodos de teste em uma classe.

Fora deles,

  • 6 métodos são marcados no grupo “ligação” e
  • 4 estão no grupo “strong_ties”

Seguindo em frente, vamos definir o caminho maven/Java e usar o Eclipse IDE para demonstrar o uso de grupos usando arquivos XML em Java projeto maven baseado.

Crie XML para TestNG com tags

  • O arquivo XML (Extensible Markup Language) na estrutura Maven contém as informações de um ou mais testes e é definido pelo marcação.
  • As informações de teste em XML são representadas por marcação e pode conter uma ou mais classes TestNG.
  • Uma classe Java que contém @Teste a anotação acima dos métodos de teste é definida como métodos TestNG.

Várias tags são usadas em uma sequência para construir um xml testNG funcional como , e

  • Primeiro é tag, que contém um nome lógico que define informações completas para testNG relatadas para gerar relatório de execução.
  • O segundo é , observe que é o nome lógico que contém as informações do relatório de execução de teste, como aprovação, reprovação, pular casos de teste e outras informações, como tempo total de execução e informações do grupo
  • Terceiro écom.group.guru99.TC_Class1”/>, com.group.guru99 é o pacote usado e o nome da classe de teste é TC_Class1.
<?xml version="1.0" encoding="UTF-8" ?>	
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">	
 	<suite name="Suite">	
		<test name="Guru 99 Smoke Test Demo">	
			<groups>	
				<run>	
   					 <include name="strong_ties" />	
        		</run>	
       		</groups>	
			<classes>	
					<class name="com.group.guru99.TC_Class1" />	
           	</classes>	
		</test>	
  </suite>	

Estaremos usando este XML para o próximo vídeo fornecido nas seções abaixo.

“excluir” ou “incluir” no XML de teste

Suponha que você esteja descobrindo o uso do mecanismo de grupo complex então testNG XML facilita a funcionalidade para excluir/incluir um teste.

Exclude Tag:  Syntax for exclude tag <exclude name="${TEST_CASE_NAME}" />
Include Tag:  Syntax for include tag <include name="${TEST_CASE_NAME}" />

Nota: Podemos incluir/excluir vários casos de teste uma vez por vez, o que também funciona com Grupos.

Execute TestNG Group, inclua, exclua código (demonstração em vídeo)

Explicação do código Java e XML com o agrupar, excluir e incluir a tag em XML.

Cenário de Teste: Inicie o site de demonstração do Guru99 Banking, verifique algumas coisas na página de login depois disso, insira as credenciais e verifique novamente algumas coisas novas no aplicativo quando estiver conectado.

Execute o grupo TestNG, inclua, exclua o código

Nota: Cada etapa que você codifica deve ser declarada em métodos separados, mas quando executada, ela executará métodos de teste dependendo das entradas no arquivo XML.

  • Método 1: Inicialize o navegador e inicie o URL (tc01LaunchURL())
  • Método 2: Verifique o título da página de login (tc02VerifyLaunchPage())
  • Método 3: Digite o nome de usuário e a senha no formulário de login (tc03EnterCredentials())
  • Método 4: Verifique a presença do ID do gerente no painel do usuário (tc04VerifyLoggedInPage())
  • Método 5: Verifique mais alguns links no User DashBoard (tc05VerifyHyperlinks())

Código para nosso cenário:

package com.group.guru99;	

import java.util.concurrent.TimeUnit;	

import org.openqa.selenium.By;	
import org.openqa.selenium.WebDriver;	
import org.openqa.selenium.firefox.FirefoxDriver;	
import org.testng.Assert;	
import org.testng.annotations.Test;	

public class TC_Class1 {	
    public static final WebDriver webDriver = new FirefoxDriver();;	

    String launchPageHeading = "//h3[text()='Guru99 Bank']";	
    final String userName_element = "//input[@name='uid']", password_element = "//input[@name='password']",	
            signIn_element = "//input[@name='btnLogin']";	
    final String userName_value = "mngr28642", password_value = "ydAnate";	
    final String managerID = "//td[contains(text(),'Manger Id')]";	
    final String newCustomer = "//a[@href='addcustomerpage.php']", fundTransfer = "//a[@href='FundTransInput.php']";	

    /**	
     * This test case will initialize the webDriver	
     */	
    @Test(groups = { "bonding", "strong_ties" })	
    public void tc01LaunchURL() {	
        webDriver.manage().window().maximize();	
        webDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);	
        webDriver.get("http://www.demo.guru99.com/V4/");	
    }	

    /**	
     * Will check the presence of Heading on Login Page	
     */	
    @Test(groups = { "bonding" })	
    public void tc02VerifyLaunchPage() {	
        Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),	
                "Home Page heading is not displayed");	
        System.out.println("Home Page heading is displayed");	
    }	

    /**	
     * This test case will enter User name, password and will then click on	
     * signIn button	
     */	
    @Test(groups = { "bonding", "strong_ties" })	
    public void tc03EnterCredentials() {	
        webDriver.findElement(By.xpath(userName_element)).sendKeys(userName_value);	
        webDriver.findElement(By.xpath(password_element)).sendKeys(password_value);	
        webDriver.findElement(By.xpath(signIn_element)).click();	
    }	

    /**	
     * This test case will verify manger's ID presence on DashBoard	
     */	
    @Test(groups = { "strong_ties" })	
    public void tc04VerifyLoggedInPage() {	
        Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),	
                "Manager ID label is not displayed");	
        System.out.println("Manger Id label is displayed");	
    }	

    /**	
     * This test case will check the presence of presence of New customer link	
     * And FundTransfer link in Left pannel	
     */	
    @Test(groups = { "bonding" })	
    public void tc05VerifyHyperlinks() {	
        Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),	
                "New customer hyperlink is not displayed");	
        System.out.println("New customer hyperlink is displayed");	

        Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),	
                "Fund Transfer hyperlink is not displayed");	
        System.out.println("Fund Transfer hyperlink is displayed");	
    }	

}	

Observação: as credenciais são válidas apenas por 20 dias, portanto, se você tentar executar o código em sua máquina local, poderá enfrentar um erro de credenciais inválidas.

Explicação do Código:

Conforme mencionado acima, criamos 5 casos de teste para realizar cada ação em métodos independentes.

Para cada método, associamos um parâmetro de grupo a algum valor.

Basicamente, estes são os nomes dos grupos diferenciadores, ou seja, “strong_ties” e “bonding”.

  • O primeiro e o terceiro métodos são marcados como “bonding”, “strong_ties”, o que significa que se o XML for atualizado em qualquer grupo, isso Caso de teste correrá.
  • O segundo método é marcado apenas como grupo “ligação”, significa que se o XML for atualizado com o grupo de ligação. Somente nesse caso este caso de teste será executado.
  • O quarto caso de teste é marcado para o grupo strong_ties, o que significa que este caso de teste só será executado se o XML for atualizado com o nome do grupo strong_ties.
  • Por último, mas não menos importante, o quinto caso de teste é anexado ao grupo de ligação, o que significa que este caso de teste só será executado se o XML for atualizado com o nome do grupo de ligação.

Portanto, no geral, temos 4 cenários;

Cenário 1: Queremos executar todos os casos de teste, independentemente do nome do grupo. Nesse caso, removeremos a tag Group da execução do XML.

Cenário 2: Queremos executar alguns testes relacionados apenas a qualquer um dos grupos, ou seja, strong_ties ou bonding. Consulte:

  • Neste vídeo, o parâmetro Group é comentado na execução do XML. Portanto, você verá que todos os casos de teste foram executados.
  • Na continuação do vídeo, agora que incluímos o nome do grupo em XML, você pode ver apenas os casos de teste específicos daquele grupo que está em execução.

Cenário 3: Estamos usando o mecanismo Excluir para excluir o caso de teste. Consulte o vídeo

  • Você vê que usamos excluir alguns casos de teste (tc02) escrevendo seus nomes em XML em execução. No resultado final, os casos de teste mencionados não foram executados.

Cenário 4: Por último, estamos usando o mecanismo de teste de inclusão para incluir os casos de teste (tc01LaunchURL, tc03EnterCredentials e tc05VerifyHyperlinks). Consulte o vídeo

Neste vídeo, você verá que os casos de teste mencionados em XML só são executados durante a execução do teste.

Faça o download do código do código do exemplo acima-

Baixe o código acima

Conclusão

Aprendemos aqui uma maneira relativamente nova de executar casos de teste usando XML no projeto Maven.

Começamos fornecendo uma breve introdução ao testNG e continuamos com a especificação técnica completa dos Grupos, excluem e incluem.