Automatisation test swing

Fermé
rodrigue62 Messages postés 190 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 10 janvier 2011 - 15 déc. 2008 à 22:21
 jjey - 4 févr. 2011 à 13:38
Bonjour,

je cherche les caractéristiques des logiciels suivants Jemmy, JDiffChaser, Fest.
Je voudrais entre autre savoir si ils fonctionnent à la fois sous Windows et Linux, si on peut planifier les scripts, si on peut faire de la comparaison d'image, si il y a un recorder, et si les rapports générés sont corrects.

Merci d'avance.
A voir également:

4 réponses

Bonjour,

Je fais partie de l'équipe développant jDiffChaser et je suis tombé sur votre message via Google. Je vais donc tenter de répondre en toute objectivité à vos questions bien ciblées ;)

Système: JDiffChaser fonctionne sans problème sous windows (c'est l'environnement sur lequel il tourne chaque jour dans mon équipe sur un projet à l'interface graphique critique). Il fonctionne aussi sous macos, je l'utilise aussi sur ce système plus occasionnellement. Théoriquement, tout devrait être ok sous Linux, vu que tout est full java si vous tournez en 1.5 minimum. En 1.4, et uniquement pour l'enregistrement de scenarii, jDiffChaser utilise des appels JNI (natifs) pour avoir la fenêtre de la télécommande au-dessus des autres...

Planification: J'imagine que vous parlez là de scheduling, ie d'automatiser les scripts? Si c'est le cas, les équipes utilisant jDiffChaser planifient simplement un tâche ant comme décrit et donné en exemple dans la doc jDiffChaser (via CruiseControl ou simplement un script système, .bat ou .sh), c'est comme ça qu'un de nos projets effectuent plus de 300 comparaisons d'écrans par nuit.

Recorder: jDiffChaser a un recorder. Pour enregistrer un scénario, vous lancez votre appli selon les guidelines jDiffChaser (qui lui greffe un recorder), et une fenêtre représentant la télécommande du recorder apparaît. Cette télécommande permet de déclencher le début de l'enregistrement des actions, de déclencher le screenshot, etc... Si votre appli est en plein écran, vous pouvez rendre la télécommande translucide, etc...

Note importante: jDiffChaser ne vous demande pas de stocker des screenshots de références, car c'est une opération coûteuse que l'on devrait refaire à chaque nouvelle release (imaginez-vous refaire "à la main" 200 screenshots à chaque nouvelle release). Au lieu de cela, à chaque nouvelle version mise en production, il est bon de la donner à jDiffChaser afin qu'il rejoue les scénarii sur la nouvelle version de production (à vous d'adapter les quelques scenarii qui auront évolués, en général peu) et sur la version de dev actuelle et qu'il compare ces nouveaux screenshots. Les phases de déploiement doivent être faites via du scripting, par exemple via ant.

Les rapports générés: corrects ou pas? Alors je vous laisserai vous faire une idée, une chose est sûre le rapport est simple et visuel en ce qui concerne jDIffChaser. Un page html avec les différences trouvées sous forme des trois images: le screenshot de la version en production, celui de la version de dev, et une image mettant en évidence les différences entre les deux en les entourant d'un train bleu et en dégageant les zones similaires...

jDiffChaser n'est pas un outil de test, il n'y a pas d'assertions. Il s'agit d'un outil d'aide à la détection de différences entre les versions, en un coup d'oeil chaque matin sur le rapport, on voit quelles sont les différences visuelles entre les deux versions, après aux développeurs de savoir si c'est dû à un bug ou s'il s'agit d'une évolution de l'interface.

Et puis, n'hésitez pas à donner votre avis sur l'outil si jamais vous l'utiliser et à apporter des idées... Je suis encore en train de coder dessus ce matin pour couvrir un besoin que notre équipe a pour maintenir les scenarios, l'outil évolue tranquillement depuis qu'il est utilisé, ie 2006...

