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)