• 15 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 8/25/20

Écrivez vos premières assertions

La performance devrait être testée comme n'importe quelle fonctionnalité de votre application. Pouvoir écrire des tests qui seront exécutés pendant une analyse de la performance est une autre des possibilités offertes par Blackfire.io.

Par exemple, nous pourrions vérifier que le temps d'exécution d'un script PHP ne consomme pas plus de 10 Mb :  main.memory < 10 Mb.

Toutes les métriques sont accessibles :

  • count : le nombre d'appels de la fonction ;

  • wall_time : le temps complet d'exécution ;

  • cpu_time : le temps processeur de la fonction ;

  • memory : la mémoire consommée par la fonction ;

  • peak_memory : le pic de mémoire utilisée par la fonction ;

  • network_in : la quantité de données entrantes (réseau) ;

  • network_out : la quantité de données sortantes (réseau) ;

  • io : la quantité de données sur le système de fichiers.

Comme tous les frameworks de type xUnit, les assertions sont regroupées en tests. Les tests seront écrits en YAML, dans un fichier nommé .blackfire.yml qui doit être à la racine de votre projet.

Le fichier Blackfire.yml

Commençons avec un test tout simple. Créez le fichier .blackfire.yml à la racine du projet de démonstration de Symfony que nous avons utilisé dans les précédents cours, avec le contenu suivant :

# .blackfire.yml

tests:
    "Toutes les pages sont rapides":
        path: "/.*"
        assertions:
            - main.wall_time < 60ms
            - main.memory < 2Mb

Puis déclenchez une analyse à l'aide de Companion. Vous remarquerez qu'une information supplémentaire apparaît dans la barre d'information affichée :

Un premier test avec Blackfire.io dont certaines assertions ont échoué.
Un premier test avec Blackfire.io

Vous pouvez cliquer sur la petite croix d'échec pour contrôler ce qu'il s'est passé :

Rapport des assertions exécutées
Rapport des assertions exécutées sur Blackfire

En mode premium, les "Assertions" sont  disponibles. Si un fichier .blackfire.yml est trouvé à la racine de l'application, alors les assertions seront exécutées et le rapport sera disponible dans cet onglet. Nous voyons ici que l'application consomme un petit peu plus de mémoire que prévu. Pour être honnête, cette valeur est certainement trop petite pour cette application. Mettez à jour la valeur limite de mémoire vive consommée et relancez une analyse : tout passe, parfait !

Métriques spécifiques à l'écosystème PHP

Il n'est pas possible d'écrire des assertions spécifiques à des fonctions appelées lors de l'analyse d'un script PHP. Mais pour les projets les plus populaires, tels que Magento, Drupal, Wordpress ou encore Zend, de nombreuses métriques sont disponibles dans la documentation.

Puisque nous utilisons un projet Symfony avec Twig, ajoutons quelques tests plus spécifiques :

# .blackfire.yml

tests:
    "Toutes les pages sont rapides":
        path: "/.*"
        assertions:
            - main.wall_time < 60ms
            - main.memory < 2Mb
    "Tests spécifiques à Symfony":
        path: "/.*"
        assertions:
            - metrics.symfony.kernel.debug.count == 0 # en mode production
            - metrics.symfony.yaml.reads.count == 0 # mise en cache du YAML
    "Tests spécifiques à Twig":
        path: "/.*"
        assertions:
            - metrics.twig.compile.count == 0 # Pas de compilation en production
            - metrics.twig.attributes.get.count < 30 # Pas trop de logique dans les templates

Et... le rapport correspondant ! Génial, n'est-ce pas ? :soleil:

Un rapport de test spécifique à l'écosystème Symfony
Un rapport de test spécifique à l'écosystème Symfony

En résumé

Avec le plan Premium de Blackfire, il est possible d'écrire des tests de performance qui seront exécutés lors du déclenchement de l'analyse. Pour cela :

  • il faut compléter un fichier appelé .blackfire.yml qui doit se trouver à la racine de l'application profilée ;

  • nous avons accès à toutes les métriques précédemment récoltées...

  • ... et à de nombreuses métriques spécifiques aux librairies et projets PHP les plus populaires !

Malgré tout, cela ne règle pas le problème précédent : comment vérifier que nous n'avons pas entraîné de régressions entre deux analyses ? Aussi, nous profiterons du chapitre suivant pour aborder les bonnes pratiques de testing !

Example of certificate of achievement
Example of certificate of achievement