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 :
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)
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
- [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 :
* 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 !
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
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
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
× 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.
Site personnel : Julien Gidel - AutoMate - PHPresentation
Site personnel : Julien Gidel - AutoMate - PHPresentation
Site personnel : Julien Gidel - AutoMate - PHPresentation