Тестирование вашего сайта на Drupal стало еще проще с Behat (подробное руководство)
Опубликовано: 2020-09-08«Нет ничего более могущественного в мире, чем хорошая история», - сказал король остроумия и мудрости Тирион Ланнистер.
Сила историй и хорошее общение способствует совместной и эффективной доставке программного обеспечения. Технологии Behavior Driven Development (BDD), развивающиеся на основе гибких методологий, максимально используют эту мощь для автоматизации процесса тестирования. Behat - одна из таких технологий BDD, которая позволяет автоматизировать тестирование с использованием «универсального языка». Давайте узнаем больше о Behat, Mink, Gherkin и о том, как реализовать это в Drupal.

Что такое Бехат?
Behat - это PHP-фреймворк с открытым исходным кодом, который используется для автоматизации тестирования с помощью разработки, управляемой поведением (BDD). Подход BDD обеспечивает качественную поставку программного обеспечения, делая упор на непрерывное общение и простые текстовые истории. С помощью BDD тестировщик создает тестовые примеры на понятном человеку языке. Из-за этого легко собрать всю команду на одной странице, так как все, от владельца продукта до разработчика, могут понять текущий сценарий и получить постоянную обратную связь о нем.
Что такое корнишон?
Инструмент Behat использует язык Gherkin, который является удобочитаемым языком для конкретной предметной области. Gherkin также служит живой документацией, и можно создавать отчеты для документирования каждого запуска теста. Этот простой язык, основанный на пробелах, использует простые языковые слова в качестве ключевых слов. Отступы (с использованием пробела / табуляции) и окончания строк определяют структуру тестового примера. Хотя писать и понимать язык легко, конечный результат должен быть направлен на обеспечение лучшего сотрудничества, эффективности, автоматизации и прослеживаемости. Тестовые примеры должны быть написаны интуитивно, фокусироваться на важных элементах, избегать проверки повторяющихся записей и использовать хорошую грамматику.
Что такое норка?
Mink - это контроллер браузера с открытым исходным кодом, который имитирует тестовый сценарий с веб-приложением. После того, как тестовые примеры написаны, их необходимо выполнить и имитировать действия пользователя. С Mink вы можете использовать тот же тестовый сценарий и запускать его на различных эмуляторах браузера, таких как Goutte, Selenium, Chrome, Zombie и других. При установке расширения Behat Drupal вы увидите зависимость от Mink, поэтому убедитесь, что оно у вас установлено.
Установка и внедрение Behat в Drupal
Официальный способ установить Behat в ваш проект Drupal - через Composer. Он не только может установить Behat для вас, но также сможет легко обновить вас до последней версии позже, когда она выйдет.
• Внутри папки проекта выполните команду:
$ composer требует behat / behat
• Или внутри файла composer.json добавьте инструкцию require
"требовать": {
"behat / behat": "^ 3.0.0",
«Phpunit / phpunit»: «^ 5.0.0»
}
• Затем запустите команду установки композитора в терминале.
• Когда это будет сделано, вы также увидите новый каталог bin / с файлом Behat в нем. Это исполняемый файл Behat, и вы будете использовать его для запуска тестов и получения отладочной информации.
• Затем создайте файл с именем behat.yml в корневой папке проекта. Когда Behat запускается, он ищет файл behat.yml , который использует для своей конфигурации.
дефолт:
апартаменты:
дефолт:
контексты:
- Drupal \ DrupalExtension \ Context \ DrupalContext
расширения:
Behat \ MinkExtension:
подагра: ~
base_url: http://example.org/ # Замените URL-адресом вашего сайта
Drupal \ DrupalExtension:
черный ящик: ~Для инициализации проекта выполните команду:
vendor / bin / behat –init
Это создает папку features / и файл контекста по умолчанию bootstrap / FeatureContext.php внутри папки features /.
Написание историй и выполнение тестов с Behat
Наша цель - максимально эффективно описать истории. Рассказы написаны на понятном человеку языке Gherkin с расширением. feature в каталоге features /.
Представим, что вам нужно проверить, можете ли вы успешно добавить контент к типу контента страницы Basic на своем сайте. Для этого у вас должен быть доступ к странице, чтобы заполнить поля и сохранить ее как администратор.
Итак, напишем нашу первую историю:
Особенность: проверьте базовую страницу CT Для того, чтобы создать страницу Как админ Я хочу получить доступ к / node / add / page Чтобы я мог создать страницу Сценарий: базовая страница CT Учитывая, что я вошел в систему как пользователь с ролью "администратор" Когда я перехожу к «/ node / add / page» И я ввожу "Заголовок базовой страницы" вместо "edit-title-0-value" Когда я нажимаю "изменить-отправить" Затем я должен увидеть «Базовая страница. Заголовок базовой страницы создан».
Этот файл можно назвать basic_page.feature . У каждой функции может быть множество сценариев, описывающих конкретное поведение функции. В каждом сценарии будут разделы:
• Дано - подробное описание начального состояния системы.
• Когда - включает действие, выполняемое пользователем.
• Затем - описывает, что видит пользователь после того, как совершил действие.
• И - для поддержания связи в сценарии.
Между Then, And и But нет большой разницы. Эти слова сделаны доступными, чтобы сделать ваши сценарии естественными и удобочитаемыми.

