Realizando test automatizados en Drupal con Behat

June 18, 2021

Behat es un framework para realizar pruebas basadas en comportamientos, este puede ser de gran utilidad para asegurarnos que durante el desarrollo de un proyecto debido a que evita que algún cambio afecte características previamente implementadas, de este modo se asegura de que la funcionalidad global del proyecto no se vea afectada en ningún momento del desarrollo debido a bugs causados por alguna nueva característica.

Para facilitar el proceso, todos los comandos serán ejecutados en la raíz del proyecto.

Requerimientos

  • Instalacion de Drupal 7.
    • Tambien puedes crear una instalacion de prueba utilizando drush qd test_behat --core=drupal-7.x -y
  • Composer.
  • Drush.

Instalando dependencias

Para usar behat debemos instalar un conjunto de librerias las cuales obtendermos mediante el uso de composer ejecutando los siguientes comandos

composer require behat/behat
composer require drupal/drupal-extension
composer require drupal/drupal-driver

Podemos comprobar que las depedencias esten ahora disponibles en la carpeta /vendor del proyecto.

Composer vendor files

Preparando el sitio para las pruebas

Para realizar las pruebas crearemos:

Content Type

Creating Test CT

  • Name: Test
  • Description: Test content for behat

Configurando Behat para usar Drupal

Comprobaremos que la instalacion de Behat sea satisfactoria ejecutando

Check Behat Version

vendor/behat/behat/bin/behat --version>

Crearemos el archivo behat.yml donde indicaremos la configuración del Behat para este proyecto especifico.


default:
autoload:
'': %paths.base%/features/bootstrap
suites:
default:
  paths:
    - %paths.base%/features/tests
  contexts:
    - FeatureContext
    - Drupal\DrupalExtension\Context\DrupalContext
    - Drupal\DrupalExtension\Context\DrushContext
    - Drupal\DrupalExtension\Context\MinkContext
extensions:
Behat\MinkExtension:
  goutte: ~
  base_url: http://localhost:8888/  # Replace with your site's URL
Drupal\DrupalExtension:
  blackbox: ~
  api_driver: drupal
  drush:
    root: %paths.base%
  drupal:
    drupal_root: %paths.base%

Basado en behat.yml.dist

Ejecutaremos vendor/behat/behat/bin/behat --init el cual creara la carpeta features/ y creara un fichero base donde se pueden agregar pasos personalizados.

Run Behat init

Creando un test de Behat

Crearemos los archivos básicos para un realizar un test funcional de behat.

  • En la raiz del proyecto.
  • Crearemos la carpeta ./features/tests/
  • Crearemos un archivo llamado ./features/tests/content_types.feature

@api
Feature: Tests can be done with the test content type

Scenario: An administrator can see the content type at admin page.
Given I am logged in as a user with the "administrator" role
When I visit "/admin/structure/types"
Then I should see "Test"

Scenario: An administrator can see the tests nodes at content.
Given I am logged in as a user with the "administrator" role
And "Test" content:
  | title          | body                 |
  | Test Node A    | Some content         |
  | Test Node B    | Another content      |
  | Test Node C    | Content String       |
When I visit "/admin/content"
Then I should see "Test Node A"
And I should see "Test Node B"
And I should see "Test Node C"

Scenario: An user can see a created node.
Given I am an anonymous user
And "Test" content:
  | title          | body                     | path[alias] |
  | Test Node D    | Some content for testing | testnoded   |
When I am on the homepage
And I follow "Test Node D"
Then I should see the heading "Test Node D"
And I should see "Some content for testing"

Los test de Behat utilizan el lenguaje Gherkin donde se define las condiciones para confirmar el correcto funcionamiento de un software mediante pasos que no requieren conocimientos de programación para su entendimiento.

Cada archivo define una característica especifica y pueden tener distintos escenarios para la misma.

Corriendo test de Behat

Ahora procedemos a correr nuestro test mediante el uso del siguiente comando:

vendor/behat/behat/bin/behat features/tests/content_types.feature

Behat Test Result

Ya finalmente tendremos nuestra instalación de Drupal habilitada para realizar test automatizados mediante el uso de Behat, algo que resulta muy útil asegurando la integridad y evitando posibles errores causados en el desarrollo y regresiones.

Si desea probar el entorno utilizado para este Blog descargue el siguiente archivo: drupal_behat.zip