TestNG @Test Prioridade em Selenium
TestNG é um Ensaios framework, que cobre diferentes tipos de designs de teste, como teste de unidade, teste funcional, teste ponta a ponta, teste de UI e teste de integração.
Você pode executar um ou vários casos de teste em seu Teste código.
Se a prioridade do teste não for definida durante a execução de vários casos de teste, TestNG atribui a todos os @Test uma prioridade zero (0).
Agora, enquanto corre; prioridades mais baixas serão agendadas primeiro.
Demonstração de TestNG código sem prioridade
Vamos considerar um cenário em que o sequenciamento será necessário para passar em todos os casos de teste:
Cenário: Gere um código onde você será solicitado a realizar uma pesquisa no Google com uma palavra-chave específica, como “Facebook”. Agora, verifique se o título do navegador foi alterado para “Facebook – Pesquisa Google”.
Nota: Cada etapa que você codifica deve estar em métodos separados
Método 1: Abra o navegador, digamos Firefox (Navegador aberto())
Método 2: Inicie Google.com (launchGoogle())
Método 3: Faça uma pesquisa usando “Facebook” (performSearchAndClick1stLink())
Método 4: Verifique o título da página de pesquisa do Google (FaceBookPageTitleVerification())
Código para nosso cenário:
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 Priority_In_testNG { WebDriver driver; // Method 1: Open Brower say Firefox @Test public void openBrowser() { driver = new FirefoxDriver(); } // Method 2: Launch Google.com @Test public void launchGoogle() { driver.get("http://www.google.co.in"); } // Method 3: Perform a search using "Facebook" @Test public void peformSeachAndClick1stLink() { driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook"); } // Method 4: Verify Google search page title. @Test public void FaceBookPageTitleVerification() throws Exception { driver.findElement(By.xpath(".//*[@value='Search']")).click(); Thread.sleep(3000); Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true); } }
Explicação do Código
Conforme mencionado acima, criamos 4 casos de teste para executar cada ação de forma independente.
- O primeiro método (Navegador aberto) estados para inicializar Firefox navegador.
- O segundo método (lançar Google) afirma que o lançamento do Google.com está no navegador inicializado.
- O terceiro método (peformSeachAndClick1stLink)estados que realizam uma pesquisa na caixa de pesquisa (com xpath (“.//*[@title='Pesquisar']”) com um termo de pesquisa como Facebook e
- O quarto e último método (FaceBookPageTitleVerificação) afirma que clica no ícone de pesquisa do Google e verifica se o título do navegador foi alterado para Facebook – Pesquisa Google.
Agora execute este código usando testNG conforme mostrado no vídeo, você encontrará todos os Caso de teste estão falhando. O motivo da falha: como há uma dependência do caso de teste anterior para passar, somente o caso de teste em execução atual será aprovado.
Neste caso,
- O primeiro método executado é Navegador aberto(). Foi aprovado porque não tem nenhuma dependência.
- O segundo método executado é FaceBookPageTitleVerification(); está falhando porque estamos tentando clicar no botão de pesquisa e verificar o título do navegador.
- Você pode ver que, se a atividade de pesquisa não for processada, como qualquer outra etapa poderá ser aprovada. Portanto, esse é o motivo pelo qual meus casos de teste estão falhando.
PASSED: openBrowser FAILED: FaceBookPageTitleVerification FAILED: launchGoogle FAILED: peformSeachAndClick1stLink
Demonstração de TestNG código sem prioridade em ordem alfabética
Se não mencionarmos nenhuma prioridade, testng executará os métodos @Test com base na ordem alfabética dos nomes dos métodos, independentemente do local de implementação no código.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test public void c_method(){ System.out.println("I'm in method C"); } @Test public void b_method(){ System.out.println("I'm in method B"); } @Test public void a_method(){ System.out.println("I'm in method A"); } @Test public void e_method(){ System.out.println("I'm in method E"); } @Test public void d_method(){ System.out.println("I'm in method D"); } }
saída
I'm in method A I'm in method B I'm in method C I'm in method D I'm in method E
Embora tenhamos definido os métodos de maneira aleatória (c, b, a, e, d), testng executou os métodos com base em seus nomes de métodos, considerando a ordem alfabética e o mesmo também foi refletido na saída.
Como definir prioridade em TestNG
Como você viu no exemplo anterior, o sequenciamento é necessário para passar neste cenário, estaremos modificando o trecho de código anterior com Parâmetro de prioridade para que cada teste seja executado de acordo com a prioridade atribuída a eles.
Agora, como você pode ver, atribuímos a Prioridade a cada caso de teste, o que significa que o caso de teste com o valor de prioridade mais baixo será executado primeiro.
Prioridade no testNG em ação
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 Priority_In_testNG { WebDriver driver; // Method 1: Open Browser say Firefox @Test (priority=1) public void openBrowser() { driver = new FirefoxDriver(); } // Method 2: Launch Google.com @Test (priority=2) public void launchGoogle() { driver.get("http://www.google.co.in"); } // Method 3: Perform a search using "Facebook" @Test (priority=3) public void peformSeachAndClick1stLink() { driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook"); } // Method 4: Verify Google search page title. @Test (priority=4) public void FaceBookPageTitleVerification() throws Exception { driver.findElement(By.xpath(".//*[@value='Search']")).click(); Thread.sleep(3000); Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true); } }
Explicação do Código
Depois de atribuir prioridade a cada caso de teste, execute o código acima usando testNG conforme mostrado no Vídeo 2 mencionado abaixo.
Aqui você pode ver que os casos de teste são priorizados. Os casos de teste com prioridade mais baixa são executados primeiro, ou seja, agora há uma execução sequencial de acordo com a prioridade nos casos de teste. Portanto, todos os casos de teste estão passando agora.
Observe o console do Eclipse:
saída :
PASSED: openBrowser PASSED: launchGoogle PASSED: peformSearchAndClick1stLink PASSED: FaceBookPageTitleVerification
O número 0 tem a prioridade mais alta (será executado primeiro) e a prioridade continua com base no número fornecido, ou seja, 0 tem a prioridade mais alta que 1. 1 tem a prioridade mais alta que 2 e assim por diante.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test(priority=6) public void c_method(){ System.out.println("I'm in method C"); } @Test(priority=9) public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=1) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=3) public void d_method(){ System.out.println("I'm in method D"); } }
saída
I'm in method E I'm in method A I'm in method D I'm in method C I'm in method B
Aqui fornecemos as prioridades como 0,1,3,6,9. Portanto, o método com prioridade 0 é executado primeiro e depois o método com prioridade 1 e assim por diante. Aqui o nome do método em ordem alfabética não será considerado, pois fornecemos as prioridades
Métodos com Mesma Prioridade
Pode haver uma chance de que os métodos contenham a mesma prioridade. Nesses casos, testng considera a ordem alfabética dos nomes dos métodos cuja prioridade é a mesma.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test(priority=6) public void c_method(){ System.out.println("I'm in method C"); } @Test(priority=9) public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=6) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=3) public void d_method(){ System.out.println("I'm in method D"); } }
saída
I'm in method E I'm in method D I'm in method A I'm in method C I'm in method B
Aqui 'e' e 'd' são executados com base em seus valores de prioridade. Mas os métodos 'a' e 'c' contêm o mesmo valor de prioridade(6). Portanto, aqui o testng considera a ordem alfabética de 'a' e 'c' e os executa de acordo.
Combinando métodos priorizados (com a mesma prioridade) e não priorizados
Neste caso, cobriremos dois casos em uma classe de teste.
- Métodos com o mesmo valor de prioridade.
- Mais de um método não priorizado.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test() public void c_method(){ System.out.println("I'm in method C"); } @Test() public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=6) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=6) public void d_method(){ System.out.println("I'm in method D"); } }
Saída:
I'm in method B I'm in method C I'm in method E I'm in method A I'm in method D
PASSED: b_method PASSED: c_method PASSED: e_method PASSED: a_method PASSED: d_method
Explicação:
Primeira preferência: Métodos não priorizados: 'c' e 'b': Baseados na ordem alfabética, 'b' foi executado primeiro e depois 'c'.
Segunda preferência: Métodos priorizados: 'a', 'e' e 'd': 'e' foi executado primeiro porque tinha prioridade mais alta (0). Como a prioridade dos métodos 'a' e 'd' eram iguais, o testng considerou a ordem alfabética dos nomes dos métodos. Então, entre eles, 'a' foi executado primeiro e depois 'd'.
Diferencia maiúsculas de minúsculas em TestNG
Apenas para sua informação, existe uma sintaxe padrão para definir a prioridade no testNG, ou seja @Teste (prioridade=4), suponha que você esteja definindo em alguma outra sintaxe, digamos @Teste (PRIORIDADE=1) então seu IDE mostrará isso como um erro de compilação. Consulte a imagem abaixo:
Conclusão
Como você viu, se houver um requisito para executar um conjunto de casos de teste em uma sequência específica, isso poderá ser feito facilmente usando Prioridade usando testNG como uma ferramenta de execução.
Este tutorial foi possível devido às contribuições de Ramandeep Singh e Rama Krishna Gade