Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Débat Java : Quel framework de test utiliser pour une application JSF ?

Le , par Esil2008

0PARTAGES

0  0 
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

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de tchize_
Expert éminent sénior https://www.developpez.com
Le 12/03/2009 à 17:58
pour 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 : Sélectionner tout
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
50

import 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]"));
               
        }
}
Seules limitations rencontrées avec selenium:
  1. Pas possible de tester les fileupload (selenium travaillant en javascript)
  2. on ne peux rien faire sur la machine pendant ce temps (envahie de fenetre firefox pendant quelques minutes)
  3. Les adminitrateur système veulent t'effacer ce virus qui affiche des popups :p
  4. Compiler le war + démarrer tomcat, même si c'est automatique dans le test, ca prend du temps (quelques minutes)
  5. 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)
0  0 
Avatar de Esil2008
Membre actif https://www.developpez.com
Le 12/03/2009 à 18:24
Merci 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 encore
0  0 
Avatar de romaintaz
Rédacteur https://www.developpez.com
Le 13/03/2009 à 9:08
Il existe aussi JSF Unit de JBoss, mais je ne l'ai jamais essayé. Quelqu'un a un retour à faire sur l'outil ?
0  0 
Avatar de Esil2008
Membre actif https://www.developpez.com
Le 25/03/2009 à 16:05
Salut 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 Mock
0  0 
Avatar de tchize_
Expert éminent sénior https://www.developpez.com
Le 25/03/2009 à 16:08
non 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.html
0  0 
Avatar de Esil2008
Membre actif https://www.developpez.com
Le 25/03/2009 à 16:21
Merci 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 !

Merci
0  0 
Avatar de tchize_
Expert éminent sénior https://www.developpez.com
Le 25/03/2009 à 18:09
le framework de test est de toutes facon utilisé par shale en lui même pour ses unit test -> suffit de regarder les unit test
0  0 
Avatar de *alexandre*
Inactif https://www.developpez.com
Le 25/03/2009 à 21:11
Es-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 ...
0  0 
Avatar de tchize_
Expert éminent sénior https://www.developpez.com
Le 25/03/2009 à 21:57
avec 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.
0  0 
Avatar de *alexandre*
Inactif https://www.developpez.com
Le 26/03/2009 à 14:23
Citation Envoyé par tchize_ Voir le message
avec 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.
Merci ça l'air intéressant en effet
0  0