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

Tests et Performance Java Discussion :

Lecteur Email et expression régulière [JMeter]


Sujet :

Tests et Performance Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 40
    Par défaut Lecteur Email et expression régulière
    Bonjour,
    Je voudrais extraire dans un mail une url de confirmation pour
    l'utiliser ultérieurement.
    Format : xxx/inscription.html?identifiant=XXXXXX

    J'ai fait plusieurs essais et voici mes différents résultats :

    J'ai utiliser un Echantillon Lecteur Email et ce récupère bien les
    mails. Cependant avec un extracteur d'expression régulière je n'accède
    pas aux mails mais à la réponse général qui est le nombre de mails
    trouvés.

    1 / Les mails sont considérés comme des sous résultats. Y a-t-il un
    moyen d'utiliser les sous résultats dans un extracteur d'expression
    régulière
    ?

    2/ J'ai voulu utiliser un Post-Processeur BeanShell mais là c'est
    comme si il n'était pas exécuté, pourquoi?

    3/ J'ai mis le même code que dans mon Post-Processeur BeanShell dans
    une Assertion BeanShell et là cela fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import org.apache.jmeter.samplers.SampleResult; 
    SampleResult[] results = Response.getSubResults(); 
    vars.put("EMAIL_RESPONSE",results[0].getResponseDataAsString());
    4/ J'ai voulu rajouter dans l'assertion une expression régulière avec
    cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ${__regexFunction(identifiant=(.+?)",$1$,1,,"Pas trouvé",IDENTIFIANT,EMAIL_RESPONSE)};
    Et là ma variable IDENTIFIANT est toujours valorisé à "Pas trouvé"
    alors que mon expression est correcte.

    5/ si je copie cette fonction dans un Echantillon BeanShell placé
    après mon Echantillon Lecteur d'email alors cela fonctionne.

    Quelqu'un peut-il m'expliquer ce comportement, et me dire ce que j'ai
    fait comme erreur ?

    Merci,

  2. #2
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 095
    Par défaut Reponse possible.
    Bonjour,

    Je ne comprends pas bien votre façon de faire. Mais pour réaliser ce que vous décrivez, à savoir, extraire xxx et XXXXXX d'une chaine contenant la suite de caractères /inscription.html?identifiant= je procederai ainsi :

    String valeurTest = "n'importe quels caractères abc/inscription.html?identifiant=DEFGHI";

    Je procéderai ainsi :

    En premier lieu, pour éviter les erreurs, je contrôlerai la présence de '/inscription.html?identifiant=' dans la chaîne.

    boolean verif = valeurTest.matches(".*[^\\p{javaWhitespace}]{3}/inscription\\.html\\?identifiant=[^\\p{javaWhitespace}]{6}.*");
    if (verif) {
    String[] reponses = valeurTest.split("/inscription\\.html\\?identifiant=");
    String xxx, XXXXXX;
    if (reponses[0].length() > 3) xxx = reponses[0].substring(reponses[0].length() - 3);
    else xxx = reponses[0];
    if (reponses[1].length() > 6) XXXXXX = reponses[1].substring(reponses[1].length() - 6);
    else XXXXXX = reponses[1];
    }

    Voilà, à l'issue, le String xxx contiendra par rapport à l'exemple la valeur "abc", et XXXXXX contiendra "DEFGHI".
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  3. #3
    Membre averti
    Inscrit en
    Janvier 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 40
    Par défaut
    Bonjour merci pour votre réponse.

    Cependant mon problème n'est pas sur l'expression régulière mais sur la possibilité de l'utiliser sur un Echantillon Lecteur Email qui stocke les mails en sous résultats.

    Si j'utilise ce code dans un Post-Processeur BeanShell les variables sont remplis mais l'identifiant n'est jamais trouvé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import org.apache.jmeter.samplers.SampleResult; 
     
    SampleResult[] results = prev.getSubResults(); 
     
    vars.put("EMAIL_RESPONSE",results[0].getResponseDataAsString()); 
     
    ${__regexFunction(identifiant=(.+?)",$1$,1,,"Pas trouvé",IDENTIFIANT,EMAIL_RESPONSE)};
    Par contre si je met la dernière ligne dans un Echantillon BeanShell, cela fonctionne.

    Pourquoi je ne peut pas faire ce code en 1 fois et que je suis obligé de le découpé en 2?

    Merci

  4. #4
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 095
    Par défaut Bon, dans ce cas...
    Ok. Je n'ai pas le niveau pour comprendre votre ligne de code :
    ${__regexFunction=(.+?)", $1$, 1, ,"Pas trouvé",IDENTIFIANT, EMAIL_REPONSE}

    Je me permettrai donc un simple regard 'syntaxique'.
    Et là, je m'interroge, n'aurait-il pas mieux vallu écrire comme ça :
    ${__regexFunction="(.+?),$1$,1,,\\"Pas trouvé\\"",IDENTIFIANT, EMAIL_REPONSE}

    En tout cas, dans votre ligne, il y a 3 double quote. Ca n'a pas l'air logique puisque les double quote servent à délimiter une constante chaîne, il en faut deux par constante, on devrait donc en avoir systématiquement un nombre pair ?
    C'est une idée....
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  5. #5
    Membre averti
    Inscrit en
    Janvier 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 40
    Par défaut
    Merci d'avoir regardé mon problème.

    J'ai maintenant mes réponse grâce à Milamber.

    En fait mon problème venait du fait que je mélangeais du code Java avec une fonction JMeter.

    __regexFunction est une fonction JMeter.

    Le problème c'est que les fonctions JMeter sont interprétées avant le Java et donc lorsque la fonction était interprétée la variable EMAIL_REPONSE était encore vide.

    J'ai donc remplacé cette fonction par du Java (comme proposé par pursang).

    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
    import java.util.regex.*; 
    import org.apache.jmeter.samplers.SampleResult; 
    SampleResult[] results = prev.getSubResults(); 
    Pattern recherche = Pattern.compile("identifiant=(.+?)\""); 
    Matcher resultat = 
    recherche.matcher(results[0].getResponseDataAsString()); 
    if (resultat.find()) 
    { 
            vars.put("IDENTIFIANT",resultat.group(1)); 
    } 
     
    else 
    { 
            vars.put("IDENTIFIANT","Pas trouvé"); 
    }
    Et maintenant cela fonctionne parfaitement dans mon Post-Processeur BeanShell.

    L'autre point important dans mon problème était la possibilité d'accéder aux mails qui sont considérés comme des sous échantillons et donc pas accessible avec un Extracteur Expression régulière.

    Cela est maintenant possible dans la prochaine version beta.

    Voilà, en espérant que cela pourra aider certain.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Expression régulière email
    Par Konami15 dans le forum ASP
    Réponses: 5
    Dernier message: 22/10/2008, 14h18
  2. expression régulière pour un email
    Par Sh4dow49 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/08/2008, 13h54
  3. [RegEx] Expression régulière pour vérification adresse email
    Par ph_anrys dans le forum Langage
    Réponses: 1
    Dernier message: 08/07/2008, 16h54
  4. Expression régulière de test email
    Par Ekimasu dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/05/2007, 16h30
  5. [Expression régulière] - Extraction d'un email
    Par kirsoul dans le forum Langage
    Réponses: 2
    Dernier message: 23/05/2006, 14h28

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