Résumé du 2018-04-05

Présentation par Anna Filina @afilina

Behat: Why and How

Behat: auto-testez votre application

Langues: présentation visuelle en anglais, présentation orale en français.

behat: BEHAviour Testing
Tests automatisé, comportement du système, avec des acteurs et des scénarios (user story).
- Acteur: Utilisateur, autre API
- Langage: Gerkins

Ne remplace pas les tests unitaires. Il est conseillé d'utiliser d'autres frameworks pour les tests unitaires.


Exemple 1:
============================================
Feature: texte texte texte
 texte texte

Scenario: Some text text text
 Given une condition
   And et une autre condition
  Then quelques chose de testable arrivera
============================================

Un scénario contient plusieurs étapes (step) introduites par des mots-clés comme Given, And, When, Then.
Ces étapes sont analysées par des règles pour créer des tests.

Behat permet de définir un protocole entre deux acteurs (le développeur et un autre utilisateur).
C'est ce qu'on appel un "design by contract" / Conception par contrat.

Généralement, utilise diff pour la comparaison des fichiers.

On peut faire des tests de performances, exemple:
- maximum de 3 requêtes sur une base de données lors d'une action
- temps de réponse de moins de 0.05 seconde.

Le logiciel pour lancer les tests est: vendor/bin/behat

Plusieurs règles existent par défaut et plusieurs autres règles spécialisées peuvent être ajoutées.
On peut ajouter ses propres règles.

Les règles sont décrites dans des classes qui héritent de \Behatch\Context\...
Utilisation d'annotation @Motclé pour la définition des règles, variables avec la syntaxe :varname
 @Then the JSON should be equal to file :filename
Les classes peuvent utiliser un entity manager ORM, des fichiers, des bibliothèques externes.

Utilisation de pilotes (drivers) comme
 Goutte pour le test HTTP et HTML.
   - Règles comme: And I should see 5 "div.product" elements
   - utilise guzzle et symfony/css-selector (conversion en CSS vers XPATH).
   - utilisation d'un serveur web de test (php -S), les serveurs doivent être démarrés avec les tests.
 Selenium (java) pour le contrôle des navigateurs
   - Recette avec un tag @javascript
 ...

Note:
 les tests de comportement du navigateur sont les plus fragile car le rendu final en HTML tend à changer souvent.
   * Browser tests are the hardest to maintain
  - limiter les tests @javascript dans behat
  - faire des tests unitaires directement dans javascript
  - mettre la priorité sur les chemins critiques (transaction en ligne par exemple)