web-dev-qa-db-fra.com

Utiliser le sélénium IDE avec des valeurs aléatoires

Est-il possible de créer des tests Selenium en utilisant le plugin Firefox qui utilise des valeurs générées aléatoirement pour faciliter les tests de régression?

L'histoire complète: .__ Je voudrais aider mes clients à effectuer des tests d'acceptation en leur fournissant une suite de tests qui utilise des connaissances intelligentes pour créer des valeurs aléatoires (ou au moins pseudo-aléatoires) pour la base de données. L'un des problèmes avec mes tests Selenium IDE pour le moment est qu'ils ont des valeurs prédéfinies, ce qui rend certains types de tests problématiques. 

42
Toby Hede

Tout d’abord, Selenium IDE est plutôt limité, vous devriez envisager de passer à Selenium RC, qui peut être piloté par Java, Perl ou Ruby ou d’autres langages.

En utilisant uniquement Selenium IDE, vous pouvez incorporer des expressions JavaScript pour dériver les paramètres de commande . Vous devriez pouvoir taper un nombre aléatoire dans un champ de texte, par exemple:

type fieldName javascript{Math.floor(Math.random()*11)}

Update: Vous pouvez définir des fonctions d'assistance dans un fichier nommé "user-extensions.js". Voir la Référence de sélénium .

48
Thilo

(Basé sur la réponse de Thilo) Vous pouvez mélanger des littéraux et des nombres aléatoires comme ceci:

javascript{"joe+" + Math.floor(Math.random()*11111) + "@gmail.com";}

Avec Gmail, tout ce qui utilise des alias, par exemple, [email protected], sera automatiquement envoyé à votre adresse [email protected]

Multiplier * 11111 pour vous donner plus de valeurs aléatoires que 1 à 9 (dans l'exemple de Thilo)

29
corbacho

Vous pouvez ajouter l'utilisateur exentions.js pour obtenir les valeurs aléatoires.

Copiez le code ci-dessous et enregistrez-le sous l'extension .js (randomgenerator.js) et ajoutez-le aux extensions du noyau Selenium (SeleniumIDE -> Options ---> onglet général)

Selenium.prototype.doRandomString = function( options, varName ) {

    var length = 8;
    var type   = 'alphanumeric';
    var o = options.split( '|' );
    for ( var i = 0 ; i < 2 ; i ++ ) {
        if ( o[i] && o[i].match( /^\d+$/ ) )
            length = o[i];

        if ( o[i] && o[i].match( /^(?:alpha)?(?:numeric)?$/ ) )
            type = o[i];
    }

    switch( type ) {
        case 'alpha'        : storedVars[ varName ] = randomAlpha( length ); break;
        case 'numeric'      : storedVars[ varName ] = randomNumeric( length ); break;
        case 'alphanumeric' : storedVars[ varName ] = randomAlphaNumeric( length ); break;
        default             : storedVars[ varName ] = randomAlphaNumeric( length );
    };
};

function randomNumeric ( length ) {
    return generateRandomString( length, '0123456789'.split( '' ) );
}

function randomAlpha ( length ) {
    var alpha = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split( '' );
    return generateRandomString( length, alpha );
}

function randomAlphaNumeric ( length ) {
    var alphanumeric = '01234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split( '' );
    return generateRandomString( length, alphanumeric );
}

function generateRandomString( length, chars ) {
    var string = '';
    for ( var i = 0 ; i < length ; i++ )
        string += chars[ Math.floor( Math.random() * chars.length ) ];
    return string;
}

Manière d'utiliser 

Command                Target     Value
-----------           ---------   ----------
randomString           6           x
type                username       ${x}

Le code ci-dessus génère une chaîne de 6 caractères et est assigné à la variable x

Le code au format HTML ressemble à ceci:

<tr>
    <td>randomString</td>
    <td>6</td>
    <td>x</td>
</tr>
<tr>
    <td>type</td>
    <td>username</td>
    <td>${x}</td>
</tr>
21
RajendraChary

Voici une solution en une ligne pour générer une chaîne de lettres aléatoire dans JS:

"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split("").filter(function(e, i, a) { return Math.random() > 0.8 }).join("")

Utile pour coller dans Selenium IDE.

5
afternoon
<tr>
<td>store</td>
 <td>javascript{Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 8)}</td>
<td>myRandomString</td>
</tr>
2
Jonathan Conibeer

Une ligne pour choisir au hasard parmi un petit nombre d'alternatives:

javascript{['brie','cheddar','swiss'][Math.floor(Math.random()*3)]}
2
TomG

J'ai légèrement amélioré la fonction generateRandomString .. Lorsque FF plante, il est bon de pouvoir utiliser à nouveau le même nombre aléatoire.

En gros, il vous sera demandé de saisir vous-même une chaîne. Si vous n'entrez rien, cela le générera.

