IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Quels frameworks de test utilisez-vous ?


Sujet :

JSF Java

  1. #21
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    finalement combien ca coute de mettre en place ce genre de test ? en terme de temps


    actuellement j ai 16 utilisateurs qui testent ce qu'on produit ...j'aimerais voir la réaction de l'appli pour 5000 users en même temps ...

  2. #22
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    pour tester la montée en charge c'est encore autre chose . Faut utiliser des trucs comme JMeter

    Selenium, junit, shale-test vont te permettre de lancer des tests unitaire, mais on utilise rarement ca pour la montée en charge


    les test unitaire, c'est "si je faits çà, ca dois répondre çà", la montée en charge c'est "si j'ai 5000 utilisateurs, la réponse doit arriver dans les 200ms"

    Les tests de montée en charge, ca met quelque minute à configurer avec JMeter, après tu lance, tu va te chercher un café et tu regarde

    Les tests selenium, y a du bordel à mettre en place, donc les premiers seront plus long à configurer (ici on a mis 3 jours à automatiser correctement les premiers tests selenium), après, les suivant reprenent la meme architecture, y a plus qu'à les écrire, c'est aussi rapide à écrire que des tests JUnit classique. Mais ca vaut le coup. Surtout quand le fenetres défilent à l'écran et que le sysadmin insiste pour te faire installer un anti spyware parce que "c'est curieux ces fenetres qui s'ouvrent toutes seules :p"

  3. #23
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    mais mon problème reste que le même qu'au départ es ce que jmeter est capable de compléter mes champs autocomplete et de gérer des interfaces icefaces complexe ? j'ai du mal à la croire sans une interaction lourde de la part des développeurs

  4. #24
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tu dosi séparer ton test en 2

    avec selenium, tu vérifie que l'interface se comporte correctement pour un utilisateur.

    avec jmeter, tu fait un enregistrement de session (oui jmeter est capable de capturer une session au niveau de la couche tcp/ip et traduire çà en série de requetes http à envoyer au serveur) et tu lui demande de rejouer cette session de requetes 5000 fois en //, et tu regarde si le serveur tiens le coup. C'est deux tests différents

    Si tu veux tout tester d'un coup, tu va aboutir à des test inmaintenable, qui casseront sans nécessité à la première occasion. Faut saucisonner tes test en éléments de base. T'as un formulaire avec 50 champs auto-complete? Tu crée des pages tests avec 2/3 autocomplete et tu vérifie que le composant se comporte correctement

  5. #25
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Points : 231
    Points
    231
    Par défaut
    Tu as toute fait raison tchize_, pour les tests de charge, j'ai pas trouvé mieux que JMeter, c'est simple et assez complet, avec plein de stats etc.

    Pour tester l'interface graphique, j'ai essayé HtmlUnit et Selenium, je préfère de loin Selenium, même si jusqu'à maintenant je n'arrive pas à faire des tests très complexe sur mon appli Icefaces, surtout sur les datatable imbriquées, mais il faut dire que ça fait un moment que j'y est pas toucher, car j'ai essayé de voir pas mal d'autres frameworks.

    Je vous tiendrais au courant pour mes tests Selenium, que je vais reprendre aujourd'hui

  6. #26
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Points : 231
    Points
    231
    Par défaut
    Salut,

    Avec Selenium, pour attendre le chargement d'une page, on a la méthode waitForPageToLoad, mais pour attendre le chargement des données suite à un clique sur une case à cocher par exemple comment peut on faire ? le sleep ne marche pas, il y a un blocage et le wait déclenche une exception (current thread not owner). Comment pourrais je faire cela ?

  7. #27
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    si t'es coté java (en utilisant donc une instance de com.thoughtworks.selenium.Selenium), tu as plusieurs méthodes:

    * setSpeed(), qui défini le temps que selenium dois prendre encre chaque opération, utile pour laisser au serveur web le temps de réagir en ajax
    * waitForCondition(), que j'ai jamais essayé
    * ou le sleep en java (explique pourquoi ca marche pas si ca marche pas)

    le "wait", coté java, c'est présent sur tout les objet et ça a a voir avec les sémaphore -> ne te concerne pas.

  8. #28
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Points : 231
    Points
    231
    Par défaut
    Merci pour ces precisions, je vais essayer setSpeed.

    Pour le sleep, il ne marche pas dans le cas d'un test en lançant le browser selenium. IL cree un blocage ...

    Voila une petite classe de test que j'utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    public class ObmSelenium extends TestCase {
     
    	private Selenium browser;
     
        public void setUp() throws Exception {
            browser = new DefaultSelenium("localhost",
                4444, "*iexplore", "http://localhost:8087/extranet/");
            browser.start();
        }
     
    	public void testNew() throws Exception {
    		System.out.println("Start testing");
     
    		browser.open("/extranet/login.iface");
    		browser.type("loginForm:login", "test");
    		browser.type("loginForm:password", "testtest");
    		browser.click("loginForm:j_id25");
     
    		System.out.println("User connected");
     
    		browser.waitForPageToLoad("30000");
     
     
    		browser.click("idFormFilter:idTimeFilter:_2");
    		System.out.println("Week view activated");
     
    		Thread.sleep(10000);
     
    		browser.click("idFormFilter:idTimeFilter:_3");
    		System.out.println("Opened view activated");
     
     
    		browser.click("idFormFilter:idParentFilter:_2");
    		System.out.println("Child orders view activated");
     
     
    		browser.click("idFormFilter:idParentFilter:_1");
    		System.out.println("Parent ordres view activated");
     
     
     
    	}
     
    	public void tearDown() {
    		browser.stop();
    	}
     
    }
    Le programme se bloque au niveau du premier sleep, si je l'enlève ça marche, mais les données n'ont sûrement pas était chargées.

    Pour le wait ta raison, je l'ai mit bêtement sans réfléchir.

    EDIT

    Je viens de remplacer le sleep par un setSpeed, ça me cause aussi un blocage sur ce niveau.
    Si je met le setSpeed au debut directement après le browser.start(), le programme se bloque sur witForPageToLoad, ta une idée ???

    Merci

  9. #29
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    remplace par

    try{
    Thread.sleep(10000);
    } catch (InterruptedException e){
    e.printStackTrace();
    }

    histoire qu'un interrupted arrete pas ton test

    aussi, recommendation. quand tu dois viser des composant par leur id, assure toi que les id sont fixe. Des choses comme _id1, _id2, c'est fortement suceptible de changer d'une compilation à l'autre. Imagine qu'un developpeur rajoute un composant non nommé qui prend l'_id1, ben ton test marche plus car tous les autres id sont décallé

    donc quand selenium vise un composant jsf, toujours s'assurer que ce composant a un id="...." dans le template

  10. #30
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Esil2008 Voir le message
    EDIT

    Je viens de remplacer le sleep par un setSpeed, ça me cause aussi un blocage sur ce niveau.
    Si je met le setSpeed au debut directement après le browser.start(), le programme se bloque sur witForPageToLoad, ta une idée ???
    attends 30 secondes pour la wait Si tu lance dans un debugger (genre eclipse) fait un pause de ton application et regarde dans la stack ce qu'il a l'air de vouloir attendre. C'est peut etre un problème de synchro entre internet explorer et le serveur selenium. Essaie peut etre avec firefox juste pour t'en assurer. Personellement, j'ai jamais utilisé ie dans le tests, mais mes collègues le font et ca a l'air de marcher.

  11. #31
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Points : 231
    Points
    231
    Par défaut
    Merci pour ton conseil,

    Au faite concernant les ids, j'ai bien indiqué les id de tous mes composants JSF que j'utilise, sauf que pour le cas d'un ensemble de case à cocher dynamique, la génération est automatique, je peux pas faire grand chose, c'est pour ça il ya des choses comme idTimeFilter:_3. Sinon pour le bouton loginForm:j_id25 c'est vrai mais le logon je le gére pas dans mon module, c'est géré dans le core de l'appli et malheureusement je suis pas en charge de ça, mais je vais transmettre à mon collegue

    Pour le try catch, je viens de le mettre et ça marche, même si j'ai aucune exception de lancer ! mais cette fois ci ça se bloque sur la dernière commande browser.click("idFormFilter:idParentFilter:_1");

    attends 30 secondes pour la wait Si tu lance dans un debugger (genre eclipse) fait un pause de ton application et regarde dans la stack ce qu'il a l'air de vouloir attendre.
    Si je suspend l'execution, j'aurai pas mal de thread de Selenium qui seront suspendus aussi, comment savoir ce qu'il est entrain d'attendre (la vue debug ne donne pas grand chose) ?

    Essaie peut etre avec firefox juste pour t'en assurer
    C'est ce que j'avais essayer lors de premiere utilisation de selenium, mais j'ai eu soit une exception, la voila, c tjrs d'actualité côté serveur biensur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    11:37:50.546 WARN - POST /selenium-server/driver/ HTTP/1.1
    java.lang.RuntimeException: Firefox refused shutdown while preparing a profile
            at org.openqa.selenium.server.browserlaunchers.FirefoxCustomProfileLauncher.waitForFullProfileToBeCreated(FirefoxCustomProfileLaunch
    er.java:277)
            at org.openqa.selenium.server.browserlaunchers.FirefoxCustomProfileLauncher.launch(FirefoxCustomProfileLauncher.java:147)
            at org.openqa.selenium.server.browserlaunchers.AbstractBrowserLauncher.launchRemoteSession(AbstractBrowserLauncher.java:24)
            at org.openqa.selenium.server.SeleniumDriverResourceHandler.getNewBrowserSession(SeleniumDriverResourceHandler.java:587)
            at org.openqa.selenium.server.SeleniumDriverResourceHandler.doCommand(SeleniumDriverResourceHandler.java:396)
            at org.openqa.selenium.server.SeleniumDriverResourceHandler.handleCommandRequest(SeleniumDriverResourceHandler.java:375)
            at org.openqa.selenium.server.SeleniumDriverResourceHandler.handle(SeleniumDriverResourceHandler.java:123)
            at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
            at org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
            at org.mortbay.http.HttpServer.service(HttpServer.java:909)
            at org.mortbay.http.HttpConnection.service(HttpConnection.java:816)
            at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:982)
            at org.mortbay.http.HttpConnection.handle(HttpConnection.java:833)
            at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:244)
            at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
            at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
    Caused by: org.openqa.selenium.server.browserlaunchers.FirefoxCustomProfileLauncher$FileLockRemainedException: Lock file still present! C:\D
    OCUME~1\mjamal\LOCALS~1\Temp\customProfileDir246093\parent.lock
            at org.openqa.selenium.server.browserlaunchers.FirefoxCustomProfileLauncher.waitForFileLockToGoAway(FirefoxCustomProfileLauncher.jav
    a:235)
            at org.openqa.selenium.server.browserlaunchers.FirefoxCustomProfileLauncher.waitForFullProfileToBeCreated(FirefoxCustomProfileLaunch
    er.java:275)
            ... 15 more

    Merci bq

  12. #32
    Membre averti
    Profil pro
    Lead Tech Agile
    Inscrit en
    Septembre 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Lead Tech Agile

    Informations forums :
    Inscription : Septembre 2004
    Messages : 316
    Points : 417
    Points
    417
    Par défaut Selenium: plus de limite avec xpath
    Pour ceux qui sont bloqué à cause des identifiants, une solution est l'utilisation de xpath.

    Mon client à ce problème des id générés par JSF, je lui ai conseillé d'utiliser xpath en s'appuyant sur d'autres valeurs que l'id pour cibler un composant.

    Je lui ai montré un exemple avec un bouton dont le label est "Rechercher". En indiquant la requête XPath suivante, et sachant que les labels des boutons sont stables, les tests deviennent stables:

    //input[@value='Rechercher']

    Je conseille l'utilisation de XPath qui est normalisé et qui permet de manipuler le DOM sur des bases solides. Pour les bidouilleurs, je déconseille l'utilisation de Javascript qui est une autre technique pour obtenir des locators.

    PS: pour ton problème de tableau qui génère des ID correspondant aux lignes et colonnes dynamique tu peux utiliser une requete XPath de ce type:
    //table[@id='id_stable_de_ta_table']/tr[position()=1]/td[position()=1]

    -> Cette requete XPath va sélectionner la première case de ton tableau.

  13. #33
    Membre éprouvé

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Points : 900
    Points
    900
    Par défaut Du neuf sur cette question?
    Nécromancie de topic! (Merci la fonction recherche)

    J'aurais souhaité savoir si vous aviez connaissance de nouveaux outils plus pratiques qui seraient apparus récemment pour faire des tests unitaires sur des appli JSF avec des appels javascript/ajax dans tous les sens?

    J'ai un peu fouillé déjà, mais j'ai l'impression que c'est toujours Sélénium qui domine les débats..
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 13
    Dernier message: 15/10/2019, 01h44
  2. [Sondage] Quels plugins pour Eclipse utilisez-vous ?
    Par xavlours dans le forum Eclipse
    Réponses: 75
    Dernier message: 13/07/2014, 15h58
  3. Réponses: 43
    Dernier message: 10/01/2013, 17h54
  4. Réponses: 145
    Dernier message: 15/02/2009, 11h51
  5. Réponses: 7
    Dernier message: 23/11/2006, 15h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo