Pepino - Tags

Parece simples quando temos apenas um, dois ou talvez cinco cenários em um arquivo de recurso. No entanto, na vida real isso não acontece. Para cada recurso em teste, podemos ter 10, 20 ou mais cenários em um único arquivo de recurso. Eles podem representar finalidades diferentes (teste de fumaça / teste de regressão), perspectivas diferentes (Desenvolvedor / QA / BA), status diferentes (Pronto para execução / Trabalho em andamento), etc. Como gerenciar a execução para tal massa?

Para isso, a Cucumber já disponibilizou uma forma de organizar a execução do seu cenário usando tags no arquivo de feições. Podemos definir cada cenário com uma tag útil. Posteriormente, no arquivo runner, podemos decidir qual tag específica (e assim como o (s) cenário (s)) que queremos que o Cucumber execute. A etiqueta começa com “@”. Depois de “@” você pode ter qualquer texto relevante para definir sua tag. Vamos entender isso com um exemplo.

Suponha que haja dois ou mais cenários em um arquivo de feição. Queremos executar apenas um cenário como parte do teste de fumaça. Portanto, a primeira coisa é identificar esse cenário e a segunda é marcá-lo com o texto “@SmokeTest” no início do cenário. Vamos dar uma olhada nisso -

Step 1 - Crie um projeto Maven denominado como cucumberTag.

Step 2- Crie um pacote chamado cucumberTag debaixo src/test/java

Step 3- Crie um arquivo de feição chamado cucumberTag.feature.

Escreva o seguinte texto dentro do arquivo e salve-o. Este arquivo de recurso contém dois cenários onde apenas um foi marcado comoSmokeTest tag.

Feature - Etiqueta Pepino

Scenario Outline - Funcionalidade de login para um site de rede social.

Dado que o usuário navega para o Facebook

Quando eu insiro o nome de usuário como "<username>" e a senha como "<senha>"

Então o login deve ser malsucedido

Exemplos

| username  | password  | 
| username1 | password1 | 
| username2 | password2 |

#seguinte cenário foi marcado como SmokeTest e deve ser executado. @Teste de fumaça

Scenario:

Dado que o usuário navega para o Facebook

Quando eu insiro o nome de usuário como "<>" e a senha como "<>"

Em seguida, o usuário deve ser redirecionado para uma nova tentativa de login

Step 4 - Crie um arquivo de definição de etapa.

  • Selecione e clique com o botão direito no esboço do pacote.

  • Clique em 'Novo' arquivo.

  • Dê ao arquivo um nome como cucumberTag.java

  • Escreva o seguinte texto dentro do arquivo e salve-o.

package cucumberTag;
 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 

import cucumber.annotation.en.Given; 
import cucumber.annotation.en.Then; 
import cucumber.annotation.en.When; 

public class cucumberTag { 
   WebDriver driver = null; 
	
   @Given("^user navigates to facebook$") 
   public void goToFacebook() { 
      driver = new FirefoxDriver(); 
      driver.navigate().to("https://www.facebook.com/"); 
   } 
	
   @When("^I enter Username as \"([^\"]*)\" and Password as \"([^\"]*)\"$") 
   public void I_enter_Username_as_and_Password_as(String arg1, String arg2) {
      driver.findElement(By.id("email")).sendKeys(arg1);
      driver.findElement(By.id("pass")).sendKeys(arg2);
      driver.findElement(By.id("u_0_v")).click(); 
   } 
	
   @Then("^login should be unsuccessful$") 
   public void validateRelogin() { 
      if(driver.getCurrentUrl().equalsIgnoreCase(
         "https://www.facebook.com/login.php?login_attempt=1&lwv=110")){ 
            System.out.println("Test Pass"); 
      } else { 
         System.out.println("Test Failed"); 
      }
      driver.close(); 
   } 
	
   @Then("^User should be redirected to login retry$") 
   public void loginRetry() { 
      if(driver.getCurrentUrl().equalsIgnoreCase(
         "https://www.facebook.com/login.php?login_attempt=1&lwv=110")){ 
            System.out.println("Test Pass"); 
      } else { 
         System.out.println("Test Failed"); 
      } 
      driver.close(); 
   } 
}

Step 5 - Crie um arquivo de classe de corredor.

  • Crie uma classe de corredor chamada runTest.java dentro da embalagem.

  • Escreva o seguinte código.

  • Salve o arquivo.

package cucumberTag;
 
import org.junit.runner.RunWith; 
import cucumber.junit.Cucumber; 

@RunWith(Cucumber.class) 
@Cucumber.Options(format = {"pretty", "html:target/cucumber"}) 

public class runTest { }
  • Execute a opção de teste.

  • Clique com o botão direito e selecione a opção ‘Run as’.

  • Selecione o teste JUnit.

Você observará o seguinte ao executar este arquivo de classe.

  • O Facebook é aberto em uma nova instância do navegador Firefox.

  • Nenhum valor será fornecido para o campo de nome de usuário e senha.

  • O login será clicado.

  • A página de nova tentativa de login será carregada.

Não há limite na definição de tags dentro do arquivo de feição. Com base em sua necessidade, você pode derivar tags a serem usadas e cenários a serem executados.

Existem basicamente dois tipos de tag -

  • Default tag- A tag padrão tem seus significados predefinidos. Exemplo @ Dev, @ Ignore

  • Custom tag - A tag personalizada oferece total flexibilidade para escolher o texto apropriado para definir sua tag.

A tag também pode ser definida em um nível de recurso. Depois de definir uma tag no nível do recurso, isso garante que todos os cenários dentro desse arquivo de recurso herdem essa tag. Dependendo da natureza do cenário, podemos usar mais de uma tag para o único recurso. Sempre que Cucumber encontra uma chamada apropriada, um cenário específico será executado.

O pepino também fornece uma maneira de inverter a escolha das etiquetas. Considere que de 25 cenários definidos, 10 são marcados como teste de fumaça. Somos obrigados a executar apenas cenários de teste de regressão.

Para isso, podemos usar “~” na classe de execução JUnit para excluir o cenário de teste de fumaça. Será parecido com o seguinte.

@RunWith(Cucumber.class) 
@Cucumber.Options(format = {"pretty", "html:target/cucumber"}, tags = {"[email protected]"}) 

public class runTest { }

Ao definir várias tags, também podemos definir lógico e / ou lógico e operação.

  • Definindo lógica ou em classe de corredor - @dev,@wip - Diz que os cenários correspondentes a qualquer uma dessas tags precisam ser executados.

  • Definindo lógica ou em classe de corredor - [@dev,[email protected]] − Ele diz que os cenários correspondentes a ambas as tags precisam ser executados.