Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Bibliothèque PHP] AutoMate

Une bibliothèque d'automatisation utilisant le YAML

    24 février 2021 à 18:39:22

    Bonjour à tous,

    J'ai déjà posté sur Zeste de savoir, mais je pense qu'OC et ZdS vont de paire, alors je reposte ici pour aussi avoir les avis de la communauté OC.

    Je m'appelle Julien, j'ai 25 ans et je suis Ingénieur d'études et développement (développeur, en gros) pour une grande entreprise. Cela fait plus d'un an que j'ai terminé mes études, et près de 10 ans que je fais de la programmation de façon sérieuse et raisonnée. A la base, je développe en Java et j'ai redécouvert les joies de PHP avec mon travail, essentiellement avec Symfony 4/5 puis je me suis lancé dans le développement un peu moins web, mais toujours avec PHP. C'est un langage qui fait toujours couler beaucoup d'encre, mais je m'amuse beaucoup avec et la syntaxe et les mécaniques me conviennent parfaitement, alors "je le garde".

    C'est avec beaucoup d'humilité et d'appréhention que je vous présente AutoMate.

    Présentation d'AutoMate

    Le nom AutoMate vient d'un jeu de mot entre Automation et Mate qui peut se traduire par "Pote", "Copain, "Equipier". Cela reflète bien l'objectif que je tente de remplir avec ce projet.

    Pourquoi AutoMate ? 

    Dans mon entreprise, on utilise ce qu'on appelle des automates qui utilise Selenium et qui le détourne pour réaliser des actes de gestion. Le développement est donc basé sur Selenium et un framework "maison" en Java.

    Le développement actuel d'un nouvel automate (qui réalise des actes différents et nouveau) prend pas mal de temps à mettre en place et peuvent se compter sur plusieurs jours (dev, pré-prod/recettes, mise en prod) là où cela pourrait être moins chronophage.

    AutoMate a pour vocation de résoudre ce problème en proposant un format de programmation simple et intuitif utilisant le YAML.

    Comment cela fonctionne ?

    Pour faire simple et grossier, AutoMate lit un fichier YAML qui décrit les étapes du scenario et les executes. Ce fichier se présente sous la forme suivante et permet d'écrire un scenario :

    browser: chrome
    variables:
      adresse: 'http://wikipedia.fr'
      subScenario: 'create-cookie'
    scenario:
      steps:
        - go: '{{ scenario.adresse }}'
        - use: '{{ scenario.subScenario }}'
        - exit: 'Simple scenario juste go and exit'

    Plusieurs exemples sont disponibles sur le Github : https://github.com/JuGid/AutoMate/tree/master/example/scenario

    Il est aussi possible d'introduire des données dans le scenario en utilisant ce que j'ai appelé les Specifications. Ce sont des fichiers de données au format CSV qui stockent les données à introduire. Pour chaque ligne de cette spécification, le scenario redémarre depuis le début. Les variables sont utilisables via le périmètre 'spec' `go: '{{ spec.variable }}'` où `variable` correspond au nom dans l'en-tête du CSV.

    Outre cette mécanique de specification, AutoMate a la possibilité de ressortir des Logs lorsqu'il tourne avec des specifications. Ces logs sont des fichiers CSV qui reprennent les données de specification utilisées et ajoute un message d'erreur ou de reussite (AutoMate génère des LOG_WINS et des LOG_ERRORS liés à la specification)

    Exemple de specification

    url,cookiename
    http://youtube.fr,youtube
    http://google.fr,google
    http://github.com,github

    Exemple de logs 'wins'

    url,cookiename,message
    http://youtube.fr,youtube,"Finished with success."
    http://google.fr,google,"Finished with success."
    http://github.com,github,"Finished with success."

    Lancer AutoMate

    Comme je le disais, AutoMate est une librarie. C'est un souhait de ne pas en faire ce que composer appelle un "projet" pour qu'il puisse être intégré partout.

    Il est donc possible de le lancer en utilisant du code, très simple :

    <?php
    
    require __DIR__.'/../vendor/autoload.php';
    
    use Automate\AutoMate;
    
    $configFile = __DIR__.'/config/config-test.yaml';
    $autoMate = new AutoMate($configFile);
    $autoMate->run('simple');

    Différentes options sont disponibles pour lancer les scenarios.

    Aussi, pendant l'execution, AutoMate décrit l'ensemble des étapes qu'il execute (programmatiquement parlant, ce sont les étapes qu'il A éxecuté) pour un rendu qui est celui-ci, un peu comme Selenium au final :

    AutoMate screenshot

    Phase de développement

    Actuellement, AutoMate est toujours en développement (v0.3.0) mais permet déjà de construire des scenarios qui peuvent utiliser des conditions, des boucles ou encore des scenarios réutilisables. J'essaye de construire une roadmap petit à petit, et plus tard pourquoi pas, en fonction des retours. Je copie/colle la roadmap disponible sur le Github

    Roadmap

    - [x] Provide a Proxy management

    - [x] Possibility to import a scenario for reusability

    - [x] Firefox Profile

    - [ ] Add a command `ajax` and `js` to work with ajax/js

    - [ ] **Tell us your ideas ! You can directly send a PR or open an issue**

    La documentation (Wiki Github) est en cours d'élaboration.

    J'ai pour espoir de créer une interface par la suite avec un ordonnanceur pour la création des automates et la configuration d'AutoMate (d'où la dépendance Symfony/console, mais qui risque de disparaitre au profit de plus léger)

    Liens

    Plusieurs liens qui peuvent être utiles concernant le projet :

    * Github du projet

    * Changelogs pour suivre les évolutions

    * Quelques exemples

    * php-webdriver que j'utilise et qui fait le lien entre le webdriver et AutoMate

    * PASVL, une bibliothèque qui vaut que je la cite ici et qui permet de valider le pattern des étapes

    Je ne sais pas si ce sujet sucitera de l'intéret mais j'espère qu'il y aura tout de même quelques retours/critiques et encouragements pour le développement de ce projet. J'essaye aussi d'intégrer quelques design pattern et d'améliorer le code au fur et à mesure des commits. N'hésitez pas d'ailleurs à participer !

    En vous souhaitant une bonne journée,

    JuGid

    -
    Edité par jule04 24 février 2021 à 18:41:19

    • Partager sur Facebook
    • Partager sur Twitter

    Site personnel : Julien Gidel - AutoMatePHPresentation

      26 février 2021 à 2:31:27

      Bonjour,

      J'ai fait quelques modifications sur la bibliothèque. Une version 0.4.0 devrait sortir d'ici peu ainsi qu'une version 1.0.0 en alpha qui suivra si les tests sont concluants.

      Voici les changeons de cette version 0.4.0 qui ne devrait pas tarder :

      Added

      • Script command to use javascript in your scenario (script)
      • Wajax command to wait an ajax request (wajax)
      • Configuration command to change some configuration elements at run time (configuration)
      • ErrorHandler to handle errors and render it on Console

      Changed

      • Functions that wait() now use the configuration wait. Configuration::get('wait.for') and Configuration::get('wait.every')
      • If testMode is enable, the errors are rendered with colors and details

      Fixed

      • Commands that use wait()->until() now have an error message to show what was wrong

      Et au niveau de la roadmap, elle change peu :

      Roadmap

      • FAIT - Provide a Proxy Management
      • FAIT - Possibility to import a scenario for reusability
      • FAIT - Firefox Profile
      • FAIT - Add a command ajax and js to work with ajax/js
      • FAIT - Add a configuration command to change configuration at runtime
      • Add a submit command to submit forms
      • Tell us your ideas ! You can directly send a PR or open an issue

      Voilà pour les nouveautés. AutoMate s’enrichie un peu plus et j’obtient une version qui me convient plutôt bien.

      Si quelqu’un connait un moyen de faire du test fonctionnel un peu comme SauceLabs, je suis preneur. Je suis actuellement obligé de lancer mes propres scenarios de test. Ca se tient vu l’objectif de AutoMate, mais un autre outils serait le bienvenue

      -
      Edité par jule04 26 février 2021 à 2:33:28

      • Partager sur Facebook
      • Partager sur Twitter

      Site personnel : Julien Gidel - AutoMatePHPresentation

        8 mars 2021 à 1:41:19

        Bonjour,

        Je n'ai pas donné de nouvelles depuis un peu de temps. Cependant, AutoMate a beaucoup avancé depuis le dernière fois où j'ai écrit.

        Entre temps, AutoMate est passé par la version 0.4.0 puis 0.4.1 et je prépare la version 0.5.0.

        Les Changelogs pour ces versions sont disponibles sur le GitHub à cette adresse

        Je fais rapidement le points sur les choses importantes qui sont arrivées :

        • Ajout des commandes
          • script : permet de lancer des scripts java
          • wajax : permet d'attendre le retour d'un script Ajax
          • configuration : permet de modifier des éléments de la configuration pendant le runtime
          • mouse : permet de simuler le curseur/souris
          • keyboard : permet de simuler le clavier
          • submit : permet de remplir et envoyer un formulaire simple
        • Un errorHandler pour récupérer les erreurs retournées par le scenario
        • Quelques bugs et comportements non voulus ont été changés

        Le gros des changements est que AutoMate utilise maintenant un Event dispatcher qui permet d'ajouter des modules et ses propres commandes à AutoMate. Ces évènements se manifestent à différents moment que l'on peut voir sur ce copier/coller de la console :

        Event : core:runner:simple:begin
        ____________________________________________________________
            /\        | |      |  \/  |     | |      
           /  \  _   _| |_ ___ | \  / | __ _| |_ ___ 
          / /\ \| | | | __/ _ \| |\/| |/ _` | __/ _ \ 
         / ____ \ |_| | || (_) | |  | | (_| | ||  __/ 
        /_/    \_\__,_|\__\___/|_|  |_|\__,_|\__\___| 
        ____________________________________________________________
        Event : core:step:transform
        Go at adresse http://wikipedia.fr
        Event : core:step:transform
        Create a cookie with cookieName:cookieValue
        Event : core:step:transform
        Event : core:runner:error
        The scenario exit with message : Simple scenario just go and exit
        ============================================================
        [0] The scenario exit with message : Simple scenario just go and exit
        ============================================================
        Event : core:runner:simple:end
        Event : core:runner:end:error

        Des détails sont disponibles ici : https://github.com/JuGid/AutoMate/wiki/Events

        Voici les derniers changements pour la version 0.5.0 qui arrive :

        [0.5.0] - COMING

        Added

        • Submit command to fill then submit an element
        • AutoMate now use an EventDispatcher that trigger some events See here
        • Keyboard command to simulate keyboard
        • Mouse command to simulate mouse

        Changed

        • Use command does not detect loop anymore as a condition can make the scenario change
        • You can register plugins on multiple events AutoMate::registerPlugin(array|string $event, AutoMateListener $listener)

        Fixed

        • Scenario can now reset or not the scope. When using use, the Scenario variable scope is not reset.
        • When AutoMate runs, the World variable scope is reset.
        • Use command now use the good scenario.

        Et la roadmap a bien changé aussi :

        Roadmap

        - [x] Find a way to use keyboard (`Keyboard` command)
        - [x] Find a way to use the mouse (`Mouse` command)
        - [ ] New command to work with tables
        - [x] Create your own commands (AbstractTransformer)

        Merci à tous, et j'espère que vous porterez un peu d'intérêt à ce projet et qu'il soit utile à d'autres personnes que moi. Le GitHub est toujours à la meme adresse : https://github.com/JuGid/AutoMate

        Julien

        -
        Edité par jule04 8 mars 2021 à 1:43:29

        • Partager sur Facebook
        • Partager sur Twitter

        Site personnel : Julien Gidel - AutoMatePHPresentation

        [Bibliothèque PHP] AutoMate

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown