Frage

Ist es möglich, Selenium-Tests mit der Firefox-Plugin, das zufällig generierte Werte verwenden, um zu tun Regressionstests?

erstellen

Die ganze Geschichte: Ich möchte meine Kunden die Abnahmeprüfung helfen, indem sie mit einer Reihe von Tests bereitstellt, die einige smarts verwenden zufällig (oder zumindest pseudo-zufälligen) Werte für die Datenbank zu erstellen. Eines der Probleme mit meinen Selenium IDE-Tests im Moment ist, dass sie vorgegebene Werte haben - die einige Arten von Tests problematisch macht.

War es hilfreich?

Lösung

Zunächst einmal, die Selenium IDE ist eher begrenzt, sollten Sie zu Selenium RC betrachten Schalen, die von Java oder Perl oder Ruby oder einigen anderen Sprachen betrieben werden kann.

Mit nur Selenium IDE, können Sie JavaScript Ausdrücke einzubetten Befehlsparameter abzuleiten. Sie sollen, um eine Zufallszahl in ein Textfeld eingeben können, zum Beispiel:

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

Update: Sie können Hilfsfunktionen in einer Datei "user-extensions.js" genannt definieren. Sehen Sie sich die Selen Referenz .

Andere Tipps

(Basierend auf Thilo Antwort) Sie können Literale und Zufallszahlen wie folgt mischen:

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

Google Mail ermöglicht, dass automatisch alles, was Aliase verwendet, zum Beispiel joe+testing@gmail.com zu Ihrer Adresse joe@gmail.com gehen

Multiplying * 11111, um Sie mehr zufällige Werte als 1 bis 9 (in Thilo Beispiel)

Sie können Benutzer exentions.js hinzufügen, um die Zufallswerte zu erhalten.

den folgenden Code kopieren und als Erweiterung .js (randomgenerator.js) speichern, und fügen Sie die Selenium Core-Erweiterungen (SeleniumIDE -> Optionen ---> Registerkarte Allgemein)

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;
}

nutzen

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

Über Code generiert 6 charactes String und der Variablen x zuzuweisen

-Code im HTML-Format sieht wie folgt:

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

Hier ist eine einzeilige Lösung eine zufällige Folge von Buchstaben in JS zu Erzeugung:

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

Nützlich für das Einfügen in Selenium IDE.

Ein Einzeiler für zufällig aus einer kleinen Gruppe von Alternativen wählen:

javascript{['brie','cheddar','swiss'][Math.floor(Math.random()*3)]}
<tr>
<td>store</td>
 <td>javascript{Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 8)}</td>
<td>myRandomString</td>
</tr>

Ich habe ein wenig improvment auf die Funktion generateRandomString. Wenn FF abstürzt, ist es gut, wieder die gleiche Zufallszahl verwenden zu können.

Im Grunde genommen, es wird Sie bitten, eine Zeichenfolge selbst eingeben. Wenn Sie nichts eingeben, es wird es generieren.

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;} }

Während oben Sinn für RajendraChary der Post zu machen, verbrachte ich einige Zeit, um eine neue Selenium IDE-Erweiterung zu schreiben.

wird Meine Erweiterung der Benutzer lassen eine Variable mit Lorem Ipsum Text füllen. Es gibt eine Reihe von konfigurierbaren Optionen und es ist in einen netten kleinen Befehl verwandelt. Sie können wie die Dinge tun "5 Wörter | wordcaps | NoMarks". 5 Lorem ipsum Wörter zu erzeugen, die alle aktiviert, ohne Interpunktion

Ich habe erklärt gründlich Installation und Nutzung der

Wenn Sie einen Blick auf den Code nehmen erhalten Sie eine Vorstellung davon, wie eine ähnliche Funktionalität zu bauen.

Hier ist eine weitere Variante des gmail Beispiel:

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

Selenium RC gibt Ihnen viel mehr Freiheit als Selenium IDE, dass Sie folgende Möglichkeiten:

  • (1) Geben Sie einen beliebigen Wert zu einem bestimmten Feld
  • Wählen Sie
  • (2) ein beliebiges Feld in einem bestimmten HTML-Formular testen
  • (3) Wählen Sie eine Ausführungsreihenfolge / Schritt einen bestimmten Satz von Feldern zu testen.

Sie gefragt, wie einiger zufälligen Wertes in einem Feld zur Eingabe mit Selenium IDE, haben andere Menschen beantworten Sie, wie zufällige Werte in einem Feld mit Selenium RC erzeugen und eingeben. Das fällt in die Testphase (1):. „Einen Wert eingeben, um ein bestimmtes Feld“

Selenium RC Verwenden Sie könnten die Phase leicht tun (2) und (3):. Testen jedes Feld unter jedem Ausführungsschritt durch eine Programmierung in einer unterstützten Sprache wie Java, tut PHP, CSharp, Ruby, Perl, Python

Im Folgenden werden die Schritte Phase zu tun, (2) und (3):

  • Erstellen Liste der HTML-Felder, so dass Sie leicht durch sie durchlaufen könnte
  • Erstellen Sie eine Zufallsvariable den Schritt zu steuern, sagen RAND_STEP
  • Erstellen Sie eine Zufallsvariable, das Feld zu steuern, sagen RAND_FIELD
  • [Schließlich erstellen Sie eine Zufallsvariable den Wert zu steuern, in ein bestimmtes Feld eingegeben, sagen RAND_VALUE, wenn Sie Phase tun wollen (1)]
  • Nun, in Ihrem Fuzzing-Algorithmus, iterieren zuerst durch die Werte von RAND_STEP, dann mit jeder solchen Iteration durchläuft RAND_FIELD, dann schließlich durch RAND_VALUE laufen.

Siehe meine andere Antwort über Fuzzing Test, Selen und weiß / Black-Box-Test

Math.random "gut genug" sein, aber in der Praxis die Random Klasse ist oft vorzuziehen Math.random (). Mit Math.random, die Zahlen, die Sie nicht wirklich bekommen können vollständig zufällig sein. Das Buch "Effective Java Second Edition" umfasst dies in Artikel # 47.

Eine weitere Lösung, die ich kopiert habe und eingefügt in die Hunderte von 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>

Jeder Test Suite beginnt mit einer Reihe von Variablen Einstellung (wenn es eine große Suite ist, verwenden Sie eine separate Datei wie Set_Variables.html). Diese Variablen können dann in Ihrer Suite verwendet werden, einzustellen, zu testen und löschen Testdaten. Und da die Variablen das Datum eher als eine Zufallszahl verwenden, können Sie Ihre Testsuite debuggen, indem Sie für die Objekte suchen, die ein Datum teilen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top