TestNG @Test Prioridade em Selenium
TestNG รฉ um Testes 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รช precise executar uma Google Faรงa uma busca com uma palavra-chave especรญfica, por exemplo, โFacebookโ. Agora, verifique se o tรญtulo do navegador foi alterado para โFacebook โ Google Procurar".
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: Lanรงar Google.com (lanรงamento)Google()
Mรฉtodo 3: Faรงa uma pesquisa usando โFacebookโ (performSearchAndClick1stLink())
Mรฉtodo 4: Verificar Google tรญtulo da pรกgina de pesquisa (FaceBookPageTitleVerification())
Code para o 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 de Code
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รงarGoogle) estados que lanรงam 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) estados que clicam no รญcone de pesquisa de Google e verifique se o tรญtulo do navegador foi alterado para Facebook - Google Pesquisa
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 de Code
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

