Débat Java : Quel framework de test utiliser pour une application JSF ?
Le 2009-03-12 17:19:24, par Esil2008, Membre actif
Salut
Comme il y a peu de documentation sur ce sujet, je reviens vers vous pour avoir vos feedbacks sur des frameworks de tests pour tester des applications JSF, Icefaces, Richefaces ...
Perso, j'utilise pour tester mon appli Icefaces, HtmlUnit c'est pas mal, mais je suis très limité quand c'est question de tester un composant un peu complexe. La par exemple je cale sur le test de deux data table imbriquées. C'est vraiment pas fait pour ca je pense.
Il y a JSFUnit qui apparemment permet de tester les composants JSF, mais avec une petite recherche sur google concernant mon cas. j'ai remarqué qu'il engendre des des conflits entre icefaces et jsf. Des erreurs liées au javascript aussi.
Pourriez me donner vos retours d'expériences concernant ce sujet ?
Et si quelqu'un à deja utilisé Htmlunit pour faire des tests poussés sur des composants icefaces, richefaces ou autre. ca serait bien s'il me montre comment il a procédé
Merci
Comme il y a peu de documentation sur ce sujet, je reviens vers vous pour avoir vos feedbacks sur des frameworks de tests pour tester des applications JSF, Icefaces, Richefaces ...
Perso, j'utilise pour tester mon appli Icefaces, HtmlUnit c'est pas mal, mais je suis très limité quand c'est question de tester un composant un peu complexe. La par exemple je cale sur le test de deux data table imbriquées. C'est vraiment pas fait pour ca je pense.
Il y a JSFUnit qui apparemment permet de tester les composants JSF, mais avec une petite recherche sur google concernant mon cas. j'ai remarqué qu'il engendre des des conflits entre icefaces et jsf. Des erreurs liées au javascript aussi.
Pourriez me donner vos retours d'expériences concernant ce sujet ?
Et si quelqu'un à deja utilisé Htmlunit pour faire des tests poussés sur des composants icefaces, richefaces ou autre. ca serait bien s'il me montre comment il a procédé
Merci
-
tchize_Expert éminent séniorpour tester les bean jsf, j'utilise des outils de type comme shale-test, qui fournissent des implémentation Mock des composants JSF et qui me permettent de tester les bean, les EL etc (tout ce qui n'est pas HTML) sans avoir besoin d'un conteneur web (rapide et léger à lancer tout ça). Pour le reste (tester les comportement visuels), j'utilise Selenium, qui permet de lancer directement les teste à travers un browser web (firefox ou IE) après avoir déployé un webapp de test sur un serveur de test.
En pratique, pour cette phase, on a un projet maven2 'test' de type WAR, et dans l'intégration-test on a un combinaison de Selenium server, cargo (pour démarrer un tomcat de test) et des unit tests qui ressemblent à çà:Code : 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50import junit.framework.TestCase; import com.thoughtworks.selenium.DefaultSelenium; import com.thoughtworks.selenium.SeleneseTestCase; import java.util.regex.Pattern; public class TextAndDocsParameterTest extends SeleneseTestCase { protected DefaultSelenium createSeleniumClient(String url) throws Exception { return new DefaultSelenium("localhost", 4444, "*firefox", url); } public void setUp() throws Exception { selenium=createSeleniumClient("http://localhost:6969/"); selenium.start(); } public void tearDown() throws Exception { selenium.stop(); } protected boolean isCaptureScreetShotOnFailure() {return true;} public void testTextAndDocument() throws Exception { selenium.open("test-site/test/HtmlTextAndDocsParameterRenderer.faces"); assertTrue(selenium.isElementPresent("parameterTestForm:edit:comment")); assertTrue(selenium.isTextPresent("Obvious textgoogle (be)google (com)google (uk)")); assertTrue(selenium.isElementPresent("parameterTestForm:edit:add")); assertTrue(selenium.isElementPresent("parameterTestForm:edit:0:delete")); assertTrue(selenium.isElementPresent("parameterTestForm:edit:1:delete")); verifyTrue(selenium.isElementPresent("parameterTestForm:edit:2:delete")); assertEquals("google (be)", selenium.getText("link=google (be)")); assertTrue(selenium.isElementPresent("link=Modifier ce document")); assertTrue(selenium.isElementPresent("link=google (com)")); assertTrue(selenium.isElementPresent("//a[@onclick=\"if (showBlock('parameterTestForm:edit:1:edit')) removeElementContent('parameterTestForm:edit:1:show'); return false;\"]")); assertTrue(selenium.isElementPresent("link=google (uk)")); assertTrue(selenium.isElementPresent("//a[@onclick=\"if (showBlock('parameterTestForm:edit:2:edit')) removeElementContent('parameterTestForm:edit:2:show'); return false;\"]")); selenium.type("parameterTestForm:edit:comment", "text and document test"); selenium.click("parameterTestForm:edit:add"); assertTrue(selenium.isElementPresent("parameterTestForm:edit:3:name")); assertTrue(selenium.isElementPresent("parameterTestForm:edit:3:uploadedDocument")); assertTrue(selenium.isElementPresent("parameterTestForm:edit:3:uploadedDocument")); assertTrue(selenium.isElementPresent("parameterTestForm:edit:3:update")); assertTrue(selenium.isTextPresent("Nom")); assertTrue(selenium.isTextPresent("Envoyer un fichier")); assertTrue(selenium.isTextPresent("Type de document")); assertTrue(selenium.isElementPresent("document.parameterTestForm.elements['parameterTestForm:edit:3:DocumentType'][1]")); assertTrue(selenium.isElementPresent("parameterTestForm:edit:3:DocumentType")); assertTrue(selenium.isElementPresent("document.parameterTestForm.elements['parameterTestForm:edit:3:DocumentType'][2]")); } }
- Pas possible de tester les fileupload (selenium travaillant en javascript)
- on ne peux rien faire sur la machine pendant ce temps (envahie de fenetre firefox pendant quelques minutes)
- Les adminitrateur système veulent t'effacer ce virus qui affiche des popups :p
- Compiler le war + démarrer tomcat, même si c'est automatique dans le test, ca prend du temps (quelques minutes)
- si tu teste trop fort ton composant, tu dois changer régulièrement tes tests (en particulier si les ids changent souvent, selenium se basant fortement là dessus)
j'avais testé à une époque des framework du type HttpUnit, mais c'est vraiment mal adapté (pas de test de javascript, analyse du html brut nécessaire, le moindre changement dans le html fait sauter le test, pas de garantie visuelle).
Cerise sur le gateau, les unit test selenium peuvent faire un capture d'écran lors du failure du test (non seulement tu sais quoi foire, mais tu sais ce qu'il y avait à l'écran à ce moment là :p)le 12/03/2009 à 17:58 -
Esil2008Membre actifMerci beaucoup pour ta reponse,
J'avais vu un peu selenuim mais vite fait, j'avais preferer utiliser HtmlUnit croyant que c'est plus pratique par ce qu'il est a priori plus utiliser...
En tous cas je vais me lancer dans tests plus pousser avec Selenium, j'espere qu'il pourra me tester mes data table
Merci encorele 12/03/2009 à 18:24 -
romaintazRédacteurIl existe aussi JSF Unit de JBoss, mais je ne l'ai jamais essayé. Quelqu'un a un retour à faire sur l'outil ?le 13/03/2009 à 9:08
-
Esil2008Membre actifSalut tchize_,
Est ce que tu aurais un peu de doc sur Shale ? a part la doc du site officiel. Car sur leur site je ne vois pas par ou commencer, de mon humble avis je trouve que c'est mal organisé pour quelqu'un qui ne sait absolument rien du tout sur Shale ou les implementations Mockle 25/03/2009 à 16:05 -
tchize_Expert éminent séniornon j'ai pas de doc. J'ai juste utilise la javadoc pour voir quelles classes existaient et les manipuler. Le reste, comme c'est juste des bêtes classes, ca a pas été trop dur (pas de config particulière à faire, etc)
http://shale.apache.org/shale-test/a...ocs/index.htmlle 25/03/2009 à 16:08 -
Esil2008Membre actifMerci pour ta réactivité,
tu n'aurai pas quelque part sur ta machine un exemple d'une classe hello world avec ce framework qui traine encore, ca m'aidera a commencer ?
EDIT : Desole je crois que j'ai écrit vite, je pense qu'il propose des exemples si je telecharge ce framework !
Mercile 25/03/2009 à 16:21 -
tchize_Expert éminent séniorle framework de test est de toutes facon utilisé par shale en lui même pour ses unit test -> suffit de regarder les unit testle 25/03/2009 à 18:09
-
*alexandre*InactifEs-ce possible d'initlialiser des test avec des champs autocomplete sur une application qui utilise des tabbed pane d icefaces ??? si c'est possible je me demande bien comment ...le 25/03/2009 à 21:11
-
tchize_Expert éminent sénioravec selenium, tu peux tester tout ce que tu veux coté browser. (sauf les file upload). Principe, un serveur java pilote le navigateur (firefow ou ie ou autre) par javascript pour simuler le comportement de l'utilisateur. Les requetes sont elles, effectuées par un vrai serveur (tomcat, jboss ou autre) qui donne les réponse. Plus qu'à tester que les pages correspondent à ce qu'on attends.le 25/03/2009 à 21:57
-
*alexandre*Inactifle 26/03/2009 à 14:23