Voilà, désolé pour la longueur, je vous invite à visiter jdiffchaser.sourceforge.net pour des infos ou à me contacter, n'hésitez pas.
0
Bonjour,

Je fais partie de l'équipe développant jDiffChaser et je suis tombé sur votre message via Google. Je vais donc tenter de répondre en toute objectivité à vos questions bien ciblées ;)

Système: JDiffChaser fonctionne sans problème sous windows (c'est l'environnement sur lequel il tourne chaque jour dans mon équipe sur un projet à l'interface graphique critique). Il fonctionne aussi sous macos, je l'utilise aussi sur ce système plus occasionnellement. Théoriquement, tout devrait être ok sous Linux, vu que tout est full java si vous tournez en 1.5 minimum. En 1.4, et uniquement pour l'enregistrement de scenarii, jDiffChaser utilise des appels JNI (natifs) pour avoir la fenêtre de la télécommande au-dessus des autres...

Planification: J'imagine que vous parlez là de scheduling, ie d'automatiser les scripts? Si c'est le cas, les équipes utilisant jDiffChaser planifient simplement un tâche ant comme décrit et donné en exemple dans la doc jDiffChaser (via CruiseControl ou simplement un script système, .bat ou .sh), c'est comme ça qu'un de nos projets effectuent plus de 300 comparaisons d'écrans par nuit.

Recorder: jDiffChaser a un recorder. Pour enregistrer un scénario, vous lancez votre appli selon les guidelines jDiffChaser (qui lui greffe un recorder), et une fenêtre représentant la télécommande du recorder apparaît. Cette télécommande permet de déclencher le début de l'enregistrement des actions, de déclencher le screenshot, etc... Si votre appli est en plein écran, vous pouvez rendre la télécommande translucide, etc...

Note importante: jDiffChaser ne vous demande pas de stocker des screenshots de références, car c'est une opération coûteuse que l'on devrait refaire à chaque nouvelle release (imaginez-vous refaire "à la main" 200 screenshots à chaque nouvelle release). Au lieu de cela, à chaque nouvelle version mise en production, il est bon de la donner à jDiffChaser afin qu'il rejoue les scénarii sur la nouvelle version de production (à vous d'adapter les quelques scenarii qui auront évolués, en général peu) et sur la version de dev actuelle et qu'il compare ces nouveaux screenshots. Les phases de déploiement doivent être faites via du scripting, par exemple via ant.

Les rapports générés: corrects ou pas? Alors je vous laisserai vous faire une idée, une chose est sûre le rapport est simple et visuel en ce qui concerne jDIffChaser. Un page html avec les différences trouvées sous forme des trois images: le screenshot de la version en production, celui de la version de dev, et une image mettant en évidence les différences entre les deux en les entourant d'un train bleu et en dégageant les zones similaires...

jDiffChaser n'est pas un outil de test, il n'y a pas d'assertions. Il s'agit d'un outil d'aide à la détection de différences entre les versions, en un coup d'oeil chaque matin sur le rapport, on voit quelles sont les différences visuelles entre les deux versions, après aux développeurs de savoir si c'est dû à un bug ou s'il s'agit d'une évolution de l'interface.

Et puis, n'hésitez pas à donner votre avis sur l'outil si jamais vous l'utilisez et à apporter des idées... Je suis encore en train de coder dessus ce matin pour couvrir un besoin que notre équipe a pour maintenir les scenarios, l'outil évolue tranquillement depuis qu'il est utilisé, ie 2006...

Voilà, désolé pour la longueur, je vous invite à visiter jdiffchaser.sourceforge.net pour des infos ou à me contacter, n'hésitez pas.
0
rodrigue62 Messages postés 190 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 10 janvier 2011 30
19 déc. 2008 à 16:28
Bonjour,

Pourriez-vous m'expliquer comment lancer le recorder pour capturer un test?
Merci d'avance.
0
Bonsoir,

