Cetriolo - Ganci

Cetriolo hookci permette di gestire meglio il flusso di lavoro del codice e ci aiuta a ridurre la ridondanza del codice. Possiamo dire che è un passaggio invisibile, che ci consente di eseguire i nostri scenari o test.

Per comprendere meglio questa nozione, prendiamo un esempio di un file di caratteristiche e un file di definizione dei passaggi.

La parte evidenziata nella dichiarazione fornita svolge effettivamente il compito di configurare il webdriver e terminare la sessione del webdriver. Quindi, in realtà non è rilevante per l'essenza della "dichiarazione data", ed è più simile a una configurazione per il test. Inoltre, se pensiamo con una prospettiva più ampia, in caso di più scenari per questa funzione, la configurazione e la pulizia del driver web verranno eseguite con ciascuna dichiarazione. Logicamente, ha senso eseguire la configurazione e la pulizia una sola volta.

Quindi, per portare l'ottimizzazione, è possibile utilizzare gli hook. Più spesso usiamo due tipi di ganci: gancio "Prima" e gancio "Dopo". Metodo / funzione / parte di codice, definiti negli hook Prima e Dopo, vengono sempre eseguiti, anche se lo scenario viene superato o fallito.

Come suggerisce il nome, prima che l'hook venga eseguito ben prima di qualsiasi altro scenario di test e dopo che l'hook venga eseguito dopo aver eseguito tutti gli scenari.

Gli hook vengono definiti solo all'interno del file di definizione del passaggio.

Automatizziamo un esempio di hook prima e dopo.

Step 1 - Crea il progetto Maven come hookTest, aggiungi la dipendenza necessaria in pom.xml.

Step 2 - Crea un pacchetto Java denominato hookTest in src/test/java

Step 3 - Creare un file di definizione del passaggio denominato come hookTest.java sotto il pacchetto.

package hookTest; 

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 hookTest {
   WebDriver driver = null; 
	
   @Before public void setUp(){ 
      driver = new FirefoxDriver(); 
   } 
	
   @Given("^user navigates to facebook$") 
   public void goToFacebook() { 
      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(); 
   } 
	
   @After public void cleanUp(){ 
      driver.close(); 
   } 
}

Step 4 - Creare un file di funzionalità denominato "hookTest.feature" nel pacchetto.

Feature - Schema dello scenario.

Scenario Outline - Hook Test

Dato l'utente naviga su Facebook

Quando inserisco il nome utente come "<username>" e la password come "<password>"

Quindi il login dovrebbe avere esito negativo

Esempi

| username  | password  | 
| username1 | password1 |

Step 5 - Crea un file di classe corridore.

  • Creare la classe runner come runTest.java all'interno del pacchetto dataTable (vedere la sezione Schema dello scenario per passaggi più dettagliati).

  • Scrivi il codice seguente.

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

@RunWith(Cucumber.class) 
@Cucumber.Options(format = {"pretty", "html:target/cucumber"}) 
 
public class runTest { }
  • Salva il file.

  • Esegui il test utilizzando l'opzione -

    • Seleziona il file runTest.java da Esplora pacchetti.

    • Fare clic con il tasto destro e selezionare l'opzione Esegui come.

    • Seleziona JUnit test.

Quindi ora quando eseguiamo questo, la seguente sarà la sequenza di esecuzione.

  • Prima del collegamento: configura il webdriver e altri prerequisiti per eseguire il test.

  • Dichiarazione data

  • Quando dichiarazione

  • Quindi dichiarazione

  • Dopo l'hook: chiudi il webdriver ed esegui il processo di pulizia.

Tagged Hooks

Possiamo anche indicare se vogliamo che gli hook prima e dopo vengano eseguiti solo con un tag specifico. Example- @Before ('@ Web'). Lo stesso concetto di tag logico e / o può essere applicato anche con gli hook.Example - @Before (@ dev, @ wip), @Before (@ dev, ~ @ wip)