function generateRandomString( length, chars ) { var string=Prompt("Please today's random string",''); if (string == '') {for ( var i = 0 ; i < length ; i++ ) string += chars[ Math.floor( Math.random() * chars.length ) ]; return string;} else { return string;} }

1
bast

Tout en donnant un sens au message de RajendraChary ci-dessus, j'ai passé quelque temps à écrire une nouvelle extension de Selenium IDE. 

Mon extension permettra à l'utilisateur de renseigner une variable avec le texte lorem ipsum. Il y a un certain nombre d'options configurables et c'est devenu une petite commande sympa. Vous pouvez faire des choses comme "5 mots | wordcaps | nomarks" pour générer 5 mots lorem ipsum, tous capitalisés, sans ponctuation.

J'ai expliqué en détail l'installation et l'utilisation et fourni la base de code complète ici

Si vous jetez un coup d'œil au code, vous aurez une idée de la façon de créer des fonctionnalités similaires.

1
agileadam

Voici une autre variante de l'exemple gmail:

<tr>
  <td>runScript</td>
  <td>emailRandom=document.getElementById('email');console.log(emailRandom.value);emailRandom.value=&quot;myEmail+&quot; + Math.floor(Math.random()*11111)+ &quot;@gmail.com&quot;;</td>
 <td></td>
</tr>
0
lhoess

Math.random peut être "assez bon" mais, dans la pratique, le Classe aléatoire est souvent préférable à Math.random (). En utilisant Math.random, les nombres que vous obtenez peuvent ne pas être complètement aléatoires. Le livre "Effective Java Second Edition" traite de cela à la question n ° 47. 

0
djangofan

Une autre solution, que j'ai copiée et collée dans des centaines de tests:

<tr>
    <td>store</td>
    <td>javascript{var myDate = new Date(); myDate.getFullYear()+&quot;-&quot;+(myDate.getMonth()+1)+&quot;-&quot;+myDate.getDate()+&quot;-&quot;+myDate.getHours()+myDate.getMinutes()+myDate.getSeconds()+myDate.getMilliseconds();}</td>
    <td>S_Unique</td>
</tr>
<tr>
    <td>store</td>
    <td>Selenium Test InternalRefID-${S_Unique}</td>
    <td>UniqueInternalRefID</td>
</tr>
<tr>
    <td>store</td>
    <td>Selenium Test Title-${S_Unique}</td>
    <td>UniqueTitle</td>
</tr>
<tr>
    <td>store</td>
    <td>SeleniumEmail-${G_Unique}@myURL.com</td>
    <td>UniqueEmailAddress</td>
</tr>

Chaque suite de tests commence par définir une série de variables (s'il s'agit d'une grande suite, utilisez un fichier séparé, tel que Set_Variables.html). Ces variables peuvent ensuite être utilisées dans votre suite pour définir, tester et supprimer des données de test. Et comme les variables utilisent la date plutôt qu'un nombre aléatoire, vous pouvez déboguer votre suite de tests en recherchant les objets partageant une date.

0
andrew lorien

Selenium RC vous donne beaucoup plus de liberté que Selenium IDE, en ce sens que vous pouvez:

  • (1) Entrez n'importe quelle valeur dans un certain champ
  • (2) Choisissez un champ à tester dans un certain formulaire HTML
  • (3) Choisissez n’importe quel ordre/étape d’exécution pour tester un certain ensemble de champs.

Vous avez demandé comment entrer une valeur aléatoire dans un champ à l'aide de Selenium IDE, d'autres personnes vous ont expliqué comment générer et entrer des valeurs aléatoires dans un champ à l'aide de Selenium RC. Cela entre dans la phase de test (1): "Entrez n'importe quelle valeur dans un certain champ".

En utilisant Selenium RC, vous pouvez facilement réaliser les phases (2) et (3): tester n’importe quel champ sous n’importe quelle étape d’exécution en programmant dans un langage pris en charge, tel que Java, PHP, CSharp, Ruby, Perl, Python.

Voici les étapes à suivre pour effectuer les phases (2) et (3):

  • Créez une liste de vos champs HTML afin de pouvoir les parcourir facilement
  • Créez une variable aléatoire pour contrôler l'étape, par exemple Rand_STEP
  • Créez une variable aléatoire pour contrôler le champ, par exemple Rand_FIELD
  • [Éventuellement, créez une variable aléatoire pour contrôler la valeur entrée dans un certain champ, par exemple Rand_VALUE, si vous souhaitez effectuer la phase (1)]
  • Maintenant, dans votre algorithme de fuzzing, parcourez d’abord les valeurs de Rand_STEP, puis répétez-les à chaque itération, parcourez Rand_FIELD, puis effectuez-les enfin à travers Rand_VALUE.

Voir mon autre réponse à propos du test de fuzzing, du sélénium et des tests de boîte blanche/noire

0
CuongHuyTo