jDiffChaser a besoin du nom de la fenêtre depuis laquelle enregistrer les actions. Ce nom est le nom du composant Java, fournit par la méthode Component.getName().
Ceci est expliqué plus en détail dans le manuel que vous pouvez trouver dans l'archive téléchargeable mais pour faire court: soit vous avez accès au code de l'appli dont vous voulez tracer les évolutions de GUI, auquel cas vous pouvez définir le nom de la frame dans celui-ci et du coup l'utilsier dans jDiffChaser (recorder et player). Dans le cas plus rare où vous n'avez pas le code, vous pouvez utiliser un outil de jDiffChaser, le frame identifier. Cet outil lance l'application dont vous n'avez pas le code (via un script adapté) et donne les noms des frames sur lesquelles se promène la souris via une infobulle; la jvm a la bonne idée de donner des noms par défaut au frame, du coup on arrive même à lancer jDiffChaser sur une appli java sans en connaître le code...

Pour le cas où l'on connaît le code, par exemple, dans l'archive de jDiffChaser un exemple est:

159 <target name="run-recorder-sketchbook-sample" depends="compile,set-win-args,set-mac-args" description="Runs the sketchbook sample recorder">
160 <echo message="library.path is : ${library.path}"/>
161 <echo message="Java home is ${env.JAVA_HOME}"/>
162 <parallel>
163 <sequential>
164 <java classname="org.jdiffchaser.testing.DefaultRecorder"
165 fork="yes"
166 spawn="false"
167 jvm="${env.JAVA_HOME}/bin/java" >
168 <classpath refid="run.classpath"/>
169 <jvmarg value="-Djava.util.logging.config.file=logging.properties"/>
170 <jvmarg value="-Xmx128M"/>
171 <jvmarg value="-Djava.library.path=${library.path}"/>
172 <arg value="org.jdiffchaser.samples.sketchbook.version1_1.SketchBSample"/>
173 <arg value="SketchBSample old frame"/>
174 <arg value="./scenarios/sketchbook-sample"/>
175 <arg value="4256"/>
176 </java>
177 </sequential>
178 <sequential>
179 <java fork="yes" classname="org.jdiffchaser.scenarihandling.RemoteControlFrame"
180 jvm="${env.JAVA_HOME}/bin/java">
181 <classpath refid="run.classpath"/>
182 <jvmarg value="-Djava.library.path=${library.path}"/>
183 <arg value="4256"/>
184 </java>
185 </sequential>
186 </parallel>
187 </target>

Cette tâche lance deux process java, un contenant l'appli dont on veut enregistrer les actions (lignes 163 à 177) et un process affichant la fenêtre de la télécommande d'enregistrement (lignes 178 à 185). Pour détailler un peu plus, la ligne 172 est la classe que l'on lance habituellement pour notre appli à "DiffChaser", la ligne 173 est le nom de la frame (définie dans le code par Component.setName() appliqué à la frame), la 174 le répertoire où sauvegarder le scenario, et la 175 le port jmx surlequel la "télécommande" va se plugger pour commander les enregistrements.

Pour exemple d'une appli dont on ne connaît pas ou dont on a pas touché au code, l'archive de jDiffChaser contient des targets utilisée pour "DiffChaser" jEdit, un projet que vous connaissz peut-être.
La première target nous permet d'utiliser l'outil servant à identifier le nom de la frame depuis laquelle enrgistrer les actions:

366 <target name="run-frameidentifier-jedit" depends="compile,set-win-args,set-mac-args" description="run Frame Identifier on jEdit">
367 <echo message="library.path is : ${library.path}"/>
368 <echo message="Java home is ${env.JAVA_HOME}"/>
369 <java fork="yes" classname="org.jdiffchaser.testing.FrameIdentifier">
370 <classpath refid="jedit.classpath"/>
371 <jvmarg value="-Djava.util.logging.config.file=logging.properties"/>
372 <jvmarg value="-Djava.library.path=${library.path}"/>
373 <jvmarg value="-Xmx128M"/>
374 <!--jvmarg value="-DuseDropShadow=true"/-->
375 <arg value="org.gjt.sp.jedit.jEdit"/>
376 </java>
377 </target>


