Хук Cucumber позволяет нам лучше управлять рабочим процессом кода и помогает уменьшить избыточность кода. Мы можем сказать, что это невидимый шаг, который позволяет нам выполнять наши сценарии или тесты.
Чтобы лучше понять это понятие, давайте возьмем пример файла функции и файла определения шага.
Выделенная часть в данном операторе фактически выполняет работу по настройке веб-драйвера и завершению сеанса веб-драйвера. Таким образом, это на самом деле не имеет отношения к сути «данного утверждения», и это больше похоже на настройку для теста. Кроме того, если мы представим более широкую перспективу, то в случае нескольких сценариев для этой функции эта настройка и очистка веб-драйвера будет выполняться с каждым заданным оператором. Логично, что имеет смысл выполнить настройку и очистку только один раз.
Таким образом, для оптимизации можно использовать хуки. Чаще всего мы используем два типа крючков: крючок «До» и крючок «После». Метод / функция / фрагмент кода, определенные в хуках «До» и «После», всегда выполняются, даже если сценарий пройден или не пройден.
Как следует из названия, до того, как ловушка будет выполнена задолго до любых других тестовых сценариев, и после того, как ловушка будет выполнена после выполнения всех сценариев.
Хуки определяются только в файле определения шага.
Давайте автоматизируем пример до и после хука.
Шаг 1 — Создайте проект Maven как hookTest, добавьте необходимую зависимость в pom.xml.
Шаг 2 — Создайте пакет Java с именем hookTest в src / test / java
Шаг 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(); } }
Шаг 4 — Создайте файл компонента с именем «hookTest.feature» в пакете.
Особенность — Сценарий Контур.
Схема сценария — Крюк-тест
Данный пользователь переходит на Facebook
Когда я ввожу имя пользователя как «<имя пользователя>» и пароль как «<пароль>»
Тогда логин должен быть неудачным
Примеры
| username | password | | username1 | password1 |
Шаг 5 — Создайте файл класса бегуна.
-
Создайте класс runner как runTest.java внутри пакета dataTable (более подробные шаги см. В разделе сценария раздела).
-
Напишите следующий код.
Создайте класс 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 test.
-
Сохраните файл.
Запустите тест, используя опцию —
Выберите файл runTest.java из проводника пакетов.
Щелкните правой кнопкой мыши и выберите параметр «Запуск от имени».
Выберите JUnit test.
Итак, теперь, когда мы запустим это, будет следующая последовательность выполнения.
-
Перед подключением — настройте веб-драйвер и другие необходимые условия для запуска теста.
-
Данное заявление
-
Когда заявление
-
Тогда заявление
-
После подключения — Закройте веб-драйвер и выполните процесс очистки.
Перед подключением — настройте веб-драйвер и другие необходимые условия для запуска теста.
Данное заявление
Когда заявление
Тогда заявление
После подключения — Закройте веб-драйвер и выполните процесс очистки.
Tagged Hooks
Мы также можем указать, хотим ли мы, чтобы хуки до и после выполнялись только с определенным тегом. Пример — @Before (‘@ Web’). Та же самая концепция тэга логическая и / или может быть применена и к хукам. Пример — @Before (@ dev, @ wip), @Before (@ dev, ~ @ wip)