CodeceptJS — современный инструмент для автоматизации End 2 End тестирования. Он позволяет описывать тесты на DSL высокого уровня. Сами тесты будут выполнятся одной из популярных библиотек на выбор: Playwright, Webdriver (Selenium), Protractor.
Автоматические тесты — это здорово. Мало кто поспорит с этим утверждением. Но чтобы они были, их надо написать. А для этого надо изучить тестовый фреймворк.
Допустим, мне нужно написать тест страницы авторизации. На Java с Selenium код будет выглядеть так:
package puvtests;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class OpenPageTest {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver","G:\\\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
String baseUrl = "<https://puv-test2-int-elk-01.otr.ru:18080/>";
String expectedTitle = "Puv";
String actualTitle = "";
driver.get(baseUrl);
actualTitle = driver.getTitle();
if (actualTitle.contentEquals(expectedTitle)){
System.out.println("Test Passed");
} else {
System.out.println("Test Failed");
}
driver.close();
}
}
В коде много конструкций, которые на самом деле не нужны тесту. Они нужны самому языку.
Надо просто выкинуть максимум из того, что не имеет отношение к сути теста. Именно это сделали разработчики Codecept. Точно такой же тест, написанный с использованием этого фреймворка будет выглядеть так:
Scenario('open page', ({ I }) => {
I.amOnPage('<https://puv-test2-int-elk-01.otr.ru:18080/>')
I.seeTitleEquals('Puv')
});
Основным элементом тестов в Codecept является актёр, обозначаемый как I
. Весь процесс описывается с точки зрения актёра в виде пошагового сценария:
Такой подход позволяет упростить написание тестов, т.к. не требует изучения особенностей языка программирования.
Окей, с простыми тестами понятно. А если надо написать сложный тест? Например, описать реальный механизм авторизации. Без проблем:
Scenario('login with login and password', ({ I }) => {
I.amOnPage('<https://puv-test2-int-elk-01.otr.ru:18080/sign-in>')
I.fillField('Имя пользователя', 'Login')
I.fillField('Пароль', 'Password')
I.click('Войти')
I.click('Меры 2021, соцконтракт')
I.see('Управление Пенсионного фонда РФ в г.Курске Курской области')
});
// Даже боюсь представить как это будет выглядеть на Selenium 🙃.
Вроде всё хорошо, но авторизация — процедура, которую придётся повторять перед каждым тестом. Поэтому было бы полезно вынести её в отдельную функцию. Для этого Codecept предоставляет steps_file
, в котором можно прописать дополнительные функции для актёра I
.
Изначально steps_file
выглядит так:
module.exports = function() {
return actor({})
}
Добавим в него функцию авторизации: