Salatalık - Kancalar
Salatalık hookkod iş akışını daha iyi yönetmemize ve kod fazlalığını azaltmamıza yardımcı olur. Senaryolarımızı veya testleri yapmamızı sağlayan görünmeyen bir adım olduğunu söyleyebiliriz.
Bu kavramı daha iyi anlamak için bir özellik dosyası ve bir adım tanımlama dosyası örneği alalım.
Verilen ifadede vurgulanan kısım aslında web sürücüsünü kurma ve webdriver oturumunu sonlandırma işini yapar. Yani, aslında “Verilen ifade” nin özüyle alakalı değildir ve daha çok test için bir kurulum gibidir. Ayrıca, daha geniş bir olasılıkla düşünürsek, bu özellik için birden fazla senaryo olması durumunda, bu web sürücüsü kurulumu ve temizleme, verilen her ifadeyle birlikte çalışacaktır. Mantıksal olarak, kurulum ve temizlemenin yalnızca bir kez yürütülmesi mantıklıdır.
Dolayısıyla optimizasyonu sağlamak için kancalar kullanılabilir. Daha sık olarak iki tür kanca kullanırız: "Önce" ve "Sonra" kanca. Önce ve Sonra kancalarında tanımlanan yöntem / işlev / kod parçası, senaryo geçse veya başarısız olsa bile her zaman çalışır.
Adından da anlaşılacağı gibi, hook diğer test senaryolarından çok önce çalıştırılmadan önce ve tüm senaryoları çalıştırdıktan sonra hook çalıştırıldıktan sonra.
Kancalar yalnızca adım tanımlama dosyasında tanımlanır.
Kanca öncesi ve sonrası örneğini otomatikleştirelim.
Step 1 - hookTest olarak Maven projesi oluşturun, pom.xml'de gerekli bağımlılığı ekleyin.
Step 2 - altında hookTest adlı bir Java paketi oluşturun src/test/java
Step 3 - olarak adlandırılan bir adım tanım dosyası oluşturun hookTest.java paketin altında.
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 - Paketin altında "hookTest.feature" adlı bir özellik dosyası oluşturun.
Feature - Senaryo Taslağı.
Scenario Outline - Kanca Testi
Verilen kullanıcı Facebook'a gidiyor
Kullanıcı adını "<kullanıcı adı>" ve Parolayı "<parola>" olarak girdiğimde
O zaman giriş başarısız olmalı
Örnekler
| username | password |
| username1 | password1 |
Step 5 - Bir koşucu sınıfı dosyası oluşturun.
Runner sınıfını dataTable paketinin içinde runTest.java olarak oluşturun (daha ayrıntılı adımlar için bölüm senaryo taslağına bakın).
Aşağıdaki kodu yazın.
package hookTest;
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
public class runTest { }
Dosya 'yı kaydet.
Seçeneği kullanarak testi çalıştırın -
Paket gezgininden runTest.java dosyasını seçin.
Sağ tıklayın ve Farklı çalıştır seçeneğini seçin.
JUnit testini seçin.
Şimdi bunu çalıştırdığımızda, aşağıdaki yürütme sırası gelecektir.
Kancadan önce - Testi çalıştırmak için web sürücüsünü ve diğer ön koşulları ayarlayın.
Verilen ifade
Ne zaman ifadesi
Sonra ifade
Bağlantıdan sonra - Web sürücüsünü kapatın ve temizleme işlemini yapın.
Etiketli Kancalar
Ayrıca, kancalardan önce ve sonra yalnızca belirli bir etiketle yürütülmesini isteyip istemediğimizi de belirtebiliriz. Example- @Before ('@ Web'). Aynı mantıksal etiket kavramı ve / veya kancalarla da uygulanabilir.Example - @Before (@ dev, @ wip), @Before (@ dev, ~ @ wip)