Все файлы функций могут быть запущены поставщиком / bin / behat . Если вы хотите запустить конкретный файл функций, запустите vendor / bin / behat features / basic_page.feature. Существует также способ запустить один сценарий, просто добавив номер строки, в которой он определен: vendor / bin / behat features / basic_page.feature: 11 .
Существуют такие команды, как vendor / bin / behat -dl, которые предоставляют весь синтаксис оператора, который используется в сценариях, а vendor / bin / behat -di предоставляет синтаксис вместе с примерами.
Как писать файлы функций
Behat выполняет запросы curl к URL-адресам на вашем веб-сайте, что делает процесс тестирования довольно быстрым, но также лишает Behat возможности тестировать функции, требующие Javascript. Итак, для тестирования функций нам нужно только добавить тег @javascript перед каждым сценарием, требующим Javascript, например: Особенность: проверьте базовую страницу CT Для того, чтобы создать страницу Как админ Я хочу получить доступ к / node / add / page Чтобы я мог создать страницу @api @javascript Сценарий: базовая страница CT Учитывая, что я вошел в систему как пользователь с ролью "администратор" Когда я перехожу к «/ node / add / page» И я ввожу "Заголовок базовой страницы" вместо "edit-title-0-value" И я заполняю wysiwyg в поле "edit-body-0-value" словом "Basic page content" Когда я нажимаю "изменить-отправить" Затем я должен увидеть «Базовая страница. Заголовок базовой страницы создан».
Чтобы проверить это, запустите vendor / bin / behat . Это покажет вам неопределенные шаги в сценариях, потому что сценарии должны соответствовать функции.

Вы можете скопировать и вставить фрагмент кода в контекстный файл FeatureContext.php или запустить vendor / bin / behat --dry-run --append-snippets .
Затем вы можете написать определения функций в FeatureContext.php, как показано:
<? php
используйте Behat \ Mink \ Exception \ ExpectationException;
используйте Drupal \ DrupalExtension \ Context \ RawDrupalContext;
/ **
* Определяет функции приложения из конкретного контекста.
* /
class FeatureContext расширяет RawDrupalContext {
/ **
* Норковый контекст.
*
* @var Drupal \ DrupalExtension \ Context \ MinkContext
* /
защищенный $ minkContext;
/ **
* Инициализирует контекст.
*
* Каждый сценарий получает свой собственный экземпляр контекста.
* Вы также можете передавать произвольные аргументы в
* конструктор контекста через behat.yml.
* /
публичная функция __construct () {
}
/ **
* Заполните поле wysiwyg.
*
* @ Затем я заполняю wysiwyg в поле: локатор с помощью: значения
* /
общедоступная функция iFillInWysiwygOnFieldWith ($ locator, $ value) {
$ el = $ this-> getSession () -> getPage () -> findField ($ locator);
if (empty ($ el)) {
throw new ExpectationException ('Не удалось найти WYSIWYG с локатором:'. $ locator, $ this-> getSession ());
}
$ fieldId = $ el-> getAttribute ('идентификатор');
if (empty ($ fieldId)) {
throw new Exception ('Не удалось найти идентификатор поля с локатором:'. $ locator);
}
$ this-> getSession ()
-> executeScript ("CKEDITOR.instances [\" $ fieldId \ "]. setData (\" $ value \ ");");
}
}Теперь запустите команду vendor / bin / behat, и все написанные сценарии должны пройти. Определенная функция JS сопоставит оператор сценария « И я заполняю wysiwyg on-field« edit-body-0-value » с помощью« Базовое содержимое страницы ».
