Тестирование вашего сайта на Drupal стало еще проще с Behat (подробное руководство)

Опубликовано: 2020-09-08

«Нет ничего более могущественного в мире, чем хорошая история», - сказал король остроумия и мудрости Тирион Ланнистер.

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

Behat 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 » с помощью« Базовое содержимое страницы ».