Ogórek - Haczyki

Ogórek hookpozwala nam lepiej zarządzać przepływem kodu i pomaga nam zredukować nadmiarowość kodu. Można powiedzieć, że jest to niewidoczny krok, który pozwala nam realizować nasze scenariusze czy testy.

Aby lepiej zrozumieć to pojęcie, weźmy przykład pliku funkcji i pliku definicji kroku.

Podświetlona część w podanym oświadczeniu faktycznie służy do skonfigurowania webdrivera i zakończenia sesji webdrivera. Tak więc w rzeczywistości nie ma to związku z istotą „danego stwierdzenia”, a bardziej przypomina układ do testu. Również jeśli myślimy z szerszą perspektywą, to w przypadku wielu scenariuszy dla tej funkcji ta konfiguracja i czyszczenie webdrivera będzie działać z każdym podanym poleceniem. Logicznie rzecz biorąc, sensowne jest wykonanie konfiguracji i czyszczenia tylko raz.

Aby zapewnić optymalizację, można wykorzystać haki. Częściej używamy dwóch rodzajów haków: haczyka „przed” i „po”. Metoda / funkcja / fragment kodu, zdefiniowane w hookach Before i After, zawsze działają, nawet jeśli scenariusz zostanie zaliczony lub zawiódł.

Jak sama nazwa wskazuje, zanim podpięcie zostanie wykonane na długo przed jakimikolwiek innymi scenariuszami testowymi, a po przechwyceniu zostanie wykonane po wykonaniu wszystkich scenariuszy.

Haki są definiowane tylko w pliku definicji kroku.

Zautomatyzujmy przykład przechwytywania przed i po.

Step 1 - Utwórz projekt Maven jako hookTest, dodaj niezbędną zależność w pom.xml.

Step 2 - Utwórz pakiet Java o nazwie hookTest pod src/test/java

Step 3 - Utwórz plik definicji kroku o nazwie jako hookTest.java pod pakietem.

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 - Utwórz plik funkcji o nazwie „hookTest.feature” pod pakietem.

Feature - Zarys scenariusza.

Scenario Outline - Test haka

Podany użytkownik przechodzi do Facebooka

Kiedy wpiszę nazwę użytkownika jako „<nazwa użytkownika>” i hasło jako „<hasło>”

Wtedy logowanie powinno zakończyć się niepowodzeniem

Przykłady

| username  | password  | 
| username1 | password1 |

Step 5 - Utwórz plik klasy biegacza.

  • Utwórz klasę uruchamiającą jako runTest.java w pakiecie dataTable (zobacz opis scenariusza sekcji, aby uzyskać bardziej szczegółowe kroki).

  • Napisz następujący kod.

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

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

  • Uruchom test za pomocą opcji -

    • Wybierz plik runTest.java z eksploratora pakietów.

    • Kliknij prawym przyciskiem myszy i wybierz opcję Uruchom jako.

    • Wybierz test JUnit.

Więc teraz, kiedy to uruchomimy, następna będzie sekwencja wykonania.

  • Przed podłączeniem - skonfiguruj sterownik sieciowy i inne wymagania wstępne, aby uruchomić test.

  • Podane oświadczenie

  • Kiedy oświadczenie

  • Następnie oświadczenie

  • Po podłączeniu - zamknij sterownik sieciowy i wykonaj proces czyszczenia.

Oznaczone haki

Możemy również wskazać, czy chcemy, aby przechwyty przed i po hakach były wykonywane tylko z określonym tagiem. Example- @Before („@ Web”). Ta sama koncepcja logiki tagów i / lub może być również zastosowana z hakami.Example - @Before (@ dev, @ wip), @Before (@ dev, ~ @ wip)