Bonjour à tous,
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 :
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
- Provide a Proxy management
- Possibility to import a scenario for reusability
- Firefox Profile
- Add a command
ajax
andjs
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