Une fois le nom de la frame trouvé (ici à priori, c'est "frame1"), on peut lancer les enregitrements via un target du type:

407 <target name="run-localplayer-jedit" depends="compile,set-win-args,set-mac-args" description="run Default Scenario Player for jedit">
408 <echo message="library.path is : ${library.path}"/>
409 <echo message="Java home is ${env.JAVA_HOME}"/>
410 <java fork="yes" classname="org.jdiffchaser.testing.DefaultPlayer">
411 <classpath refid="jedit.classpath"/>
412 <jvmarg value="-Djava.util.logging.config.file=logging.properties"/>
413 <jvmarg value="-Djava.library.path=${library.path}"/>
414 <!-- 2 lines below to change DefaultPlayer default exit key sequence, as an example -->
415 <!-- from Alt-Q (DefaultPlayer default) to Alt-C -->
416 <jvmarg value="-Dexit.key=C"/>
417 <jvmarg value="-Dexit.key.modifier=Alt"/>
418 <jvmarg value="-Xmx128M"/>
419 <arg value="org.gjt.sp.jedit.jEdit"/>
420 <arg value="frame1"/>
421 <arg value="./screenshots/jedit"/>
422 </java>
423 </target>

Voilà,

Notez que nous sommes actuellement en train d'essayer d'intégrer un moyen d'enregistrer les actions via client vnc, ce qui ouvre un champ d'applications bien plus grand, par exemple, ce que l'on a déjà testé (mais pas encore intégrer au code open source): enregistrer et jouer des scénarios via vnc sur des serveurs virtuels dans lesquels on fait tourner l'appli que l'on veut , dans ses versions successives, ou deux versions d'un même site web sur un certain type de navigateur, etc...
0
A propos, dans l'archive téléchargeable de jDiffChaser, nous avons intégré des targets de démo, il suffit donc de télécharger le package, le décompacter, lancer un bon vieux "ant" dans le répertoire résultant et un "ant -projecthelp" vous fournira les targets disponibles, ie:

Buildfile: build.xml

This buildfile builds the jDiffChaser.

Main targets:

all Builds dist/${ant.project.name}-${version}.jar
clean -> Cleans all
run-frameidentifier-jedit run Frame Identifier on jEdit
run-frameidentifier-sketchbook-sample run Frame Identifier on sketchbook sample v2
run-guitests-sketchbook-sample run all scenarios for sketchbook sample
run-guitests-sketchbook-sample-v0.8vs-v0.9+ run all scenarios for sketchbook sample, comparing a version that was adapted for jdiffchaser 0.8 with t
he current version for jdiffchaser 0.9
run-localplayer-jedit run Default Scenario Player for jedit
run-localplayer-sketchbook-sample run Default Scenario Player for sketchbook sample
run-recorder-jedit Runs the jedit sample recorder
run-recorder-sketchbook-sample Runs the sketchbook sample recorder
run-zonesToHideEditor run the editor defining zones to hide
Default target: all

Voilà.... tout ce qui est estampillé sketchbook tournera out of the box, il s'agit de l'exemple offciel (par contre, dans les cas de jedit, ne pas oublier d'adapter les chemins dans <property name="jedit.home" value="C:\Program Files\jEdit"/> du build.xml)
0
hello,
j'ai un code java , je renomme mon composant gui (setname("boutton_right"), et que je lance ça ne marche pas
0
Aucune raison que ça ne marche pas, le naming d'un composant Swing n'est pas utilisé. Le robot qui joue le scénario (de même que la "parasite" qui l'enregistre) se base uniquement sur les coordonnées et types d'events, c'est d'ailleurs l'intérêt de l'approche visuelle (qui a d'autres inconvénients évidemment, l'approche dépend des besoins).
Il doit y avoir un autre problème de votre côté.
0