Огурец - Крючки
Огурец hookпозволяет нам лучше управлять рабочим процессом кода и помогает снизить избыточность кода. Можно сказать, что это невидимый шаг, который позволяет нам выполнять наши сценарии или тесты.
Чтобы лучше понять это понятие, давайте рассмотрим пример файла функций и файла определения шага.
Выделенная часть в данном операторе фактически выполняет работу по настройке webdriver и завершению сеанса webdriver. Так что на самом деле это не имеет отношения к сути «данного утверждения», а больше похоже на установку для теста. Кроме того, если мы рассмотрим более широкую перспективу, то в случае нескольких сценариев для этой функции эта настройка и очистка веб-драйвера будут выполняться с каждым заданным оператором. Логично, что установка и очистка должны выполняться только один раз.
Так что для оптимизации можно использовать хуки. Чаще всего используются крючки двух типов: крючки «до» и «после». Метод / функция / фрагмент кода, определенные в хуках «До» и «После», всегда выполняются, даже если сценарий прошел или не прошел.
Как следует из названия, ловушка before выполняется задолго до любых других тестовых сценариев, а ловушка after выполняется после выполнения всех сценариев.
Хуки определяются только в файле определения шага.
Давайте автоматизируем пример хука до и после.
Step 1 - Создайте проект Maven как hookTest, добавьте необходимую зависимость в pom.xml.
Step 2 - Создайте пакет Java с именем hookTest в src/test/java
Step 3 - Создайте файл определения шага с именем hookTest.java под пакет.
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 - Создайте файл функции с именем «hookTest.feature» в пакете.
Feature - Схема сценария.
Scenario Outline - Тест на крючок
Данный пользователь переходит на Facebook
Когда я ввожу имя пользователя как «<имя пользователя>» и пароль как «<пароль>»
Тогда вход в систему должен быть неудачным
Примеры
| username | password |
| username1 | password1 |
Step 5 - Создайте файл класса бегуна.
Создайте класс runner как runTest.java внутри пакета dataTable (более подробные инструкции см. В схеме сценария раздела).
Напишите следующий код.
package hookTest;
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
public class runTest { }
Сохраните файл.
Запустите тест, используя опцию -
Выберите файл runTest.java в проводнике пакетов.
Щелкните правой кнопкой мыши и выберите параметр «Запуск от имени».
Выберите тест JUnit.
Итак, теперь, когда мы запустим это, следующая будет последовательность выполнения.
Перед подключением - настройте webdriver и другие предварительные условия для запуска теста.
Данное заявление
Когда заявление
Тогда заявление
После перехвата - закройте веб-драйвер и выполните процесс очистки.
Помеченные крючки
Мы также можем указать, хотим ли мы, чтобы хуки до и после выполнялись только с определенным тегом. Example- @Before ('@ Web'). Та же концепция логических тегов и / или может применяться и с хуками.Example - @Before (@ dev, @ wip), @Before (@ dev, ~ @ wip)